2
0
Fork 0

added empty files and fixed a little

This commit is contained in:
willem.cazander 2010-09-25 18:42:09 +02:00
parent d6d77072d9
commit 3d0d609462
43 changed files with 944 additions and 373 deletions

View file

@ -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>

View file

@ -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) {
}
}

View file

@ -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;
}

View file

@ -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) {

View file

@ -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) {

View file

@ -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);