added empty files and fixed a little
This commit is contained in:
parent
d6d77072d9
commit
3d0d609462
43 changed files with 944 additions and 373 deletions
|
|
@ -13,6 +13,12 @@
|
|||
<groupId>com.idcanet.vasc</groupId>
|
||||
<artifactId>vasc-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.idcanet.vasc</groupId>
|
||||
<artifactId>vasc-ejb3</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.faces</groupId>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,405 @@
|
|||
/*
|
||||
* Copyright 2004-2007 IDCA. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
||||
* following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and
|
||||
* the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
|
||||
* and the following disclaimer in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY IDCA AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL IDCA OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the authors and
|
||||
* should not be interpreted as representing official policies, either expressed or implied, of IDCA.
|
||||
*/
|
||||
|
||||
package com.idcanet.vasc.frontends.web.jsf;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.naming.Context;
|
||||
import javax.naming.InitialContext;
|
||||
|
||||
import com.idcanet.vasc.core.VascBackend;
|
||||
import com.idcanet.vasc.core.VascBackendControllerLocal;
|
||||
import com.idcanet.vasc.core.VascBackendState;
|
||||
import com.idcanet.vasc.core.VascController;
|
||||
import com.idcanet.vasc.core.VascEntry;
|
||||
import com.idcanet.vasc.core.VascEntryControllerLocal;
|
||||
import com.idcanet.vasc.core.VascEntryField;
|
||||
import com.idcanet.vasc.core.VascException;
|
||||
import com.idcanet.vasc.core.VascFrontendData;
|
||||
import com.idcanet.vasc.core.entry.VascEntryFieldValue;
|
||||
import com.idcanet.vasc.core.entry.VascEntryFrontendEventListener;
|
||||
import com.idcanet.vasc.core.entry.VascEntryRecordCreator;
|
||||
import com.idcanet.vasc.ejb3.VascServiceManager;
|
||||
import com.idcanet.vasc.impl.DefaultVascBackedEntryFinalizer;
|
||||
import com.idcanet.vasc.impl.DefaultVascFactory;
|
||||
import com.idcanet.vasc.impl.entry.DefaultVascEntryResourceResolver;
|
||||
|
||||
/**
|
||||
* Base faces session object for managing vasc entries.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Sep 21, 2010
|
||||
*/
|
||||
abstract public class AbstractJSFVascFacesController {
|
||||
|
||||
private VascController vascController = null;
|
||||
|
||||
abstract public String getVascSericeManagerJNDI();
|
||||
abstract public String getResourceBundleWEB();
|
||||
abstract public boolean getDisableI18N();
|
||||
abstract public VascUserInfo getVascUserInfo();
|
||||
|
||||
public class VascUserInfo {
|
||||
Long userId;
|
||||
String username;
|
||||
String[] roles;
|
||||
public VascUserInfo(Long userId,String username,String[] roles) {
|
||||
this.userId=userId;
|
||||
this.username=username;
|
||||
this.roles=roles;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
class RefreshObjectForLazyPropertiesListener implements VascEntryFrontendEventListener {
|
||||
public VascFrontendEventType[] getEventTypes() {
|
||||
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.POST_UPDATE};
|
||||
return result;
|
||||
}
|
||||
public void vascEvent(VascEntry entry,Object data) {
|
||||
if (data.getClass().getName().startsWith("com.idcanet.logstats.ejb.models")==false) {
|
||||
return; // only refresh model classes
|
||||
}
|
||||
|
||||
// TODO: mmm rewrite events to change to different object to use ejb3++ solution ?
|
||||
// Use hiberbate session to attach a detected object again. (note: this is not possible with EJB3, uses merge() which returns a new object)
|
||||
//((Session)entityManager.getDelegate()).refresh(data);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
class MergedResourceBundle extends ResourceBundle {
|
||||
Map<String,String> data = new HashMap<String,String>(500);
|
||||
|
||||
public void addDateMap(Map<String,String> dataMap) {
|
||||
data.putAll(dataMap);
|
||||
}
|
||||
public void addDataBundle(ResourceBundle bundle) {
|
||||
for (String key:bundle.keySet()) {
|
||||
String value = bundle.getString(key);
|
||||
data.put(key, value);
|
||||
}
|
||||
}
|
||||
public Object handleGetObject(String key) {
|
||||
return data.get(key);
|
||||
}
|
||||
|
||||
public Enumeration<String> getKeys() {
|
||||
return Collections.enumeration(data.keySet());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Config vasc frontend data object for jsf component to use.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public VascFrontendData getNewVascFrontendData() {
|
||||
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
|
||||
MergedResourceBundle bundle = new MergedResourceBundle();
|
||||
bundle.addDataBundle(ResourceBundle.getBundle(getResourceBundleWEB(), locale));
|
||||
|
||||
try {
|
||||
Context context = new InitialContext();
|
||||
VascServiceManager vascManager = (VascServiceManager)context.lookup(getVascSericeManagerJNDI());
|
||||
Map<String,String> remoteI18n = vascManager.getResourceBundle(locale.toString());
|
||||
bundle.addDateMap(remoteI18n);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Could not get the ejb resource bundle: "+e.getMessage(),e);
|
||||
}
|
||||
|
||||
VascFrontendData vascFrontendData = DefaultVascFactory.getDefaultVascFrontendData(bundle);
|
||||
vascFrontendData.addVascEntryFrontendEventListener(new VascEntryFrontendEventListener() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public VascFrontendEventType[] getEventTypes() {
|
||||
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.EXCEPTION};
|
||||
return result;
|
||||
}
|
||||
public void vascEvent(VascEntry entry, Object data) {
|
||||
if (data instanceof Exception) {
|
||||
((Exception)data).printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// config frontend data for ISF usage
|
||||
if (getDisableI18N()) {
|
||||
vascFrontendData.setVascEntryResourceResolver(new DefaultVascEntryResourceResolver());
|
||||
} else {
|
||||
vascFrontendData.setVascEntryResourceResolver(new DefaultVascEntryResourceResolver(bundle));
|
||||
}
|
||||
return vascFrontendData;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public List<Object> executeVascList(String entryId,Map<String,Object> para) {
|
||||
try {
|
||||
// plug all object
|
||||
VascEntry entry = getVascController().getVascEntryController().getVascEntryById(entryId);
|
||||
entry.setVascFrontendData(getNewVascFrontendData());
|
||||
entry.getVascFrontendData().setVascController(getVascController());
|
||||
|
||||
// copy para
|
||||
if (para!=null) {
|
||||
for (String key:para.keySet()) {
|
||||
entry.setEntryParameter(key, para.get(key));
|
||||
}
|
||||
}
|
||||
|
||||
// done, execute and return data.
|
||||
entry.getVascFrontendData().getVascFrontendHelper().refreshData(entry);
|
||||
return entry.getVascFrontendData().getVascEntryState().getEntryDataList();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return new ArrayList<Object>(0);
|
||||
}
|
||||
}
|
||||
|
||||
class RemoteVascBackend implements VascBackend {
|
||||
|
||||
private String backendId = null;
|
||||
private VascServiceManager vascManager = null;
|
||||
|
||||
public RemoteVascBackend(String backendId,VascServiceManager vascManager) {
|
||||
this.backendId=backendId;
|
||||
this.vascManager=vascManager;
|
||||
}
|
||||
|
||||
public void delete(Object object) throws VascException {
|
||||
Object[] args = new Object[1];
|
||||
args[0]=object;
|
||||
vascManager.invokeBackendMethod(backendId, "delete", args);
|
||||
}
|
||||
|
||||
public long doRecordMoveDownById(VascBackendState state,Object primaryId) throws VascException {
|
||||
Object[] args = new Object[2];
|
||||
args[0]=state;
|
||||
args[1]=primaryId;
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "doRecordMoveDownById", args);
|
||||
return (Long)result;
|
||||
}
|
||||
|
||||
public long doRecordMoveUpById(VascBackendState state, Object primaryId) throws VascException {
|
||||
Object[] args = new Object[2];
|
||||
args[0]=state;
|
||||
args[1]=primaryId;
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "doRecordMoveUpById", args);
|
||||
return (Long)result;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<Object> execute(VascBackendState state) throws VascException {
|
||||
Object[] args = new Object[1];
|
||||
args[0]=state;
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "execute", args);
|
||||
return (List<Object>)result;
|
||||
}
|
||||
|
||||
public long fetchTotalExecuteSize(VascBackendState state) {
|
||||
Object[] args = new Object[1];
|
||||
args[0]=state;
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "fetchTotalExecuteSize", args);
|
||||
return (Long)result;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return backendId;
|
||||
}
|
||||
|
||||
public boolean isPageable() {
|
||||
Object[] args = new Object[0];
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "isPageable", args);
|
||||
return (Boolean)result;
|
||||
}
|
||||
|
||||
public boolean isRecordMoveable() {
|
||||
Object[] args = new Object[0];
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "isRecordMoveable", args);
|
||||
return (Boolean)result;
|
||||
}
|
||||
|
||||
public boolean isSearchable() {
|
||||
Object[] args = new Object[0];
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "isSearchable", args);
|
||||
return (Boolean)result;
|
||||
}
|
||||
|
||||
public boolean isSortable() {
|
||||
Object[] args = new Object[0];
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "isSortable", args);
|
||||
return (Boolean)result;
|
||||
}
|
||||
|
||||
public Object merge(Object object) throws VascException {
|
||||
Object[] args = new Object[1];
|
||||
args[0]=object;
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "merge", args);
|
||||
return result;
|
||||
}
|
||||
|
||||
public void persist(Object object) throws VascException {
|
||||
Object[] args = new Object[1];
|
||||
args[0]=object;
|
||||
vascManager.invokeBackendMethod(backendId, "delete", args);
|
||||
}
|
||||
|
||||
public VascEntryFieldValue provideVascEntryFieldValue(VascEntryField field) {
|
||||
/*
|
||||
try {
|
||||
ByteArrayOutputStream dataArray = new ByteArrayOutputStream(256); // it grows when needed
|
||||
ObjectOutputStream objOutstream = new ObjectOutputStream(dataArray);
|
||||
objOutstream.writeObject(field);
|
||||
objOutstream.close();
|
||||
int objectSize = dataArray.size();
|
||||
System.out.println("Writing obj to field: "+objectSize);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
*/
|
||||
Object[] args = new Object[1];
|
||||
args[0]=field;
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "provideVascEntryFieldValue", args);
|
||||
return (VascEntryFieldValue)result;
|
||||
}
|
||||
|
||||
public VascEntryRecordCreator provideVascEntryRecordCreator(VascEntry vascEntry) {
|
||||
VascEntry clone = null;
|
||||
try {
|
||||
clone = vascEntry.clone();
|
||||
clone.setVascFrontendData(null);
|
||||
clone.setVascEntryFieldEventChannel(null);
|
||||
} catch (CloneNotSupportedException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
try {
|
||||
ByteArrayOutputStream dataArray = new ByteArrayOutputStream(256); // it grows when needed
|
||||
ObjectOutputStream objOutstream = new ObjectOutputStream(dataArray);
|
||||
objOutstream.writeObject(clone);
|
||||
objOutstream.close();
|
||||
//int objectSize = dataArray.size();
|
||||
//System.out.println("Writing obj to entry: "+objectSize);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
Object[] args = new Object[1];
|
||||
args[0]=clone;
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "provideVascEntryRecordCreator", args);
|
||||
return (VascEntryRecordCreator)result;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
// we cant change id
|
||||
}
|
||||
|
||||
public Map<String, Object> executePageSummary() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Map<String, Object> executeTotalSummary() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isPageSummary() {
|
||||
Object[] args = new Object[0];
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "isPageSummary", args);
|
||||
return (Boolean)result;
|
||||
}
|
||||
|
||||
public boolean isTotalSummary() {
|
||||
Object[] args = new Object[0];
|
||||
Object result = vascManager.invokeBackendMethod(backendId, "isTotalSummary", args);
|
||||
return (Boolean)result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the vascController
|
||||
*/
|
||||
public VascController getVascController() {
|
||||
if (vascController!=null) {
|
||||
return vascController;
|
||||
}
|
||||
try {
|
||||
VascUserInfo vui = getVascUserInfo();
|
||||
|
||||
|
||||
// get local jvm plugging controller
|
||||
VascController c = DefaultVascFactory.getDefaultVascController(vui.userId, vui.username, vui.roles);
|
||||
|
||||
/*
|
||||
DefaultVascEntryController con = new DefaultVascEntryController() {
|
||||
public VascEntry getVascEntryById(String id) {
|
||||
VascEntry ve = super.getVascEntryById(id);
|
||||
// add global listener to make sure we have all LAZY properties of a bean before we goto edit mode.
|
||||
ve.addVascEntryEventListener(VascEventType.DATA_SELECT, new RefreshObjectForLazyPropertiesListener());
|
||||
return ve;
|
||||
}
|
||||
};
|
||||
((DefaultVascController)c).setVascEntryController(con);
|
||||
*/
|
||||
|
||||
Context context = new InitialContext();
|
||||
VascServiceManager vascManager = (VascServiceManager)context.lookup(getVascSericeManagerJNDI());
|
||||
List<String> entryIds = vascManager.getVascEntryIds();
|
||||
|
||||
VascEntryControllerLocal localEntryController = (VascEntryControllerLocal)c.getVascEntryController();
|
||||
VascBackendControllerLocal localBackendController = (VascBackendControllerLocal)c.getVascBackendController();
|
||||
for (String id:entryIds) {
|
||||
VascEntry ve = vascManager.getVascEntry(id);
|
||||
String backendId = ve.getBackendId();
|
||||
VascBackend vb = new RemoteVascBackend(backendId,vascManager);
|
||||
localBackendController.addVascBackend(vb);
|
||||
|
||||
DefaultVascBackedEntryFinalizer f = new DefaultVascBackedEntryFinalizer();
|
||||
ve = f.finalizeVascEntry(ve,c);
|
||||
|
||||
localEntryController.addVascEntry(ve, c);
|
||||
}
|
||||
vascController = c;
|
||||
return vascController;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Could not create remote based vasc controller; "+e.getMessage(),e);
|
||||
}
|
||||
}
|
||||
|
||||
public void setVascController(VascController vascController) {
|
||||
}
|
||||
}
|
||||
|
|
@ -31,7 +31,7 @@ public class JSFVascEntryEventListener implements VascEntryFrontendEventListener
|
|||
* @see com.idcanet.vasc.core.entry.VascEntryFrontendEventListener#getEventTypes()
|
||||
*/
|
||||
public VascFrontendEventType[] getEventTypes() {
|
||||
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.DATA_LIST_UPDATE};
|
||||
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.POST_READ};
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -239,7 +239,7 @@ public class JSFVascUIComponent extends UIComponentBase {
|
|||
try {
|
||||
VascEntry entry = supportBean.getVascEntry();
|
||||
entry.getVascFrontendData().getVascEntryState().setEditCreate(false);
|
||||
entry.getVascFrontendData().getVascFrontendHelper().fireVascEvent(entry, VascFrontendEventType.DATA_SELECT, rowObject);
|
||||
entry.getVascFrontendData().getVascFrontendHelper().fireVascEvent(entry, VascFrontendEventType.SELECT, rowObject);
|
||||
entry.getVascFrontendData().getVascEntryState().setEntryDataObject(rowObject);
|
||||
entry.getVascFrontendData().getVascFrontend().renderEdit();
|
||||
} catch (Exception e) {
|
||||
|
|
@ -408,7 +408,7 @@ public class JSFVascUIComponent extends UIComponentBase {
|
|||
this.value=value;
|
||||
}
|
||||
public VascFrontendEventType[] getEventTypes() {
|
||||
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.DATA_CREATE};
|
||||
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.PRE_CREATE};
|
||||
return result;
|
||||
}
|
||||
public void vascEvent(VascEntry entry,Object data) {
|
||||
|
|
|
|||
|
|
@ -239,7 +239,7 @@ public class OldVascUIComponent extends UIComponentBase {
|
|||
entry.getVascFrontendData().addVascEntryFrontendEventListener(new VascEntryFrontendEventListener() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public VascFrontendEventType[] getEventTypes() {
|
||||
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.DATA_LIST_UPDATE};
|
||||
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.POST_READ};
|
||||
return result;
|
||||
}
|
||||
public void vascEvent(VascEntry entry, Object dataNotUsed) {
|
||||
|
|
@ -496,7 +496,7 @@ public class OldVascUIComponent extends UIComponentBase {
|
|||
this.value=value;
|
||||
}
|
||||
public VascFrontendEventType[] getEventTypes() {
|
||||
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.DATA_CREATE};
|
||||
VascFrontendEventType[] result = {VascEntryFrontendEventListener.VascFrontendEventType.PRE_CREATE};
|
||||
return result;
|
||||
}
|
||||
public void vascEvent(VascEntry entry,Object data) {
|
||||
|
|
|
|||
|
|
@ -162,11 +162,17 @@ public class VascRequestFacesFilter implements Filter {
|
|||
// Set page title
|
||||
Locale locale = facesContext.getViewRoot().getLocale();
|
||||
if (locale==null) {
|
||||
locale = Locale.getDefault();
|
||||
logger.info("Failling back to defualt.");
|
||||
locale = new Locale("nl");
|
||||
}
|
||||
try {
|
||||
ResourceBundle i18n = ResourceBundle.getBundle(resourceBundle,locale);
|
||||
String titleI18n = i18n.getString("vasc.entry."+entityName+".name");
|
||||
request.setAttribute("requestScopeVascEntityNameI18n" ,titleI18n);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
request.setAttribute("requestScopeVascEntityNameI18n" ,entityName);
|
||||
}
|
||||
ResourceBundle i18n = ResourceBundle.getBundle(resourceBundle,locale);
|
||||
String titleI18n = i18n.getString("vasc.entry."+entityName+".name");
|
||||
request.setAttribute("requestScopeVascEntityNameI18n" ,titleI18n);
|
||||
|
||||
try {
|
||||
request.getRequestDispatcher(templateFile).forward(request, response);
|
||||
|
|
|
|||
0
vasc-frontend-web-jsf/src/test/java/.empty
Normal file
0
vasc-frontend-web-jsf/src/test/java/.empty
Normal file
0
vasc-frontend-web-jsf/src/test/resources/.empty
Normal file
0
vasc-frontend-web-jsf/src/test/resources/.empty
Normal file
Loading…
Add table
Add a link
Reference in a new issue