2
0
Fork 0

made first demo almost fully working

This commit is contained in:
Willem Cazander 2012-11-26 16:08:45 +01:00
parent 2a0d992642
commit 01b3b5cc54
104 changed files with 3259 additions and 2181 deletions

View file

@ -58,8 +58,8 @@ zie tables statline.cbs.nl voor bs asielverzoeken nl
- Extjs - Extjs
- Swing - Swing
- WS - WS
- SWT via SwingWT - SWT
- JSF (met utr plugin) - JSF
@ -167,34 +167,6 @@ public class BlogPost {
<servlet>
<name>vasc</name>
<class></class>
<property>admin=true</property>
<property>backend=extjs</property>
<property>path=/js/extjs/*</property>
</servlet>
<servlet-mapping>
<name>vasc</name>
<mapping>/vasc/*</mapping>
</servlet-mapping>
EmployeeDataSource dataSource = new EmployeeDataSource();
dataSource.setJdbcTemplate(new JdbcTemplate(employeeDataSource()));
FilteringPaginator filteringPaginator = new FilteringPaginator(dataSource, EmployeeReportObject.class);
JsfCrudAdapter adapter = new JsfCrudAdapter(filteringPaginator, (CrudController)empCrud().getController()){
public Serializable getEntity() {
Object object = ((Row)getModel().getRowData()).getObject();
EmployeeReportObject employeeReportObject = (EmployeeReportObject) object;
Employee employee = new Employee();
employee.setId(employeeReportObject.getId());
return employee;
}
};
return adapter;
EVt; EVt;
<a4j:form id="blogForm" enctype="multipart/form-data"> <a4j:form id="blogForm" enctype="multipart/form-data">
@ -223,46 +195,8 @@ EVt;
@SuppressWarnings({ "unchecked", "serial" })
@Bean(scope = DefaultScopes.SESSION)
public JsfCrudAdapter empRecordCrud() {
EmployeeDataSource dataSource = new EmployeeDataSource();
dataSource.setJdbcTemplate(new JdbcTemplate(employeeDataSource()));
FilteringPaginator filteringPaginator = new FilteringPaginator(dataSource, EmployeeReportObject.class);
JsfCrudAdapter adapter = new JsfCrudAdapter(filteringPaginator, (CrudController)empCrud().getController()){
public Serializable getEntity() {
Object object = ((Row)getModel().getRowData()).getObject();
EmployeeReportObject employeeReportObject = (EmployeeReportObject) object;
Employee employee = new Employee();
employee.setId(employeeReportObject.getId());
return employee;
}
};
return adapter;
}
<a4j:form id="employeeListingForm">
<a4j:outputPanel ajaxRendered="true">
<h:panelGroup rendered="${empRecordCrud.controller.showForm}">
<crank:form
crud="${empRecordCrud.controller}"
parentForm="employeeListingForm"
propertyNames="firstName,lastName,numberOfPromotions,age,department" ajax="${true}" />
</h:panelGroup>
</a4j:outputPanel>
<crank:listing
jsfCrudAdapter="${empRecordCrud}"
propertyNames="firstName,lastName"
parentForm="employeeListingForm"
/>
</a4j:form>
<h:form id="expListForm" rendered="#{controllerBean.showListing}"> <h:form id="expListForm" rendered="#{controllerBean.showListing}">
<crank:listing paginator="${paginators['Employee']}" <vasc:listing paginator="${paginators['Employee']}"
jsfCrudAdapter="${cruds['Employee']}" jsfCrudAdapter="${cruds['Employee']}"
propertyNames="firstName,lastName,active,dob,age,phone,email,department.name,description" propertyNames="firstName,lastName,active,dob,age,phone,email,department.name,description"
pageTitle="Employees" pageTitle="Employees"

View file

@ -22,6 +22,11 @@
package net.forwardfire.vasc.backend.metamodel; package net.forwardfire.vasc.backend.metamodel;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.eobjects.metamodel.DataContext; import org.eobjects.metamodel.DataContext;
@ -29,11 +34,14 @@ import org.eobjects.metamodel.schema.Column;
import org.eobjects.metamodel.schema.Relationship; import org.eobjects.metamodel.schema.Relationship;
import org.eobjects.metamodel.schema.Table; import org.eobjects.metamodel.schema.Table;
import net.forwardfire.vasc.backend.VascBackend;
import net.forwardfire.vasc.backend.VascBackendControllerLocal; import net.forwardfire.vasc.backend.VascBackendControllerLocal;
import net.forwardfire.vasc.core.VascController; import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascEntry; import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryAccessType;
import net.forwardfire.vasc.core.VascEntryControllerLocal; import net.forwardfire.vasc.core.VascEntryControllerLocal;
import net.forwardfire.vasc.core.VascEntryFieldLocal; import net.forwardfire.vasc.core.VascEntryFieldLocal;
import net.forwardfire.vasc.core.VascEntryGroupLocal;
import net.forwardfire.vasc.core.VascEntryLinkType; import net.forwardfire.vasc.core.VascEntryLinkType;
import net.forwardfire.vasc.core.VascEntryLocal; import net.forwardfire.vasc.core.VascEntryLocal;
@ -53,15 +61,25 @@ public class MetaModelSchemaAutoEntry {
private Logger logger = null; private Logger logger = null;
private VascController vascController = null; private VascController vascController = null;
private MetaModelDataContextProvider dataContextProvider = null; private MetaModelDataContextProvider dataContextProvider = null;
private List<String> tables = null;
private String tableInclude = null; private String tableInclude = null;
private String tableExclude = null; private String tableExclude = null;
private String entryPrefix = null; private String entryPrefix = null;
private String vascGroupId = null;
private Map<String,VascEntryLocal> resultEntries = null;
private Map<String,VascEntryGroupLocal> resultEntryGroups = null;
private Map<String,MetaModelVascBackend> resultBackends = null;
public MetaModelSchemaAutoEntry() { public MetaModelSchemaAutoEntry() {
logger = Logger.getLogger(MetaModelSchemaAutoEntry.class.getName()); logger = Logger.getLogger(MetaModelSchemaAutoEntry.class.getName());
tables = new ArrayList<String>();
resultEntries = new HashMap<String,VascEntryLocal>();
resultEntryGroups = new HashMap<String,VascEntryGroupLocal>();
resultBackends = new HashMap<String,MetaModelVascBackend>();
} }
public void autoCreateEntries(VascController vascController) { public void autoFillResult(VascController vascController) {
if (getDataContextProvider()==null) { if (getDataContextProvider()==null) {
throw new NullPointerException("Can't auto create entries with null dataContextProvider."); throw new NullPointerException("Can't auto create entries with null dataContextProvider.");
} }
@ -72,6 +90,10 @@ public class MetaModelSchemaAutoEntry {
DataContext ds = getDataContextProvider().getDataContext(); DataContext ds = getDataContextProvider().getDataContext();
for (String table:ds.getDefaultSchema().getTableNames()) { for (String table:ds.getDefaultSchema().getTableNames()) {
if (tables.isEmpty()==false && tables.contains(table)==false) {
logger.finer("Excluding table: "+table+" because not in table list.");
continue;
}
if (getTableInclude()!=null && table.matches(getTableInclude())==false) { if (getTableInclude()!=null && table.matches(getTableInclude())==false) {
logger.finer("Excluding table: "+table+" from include rule."); logger.finer("Excluding table: "+table+" from include rule.");
continue; continue;
@ -84,10 +106,22 @@ public class MetaModelSchemaAutoEntry {
} }
} }
public void autoAddResultToController() {
for (VascBackend backend:resultBackends.values()) {
((VascBackendControllerLocal)getVascController().getVascBackendController()).addVascBackend(backend);
}
for (VascEntryLocal ve:resultEntries.values()) {
((VascEntryControllerLocal)getVascController().getVascEntryController()).addVascEntry(ve);
}
for (VascEntryGroupLocal veg:resultEntryGroups.values()) {
((VascEntryControllerLocal)getVascController().getVascEntryController()).addVascEntryGroup(veg);
}
}
private VascController getVascController() { private VascController getVascController() {
return vascController; return vascController;
} }
private void createMetaEntry(DataContext ds,String id,String tableName) { private void createMetaEntry(DataContext ds,String id,String tableName) {
logger.fine("Creating entry id: "+id+" of table: "+tableName); logger.fine("Creating entry id: "+id+" of table: "+tableName);
Table metaTable = null; Table metaTable = null;
@ -117,28 +151,28 @@ public class MetaModelSchemaAutoEntry {
ve.setId(id); ve.setId(id);
ve.setBackendId(id+"_backend"); ve.setBackendId(id+"_backend");
ve.setPrimaryKeyFieldId(backend.getTableId()); ve.setPrimaryKeyFieldId(backend.getTableId());
ve.setVascGroupId(getVascGroupId());
createFields(ve,cols); createFields(ve,cols);
for (Relationship rs:metaTable.getRelationships()) { for (Relationship rs:metaTable.getRelationships()) {
logger.finer("Found relation FT: "+rs.getForeignTable().getName()+" PT: "+rs.getPrimaryTable().getName()); logger.finer("Found relation FT: "+rs.getForeignTable().getName()+" PT: "+rs.getPrimaryTable().getName());
if (tableName.equals(rs.getForeignTable().getName())==false) { if (tableName.equals(rs.getForeignTable().getName())==false) {
logger.finer("Creating Link entry for: "+rs.getForeignColumns()[0].getName()+" of table: "+rs.getForeignTable().getName()); logger.finer("Creating Link entry for: "+rs.getForeignColumns()[0].getName()+" of table: "+rs.getForeignTable().getName());
createLinkEntry(rs,ve,metaTable,id+"_"+rs.getForeignTable().getName()+"_"+rs.getForeignColumns()[0].getName()+"_link"); createLinkEntry(rs,ve,metaTable);
//createLinkEntry(rs,ve,metaTable,id+"_"+rs.getForeignTable().getName()+"_"+rs.getForeignColumns()[0].getName()+"_link");
} else { } else {
logger.finer("Creating List entry for: "+rs.getPrimaryColumns()[0].getName()+" of table: "+rs.getPrimaryTable().getName()); logger.finer("Creating List entry for: "+rs.getPrimaryColumns()[0].getName()+" of table: "+rs.getPrimaryTable().getName());
createListEntry(rs,ve,metaTable,id+"_"+rs.getPrimaryTable().getName()+"_"+rs.getPrimaryColumns()[0].getName()+"_list"); createListEntry(rs,ve,metaTable);
//createListEntry(rs,ve,metaTable,id+"_"+rs.getPrimaryTable().getName()+"_"+rs.getPrimaryColumns()[0].getName()+"_list");
} }
} }
try { resultBackends.put(backend.getId(),backend);
((VascBackendControllerLocal)getVascController().getVascBackendController()).addVascBackend(backend); resultEntries.put(ve.getId(),ve);
((VascEntryControllerLocal)getVascController().getVascEntryController()).addVascEntry(ve);
} catch (Exception ee) {
ee.printStackTrace();
}
} }
private void createLinkEntry(Relationship rs2,VascEntryLocal ve,Table metaTable,String id) { private void createLinkEntry(Relationship rs2,VascEntryLocal ve,Table metaTable) {
String id = getEntryPrefix()+"_"+metaTable.getName()+"_link";
MetaModelVascBackend backendLink = new MetaModelVascBackend(); MetaModelVascBackend backendLink = new MetaModelVascBackend();
backendLink.setId(id+"_backend"); backendLink.setId(id+"_backend");
backendLink.setDataContextProvider(getDataContextProvider()); backendLink.setDataContextProvider(getDataContextProvider());
@ -159,6 +193,8 @@ public class MetaModelSchemaAutoEntry {
veLink.setId(id); veLink.setId(id);
veLink.setBackendId(id+"_backend"); veLink.setBackendId(id+"_backend");
veLink.setPrimaryKeyFieldId(backendLink.getTableId()); veLink.setPrimaryKeyFieldId(backendLink.getTableId());
veLink.setVascGroupId(getVascGroupId());
veLink.setAccessType(VascEntryAccessType.ENTRY_LIST);
createFields(veLink,cols); createFields(veLink,cols);
for (Relationship rs:rs2.getForeignTable().getRelationships()) { for (Relationship rs:rs2.getForeignTable().getRelationships()) {
@ -168,32 +204,31 @@ public class MetaModelSchemaAutoEntry {
//createLinkEntry(rs,ve,rs2.getForeignTable(),id+"_"+rs.getForeignTable().getName()+"_"+rs.getForeignColumns()[0].getName()+"_link"); //createLinkEntry(rs,ve,rs2.getForeignTable(),id+"_"+rs.getForeignTable().getName()+"_"+rs.getForeignColumns()[0].getName()+"_link");
} else { } else {
logger.fine("Creating List entry for: "+rs.getPrimaryColumns()[0].getName()+" of table: "+rs.getPrimaryTable().getName()); logger.fine("Creating List entry for: "+rs.getPrimaryColumns()[0].getName()+" of table: "+rs.getPrimaryTable().getName());
createListEntry(rs,veLink,rs2.getForeignTable(),id+"_"+rs.getPrimaryTable().getName()+"_"+rs.getPrimaryColumns()[0].getName()+"_list"); createListEntry(rs,veLink,rs2.getForeignTable());
//createListEntry(rs,veLink,rs2.getForeignTable(),id+"_"+rs.getPrimaryTable().getName()+"_"+rs.getPrimaryColumns()[0].getName()+"_list");
} }
} }
try { if (resultBackends.containsKey(backendLink.getId())==false) {
((VascBackendControllerLocal)getVascController().getVascBackendController()).addVascBackend(backendLink); resultBackends.put(backendLink.getId(),backendLink);
((VascEntryControllerLocal)getVascController().getVascEntryController()).addVascEntry(veLink); resultEntries.put(veLink.getId(),veLink);
DefaultVascEntryLink vle = new DefaultVascEntryLink();
vle.setId(id+"Link");
vle.setVascLinkEntryType(VascEntryLinkType.DEFAULT_TYPE);
vle.setVascEntryId(id);
vle.addEntryParameterFieldId(rs2.getForeignColumns()[0].getName(), rs2.getPrimaryColumns()[0].getName());
ve.addVascEntryLink(vle);
} catch (Exception e) {
e.printStackTrace();
} }
DefaultVascEntryLink vle = new DefaultVascEntryLink();
vle.setId(id+"Link");
vle.setVascEntryLinkType(VascEntryLinkType.DEFAULT_TYPE);
vle.setVascEntryId(id);
vle.addEntryParameterFieldId(rs2.getForeignColumns()[0].getName(), rs2.getPrimaryColumns()[0].getName());
ve.addVascEntryLink(vle);
} }
private void createListEntry(Relationship rs,VascEntry ve,Table metaTable,String id) { private void createListEntry(Relationship rs,VascEntry ve,Table metaTable) {
MetaModelVascBackend backendLink = new MetaModelVascBackend(); String id = getEntryPrefix()+"_"+metaTable.getName()+"_list";
backendLink.setId(id+"_backend"); MetaModelVascBackend backendList = new MetaModelVascBackend();
backendLink.setDataContextProvider(getDataContextProvider()); backendList.setId(id+"_backend");
backendLink.setTable(rs.getPrimaryTable().getName()); backendList.setDataContextProvider(getDataContextProvider());
backendList.setTable(rs.getPrimaryTable().getName());
Column[] keys = rs.getPrimaryTable().getPrimaryKeys(); Column[] keys = rs.getPrimaryTable().getPrimaryKeys();
Column[] cols = rs.getPrimaryTable().getColumns(); Column[] cols = rs.getPrimaryTable().getColumns();
@ -201,33 +236,35 @@ public class MetaModelSchemaAutoEntry {
return; return;
} }
if (keys.length>0) { if (keys.length>0) {
backendLink.setTableId(keys[0].getName()); backendList.setTableId(keys[0].getName());
} else { } else {
backendLink.setTableId(cols[0].getName()); backendList.setTableId(cols[0].getName());
} }
DefaultVascEntry veLink = new DefaultVascEntry(); DefaultVascEntry veList = new DefaultVascEntry();
veLink.setId(id); veList.setId(id);
veLink.setBackendId(id+"_backend"); veList.setBackendId(id+"_backend");
veLink.setPrimaryKeyFieldId(backendLink.getTableId()); veList.setPrimaryKeyFieldId(backendList.getTableId());
createFields(veLink,cols); veList.setVascGroupId(getVascGroupId());
try { veList.setAccessType(VascEntryAccessType.ENTRY_LIST);
VascEntryFieldLocal vef = (VascEntryFieldLocal)ve.getVascEntryFieldById(rs.getForeignColumns()[0].getName()); createFields(veList,cols);
if (vef==null) {
logger.warning("Could not find: "+rs.getForeignColumns()[0].getName()+" in ve: "+ve.getId()); if (resultBackends.containsKey(backendList.getId())==false) {
return; resultBackends.put(backendList.getId(),backendList);
} resultEntries.put(veList.getId(),veList);
vef.setVascEntryFieldType(getVascController().getVascEntryFieldTypeController().getVascEntryFieldTypeById("ListField"));
VascSelectItemModelEntry itemModel = new VascSelectItemModelEntry();
itemModel.setEntryId(veLink.getId());
itemModel.setDisplayFieldId(veLink.getDisplayNameFieldId());
vef.getVascEntryFieldType().setDataObject(itemModel);
((VascBackendControllerLocal)getVascController().getVascBackendController()).addVascBackend(backendLink);
((VascEntryControllerLocal)getVascController().getVascEntryController()).addVascEntry(veLink);
} catch (Exception e) {
e.printStackTrace();
} }
VascEntryFieldLocal vef = (VascEntryFieldLocal)ve.getVascEntryFieldById(rs.getForeignColumns()[0].getName());
if (vef==null) {
logger.warning("Could not find: "+rs.getForeignColumns()[0].getName()+" in ve: "+ve.getId());
return;
}
vef.setVascEntryFieldType(getVascController().getVascEntryFieldTypeController().getVascEntryFieldTypeById("ListField"));
VascSelectItemModelEntry itemModel = new VascSelectItemModelEntry();
itemModel.setEntryId(veList.getId());
itemModel.setDisplayFieldId(veList.getDisplayNameFieldId());
vef.getVascEntryFieldType().setDataObject(itemModel);
} }
private void createFields(VascEntryLocal ve,Column[] cols) { private void createFields(VascEntryLocal ve,Column[] cols) {
@ -317,4 +354,53 @@ public class MetaModelSchemaAutoEntry {
public void setEntryPrefix(String entryPrefix) { public void setEntryPrefix(String entryPrefix) {
this.entryPrefix = entryPrefix; this.entryPrefix = entryPrefix;
} }
/**
* @return the vascGroupId
*/
public String getVascGroupId() {
return vascGroupId;
}
/**
* @param vascGroupId the vascGroupId to set
*/
public void setVascGroupId(String vascGroupId) {
this.vascGroupId = vascGroupId;
}
/**
* @return the resultEntries
*/
public Collection<VascEntryLocal> getResultEntries() {
return resultEntries.values();
}
/**
* @return the resultEntryGroups
*/
public Collection<VascEntryGroupLocal> getResultEntryGroups() {
return resultEntryGroups.values();
}
/**
* @return the resultBackends
*/
public Collection<MetaModelVascBackend> getResultBackends() {
return resultBackends.values();
}
/**
* @return the tables
*/
public List<String> getTables() {
return tables;
}
public void addTable(String table) {
tables.add(table);
}
public void removeTable(String table) {
tables.remove(table);
}
} }

View file

@ -51,6 +51,7 @@ public class SchemaAutoEntryElementConfigurator extends AbstractElementConfigura
} }
MetaModelSchemaAutoEntry autoEntry = (MetaModelSchemaAutoEntry)element.getElementObject(); MetaModelSchemaAutoEntry autoEntry = (MetaModelSchemaAutoEntry)element.getElementObject();
VascController vascController = VascParser.getVascController(element.getElementLanguage()); VascController vascController = VascParser.getVascController(element.getElementLanguage());
autoEntry.autoCreateEntries(vascController); autoEntry.autoFillResult(vascController);
autoEntry.autoAddResultToController();
} }
} }

View file

@ -0,0 +1,227 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.ejb3;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.List;
import java.util.Map;
import net.forwardfire.vasc.backend.VascBackend;
import net.forwardfire.vasc.backend.VascBackendState;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascEntryFieldLocal;
import net.forwardfire.vasc.core.VascEntryLocal;
import net.forwardfire.vasc.core.VascException;
import net.forwardfire.vasc.core.entry.VascEntryFieldValue;
import net.forwardfire.vasc.core.entry.VascEntryRecordCreator;
/**
* VascServiceRemoteBackend wraps VascBasckend to the ejb3 context.
*
* @author Willem Cazander
* @version 1.0 18 Nov 2012
*/
public class VascServiceRemoteBackend implements VascBackend {
private String backendId = null;
private VascServiceManager vascManager = null;
public VascServiceRemoteBackend(VascServiceManager vascManager,String backendId) {
if (vascManager==null) {
throw new NullPointerException("Can't be remote backend on null VascServiceManager.");
}
if (backendId==null) {
throw new NullPointerException("Can't be remote backend on null backendId.");
}
this.vascManager=vascManager;
this.backendId=backendId;
}
public void startBackend() {
}
public void stopBackend() {
}
public String getId() {
return backendId;
}
public void setId(String id) {
// we cant change id
}
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 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 {
field = ((VascEntryFieldLocal)field).clone(); // RM...
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 (Exception 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) {
VascEntryLocal clone = null;
try {
clone = ((VascEntryLocal)vascEntry).clone();
clone.setVascFrontendController(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;
}
@SuppressWarnings("unchecked")
public Map<String, Object> executePageSummary() {
Object[] args = new Object[0];
Object result = vascManager.invokeBackendMethod(backendId, "executePageSummary", args);
return (Map<String, Object>)result;
}
@SuppressWarnings("unchecked")
public Map<String, Object> executeTotalSummary() {
Object[] args = new Object[0];
Object result = vascManager.invokeBackendMethod(backendId, "executeTotalSummary", args);
return (Map<String, Object>)result;
}
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;
}
public boolean isReadOnly() {
Object[] args = new Object[0];
Object result = vascManager.invokeBackendMethod(backendId, "isReadOnly", args);
return (Boolean)result;
}
}

View file

@ -98,40 +98,28 @@ public class VascServiceManagerImpl implements VascServiceManagerRemote,VascServ
// resourceBundle = ResourceBundle.getBundle(value); // resourceBundle = ResourceBundle.getBundle(value);
//} //}
} }
/*
if (entityManager==null) {
new NullPointerException("Have no entityManager");
}
if (xpqlController==null) {
new NullPointerException("Have no xpqlController");
}*/
//if (resourceBundle==null) {
// new NullPointerException("Have no resourceBundle");
//}
long s = System.currentTimeMillis(); long s = System.currentTimeMillis();
// get local jvm plugging controller // get local jvm plugging controller
if (vascController==null) { if (vascController==null) {
vascController = DefaultVascFactory.getDefaultVascController(); vascController = DefaultVascFactory.getDefaultVascController();
} }
for (String key:keys.keySet()) {
for (String key:keys.keySet()) { String value = keys.get(key);
String value = keys.get(key); if (key.startsWith("load")) {
if (key.startsWith("load")) { // TODO made reuse working.
// TODO made reuse working. VascParser vp = new VascParser(vascController);
VascParser vp = new VascParser(vascController); if (xpqlController!=null) {
if (xpqlController!=null) { vp.addELBean("xpqlController", new XpqlController());
vp.addELBean("xpqlController", new XpqlController()); }
} if (entityManager!=null) {
if (entityManager!=null) { vp.addELBean("entityManagerProvider", new LocalEntityManagerProvider());
vp.addELBean("entityManagerProvider", new LocalEntityManagerProvider()); }
} vp.parseResource(value);
vp.parseResource(value); }
} }
} DefaultVascFactory.fillVascControllerLocalEntries((VascEntryControllerLocal) vascController.getVascEntryController(), vascController);
DefaultVascFactory.fillVascControllerLocalEntries((VascEntryControllerLocal) vascController.getVascEntryController(), vascController);
long t = System.currentTimeMillis()-s; long t = System.currentTimeMillis()-s;
logger.info("Total loaded vasc entries: "+vascController.getVascEntryController().getVascEntryIds().size()+" in "+t+" ms."); logger.info("Total loaded vasc entries: "+vascController.getVascEntryController().getVascEntryIds().size()+" in "+t+" ms.");
} catch (Exception e) { } catch (Exception e) {
@ -139,56 +127,53 @@ public class VascServiceManagerImpl implements VascServiceManagerRemote,VascServ
throw new RuntimeException("Error while init resources error: "+e.getMessage(),e); throw new RuntimeException("Error while init resources error: "+e.getMessage(),e);
} }
} }
/** /**
* Loads xtes-xpql-ejb3.xml from meta-inf and gives the keys * Loads xtes-xpql-ejb3.xml from meta-inf and gives the keys
*/ */
protected Map<String,String> loadKeys() throws IOException { protected Map<String,String> loadKeys() throws IOException {
Properties properties = new Properties();
Properties properties = new Properties(); logger.fine("Getting urls");
Enumeration<URL> e = Thread.currentThread().getContextClassLoader().getResources("META-INF/vasc-ejb3.xml");
logger.fine("Getting urls"); while(e.hasMoreElements()) {
Enumeration<URL> e = Thread.currentThread().getContextClassLoader().getResources("META-INF/vasc-ejb3.xml"); URL u = e.nextElement();
while(e.hasMoreElements()) { logger.finer("Loading reletive namespaces of: "+u+" for: META-INF/vasc-ejb3.xml");
URL u = e.nextElement(); InputStream in = u.openStream();
logger.finer("Loading reletive namespaces of: "+u+" for: META-INF/vasc-ejb3.xml"); try {
InputStream in = u.openStream(); properties.loadFromXML(in);
try { } finally {
properties.loadFromXML(in); if (in!=null) {
} finally { in.close();
if (in!=null) { }
in.close(); }
} }
}
} e = Thread.currentThread().getContextClassLoader().getResources("/META-INF/vasc-ejb3.xml");
while(e.hasMoreElements()) {
URL u = e.nextElement();
e = Thread.currentThread().getContextClassLoader().getResources("/META-INF/vasc-ejb3.xml"); logger.finer("Loading root namespaces of: "+u+" for: /META-INF/vasc-ejb3.xml");
while(e.hasMoreElements()) { InputStream in = u.openStream();
URL u = e.nextElement(); try {
logger.finer("Loading root namespaces of: "+u+" for: /META-INF/vasc-ejb3.xml"); properties.loadFromXML(in);
InputStream in = u.openStream(); } finally {
try { if (in!=null) {
properties.loadFromXML(in); in.close();
} finally { }
if (in!=null) { }
in.close(); }
} logger.fine("done loading");
}
} Map<String,String> result = new HashMap<String,String>(20);
logger.fine("done loading"); for (Object key:properties.keySet()) {
if (key instanceof String) {
Map<String,String> result = new HashMap<String,String>(20); String key2 = (String) key;
for (Object key:properties.keySet()) { String value = properties.getProperty(key2);
if (key instanceof String) { result.put(key2, value);
String key2 = (String) key; }
String value = properties.getProperty(key2); }
result.put(key2, value); return result;
} }
}
return result;
}
/* /*
public Map<String,String> getResourceBundle(String locale) { public Map<String,String> getResourceBundle(String locale) {
Map<String,String> result = new HashMap<String,String>(resourceBundle.keySet().size()); Map<String,String> result = new HashMap<String,String>(resourceBundle.keySet().size());
@ -199,7 +184,7 @@ public class VascServiceManagerImpl implements VascServiceManagerRemote,VascServ
return result; return result;
} }
*/ */
public List<String> getVascEntryIds() { public List<String> getVascEntryIds() {
VascController v = getVascController(); VascController v = getVascController();
if (v==null) { if (v==null) {
@ -291,7 +276,7 @@ public class VascServiceManagerImpl implements VascServiceManagerRemote,VascServ
return null; return null;
} }
@SuppressWarnings("unchecked") @SuppressWarnings({ "rawtypes" })
public void putAll(Map m) { public void putAll(Map m) {
} }

View file

@ -37,9 +37,11 @@ import java.util.Map;
abstract public class AbstractVascEntryControllerLocal implements VascEntryControllerLocal { abstract public class AbstractVascEntryControllerLocal implements VascEntryControllerLocal {
private Map<String,VascEntryLocal> entries = null; private Map<String,VascEntryLocal> entries = null;
private Map<String,VascEntryGroupLocal> groups = null;
public AbstractVascEntryControllerLocal() { public AbstractVascEntryControllerLocal() {
entries = new HashMap<String,VascEntryLocal>(1000); entries = Collections.synchronizedMap(new HashMap<String,VascEntryLocal>(1000));
groups = Collections.synchronizedMap(new HashMap<String,VascEntryGroupLocal>(100));
} }
/** /**
@ -93,4 +95,74 @@ abstract public class AbstractVascEntryControllerLocal implements VascEntryContr
Collections.sort(result); // lets do abc for consistance behauvior. Collections.sort(result); // lets do abc for consistance behauvior.
return result; return result;
} }
/**
* @see net.forwardfire.vasc.core.VascEntryController#getVascEntryByGroupId(java.lang.String)
*/
@Override
public List<String> getVascEntryByGroupId(String groupId) {
if (groupId==null) {
throw new NullPointerException("Can't search null groupId.");
}
List<String> result = new ArrayList<String>(40);
for (VascEntryLocal entry:entries.values()) {
if (groupId.equals(entry.getVascGroupId())) {
result.add(entry.getId());
}
}
return result;
}
/**
* @see net.forwardfire.vasc.core.VascEntryController#getVascEntryGroupById(java.lang.String)
*/
@Override
public VascEntryGroup getVascEntryGroupById(String id) {
VascEntryGroupLocal result = groups.get(id);
if (result==null) {
return null;
}
try {
return result.clone();
} catch (CloneNotSupportedException e) {
throw new NullPointerException("Could not clone entry: "+e.getMessage());
}
}
/**
* @see net.forwardfire.vasc.core.VascEntryController#getVascEntryGroupIds()
*/
@Override
public List<String> getVascEntryGroupIds() {
List<String> result = new ArrayList<String>(groups.keySet());
Collections.sort(result); // lets do abc for consistance behauvior.
return result;
}
/**
* @see net.forwardfire.vasc.core.VascEntryControllerLocal#addVascEntryGroup(net.forwardfire.vasc.core.VascEntryGroupLocal)
*/
@Override
public void addVascEntryGroup(VascEntryGroupLocal group) {
if (group==null) {
throw new NullPointerException("Can't add null VascEntryGroup.");
}
if (group.getId()==null) {
throw new NullPointerException("Can't add VascEntryGroup with null Id.");
}
// TODO: move
if (group.getName()==null) {
group.setName("vasc.entry.group."+group.getId()+".name");
}
if (group.getDescription()==null) {
group.setDescription("vasc.entry.group."+group.getId()+".description");
}
if (group.getImage()==null) {
group.setImage("vasc.entry.group."+group.getId()+".image");
}
//group.getHelpId()
groups.put(group.getId(), group);
}
} }

View file

@ -0,0 +1,50 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.core;
import net.forwardfire.vasc.core.base.AbstractVascBaseIdRoleViewOrderMetaLocal;
/**
* AbstractVascEntryGroupLocal
*
* @author Willem Cazander
* @version 1.0 Nov 23, 2012
*/
@SuppressWarnings("serial")
abstract public class AbstractVascEntryGroupLocal extends AbstractVascBaseIdRoleViewOrderMetaLocal implements VascEntryGroupLocal {
@Override
public VascEntryGroupLocal clone() throws CloneNotSupportedException {
Object clone = cloneCreate();
cloneFields(clone);
return (VascEntryGroupLocal)clone;
}
/*
@Override
public void cloneFields(Object cloneObject) throws CloneNotSupportedException {
super.cloneFields(cloneObject);
VascEntryGroupLocal clone = (VascEntryGroupLocal)cloneObject;
}
*/
}

View file

@ -41,7 +41,7 @@ abstract public class AbstractVascEntryLinkLocal extends AbstractVascBaseIdRoleV
private String vascEntryId = null; private String vascEntryId = null;
private Map<String,String> entryParameterFieldIds = new HashMap<String,String>(3); private Map<String,String> entryParameterFieldIds = new HashMap<String,String>(3);
private Map<String,String> entryCreateFieldValues = new HashMap<String,String>(3); private Map<String,String> entryCreateFieldValues = new HashMap<String,String>(3);
private VascEntryLinkType vascLinkEntryType = null; private VascEntryLinkType vascEntryLinkType = null;
private String doActionId = null; private String doActionId = null;
@ -58,7 +58,7 @@ abstract public class AbstractVascEntryLinkLocal extends AbstractVascBaseIdRoleV
VascEntryLinkLocal clone = (VascEntryLinkLocal)cloneObject; VascEntryLinkLocal clone = (VascEntryLinkLocal)cloneObject;
clone.setVascEntryId(getVascEntryId()); clone.setVascEntryId(getVascEntryId());
clone.setDoActionId(getDoActionId()); clone.setDoActionId(getDoActionId());
clone.setVascLinkEntryType(getVascLinkEntryType()); clone.setVascEntryLinkType(getVascEntryLinkType());
for (String key:getEntryParameterFieldIdKeys()) { for (String key:getEntryParameterFieldIdKeys()) {
clone.addEntryParameterFieldId(key, getEntryParameterFieldId(key)); clone.addEntryParameterFieldId(key, getEntryParameterFieldId(key));
} }
@ -104,15 +104,15 @@ abstract public class AbstractVascEntryLinkLocal extends AbstractVascBaseIdRoleV
/** /**
* @return the vascLinkEntryType * @return the vascLinkEntryType
*/ */
public VascEntryLinkType getVascLinkEntryType() { public VascEntryLinkType getVascEntryLinkType() {
return vascLinkEntryType; return vascEntryLinkType;
} }
/** /**
* @param vascLinkEntryType the vascLinkEntryType to set * @param vascLinkEntryType the vascLinkEntryType to set
*/ */
public void setVascLinkEntryType(VascEntryLinkType vascLinkEntryType) { public void setVascEntryLinkType(VascEntryLinkType vascEntryLinkType) {
this.vascLinkEntryType = vascLinkEntryType; this.vascEntryLinkType = vascEntryLinkType;
} }
/** /**

View file

@ -67,7 +67,8 @@ abstract public class AbstractVascEntryLocal extends AbstractVascBaseIdRoleCrudL
private Boolean vascDisplayOnly = null; // todo rename private Boolean vascDisplayOnly = null; // todo rename
private Boolean delete = null; private Boolean delete = null;
private String rolesDelete = null; private String rolesDelete = null;
private VascEntryAccessType accessType = null;
private List<VascEntryFieldLocal> vascFields = null; private List<VascEntryFieldLocal> vascFields = null;
private List<RowVascActionLocal> rowActions = null; private List<RowVascActionLocal> rowActions = null;
private List<ColumnVascActionLocal> columnActions = null; private List<ColumnVascActionLocal> columnActions = null;
@ -75,8 +76,8 @@ abstract public class AbstractVascEntryLocal extends AbstractVascBaseIdRoleCrudL
private List<GlobalVascActionLocal> exportActions = null; private List<GlobalVascActionLocal> exportActions = null;
private List<VascEntryFieldSetLocal> vascEntryFieldSets = null; private List<VascEntryFieldSetLocal> vascEntryFieldSets = null;
private List<VascEntryLinkLocal> vascEntryLinks = null; private List<VascEntryLinkLocal> vascEntryLinks = null;
private Map<String,Object> entryParameters = null; private Map<String,Object> entryParameters = null;
private VascEntryFieldEventChannel vascEntryFieldEventChannel = null; private VascEntryFieldEventChannel vascEntryFieldEventChannel = null;
private Map<String,List<String>> eventEntryFrontendEventListeners = null; private Map<String,List<String>> eventEntryFrontendEventListeners = null;
private List<String> eventEntryBackendEventListeners = null; private List<String> eventEntryBackendEventListeners = null;
@ -85,6 +86,7 @@ abstract public class AbstractVascEntryLocal extends AbstractVascBaseIdRoleCrudL
private Map<String,List<String>> eventEntryFrontendActions = null; private Map<String,List<String>> eventEntryFrontendActions = null;
private String backendId = null; private String backendId = null;
private String vascGroupId = null;
private VascFrontendController vascFrontendData = null; private VascFrontendController vascFrontendData = null;
public AbstractVascEntryLocal() { public AbstractVascEntryLocal() {
@ -134,6 +136,7 @@ abstract public class AbstractVascEntryLocal extends AbstractVascBaseIdRoleCrudL
clone.setDelete(getDelete()); clone.setDelete(getDelete());
clone.setRolesDelete(getRolesDelete()); clone.setRolesDelete(getRolesDelete());
clone.setAccessType(getAccessType());
for (VascEntryFieldLocal field:getVascEntryFieldsLocal()) { for (VascEntryFieldLocal field:getVascEntryFieldsLocal()) {
VascEntryFieldLocal fieldClone = field.clone(); VascEntryFieldLocal fieldClone = field.clone();
@ -185,6 +188,7 @@ abstract public class AbstractVascEntryLocal extends AbstractVascBaseIdRoleCrudL
} }
} }
clone.setBackendId(getBackendId()); clone.setBackendId(getBackendId());
clone.setVascGroupId(getVascGroupId());
} }
@ -900,4 +904,32 @@ abstract public class AbstractVascEntryLocal extends AbstractVascBaseIdRoleCrudL
public void setVascDisplayOnly(Boolean vascDisplayOnly) { public void setVascDisplayOnly(Boolean vascDisplayOnly) {
this.vascDisplayOnly = vascDisplayOnly; this.vascDisplayOnly = vascDisplayOnly;
} }
/**
* @return the vascGroupId
*/
public String getVascGroupId() {
return vascGroupId;
}
/**
* @param vascGroupId the vascGroupId to set
*/
public void setVascGroupId(String vascGroupId) {
this.vascGroupId = vascGroupId;
}
/**
* @return the accessType
*/
public VascEntryAccessType getAccessType() {
return accessType;
}
/**
* @param accessType the accessType to set
*/
public void setAccessType(VascEntryAccessType accessType) {
this.accessType = accessType;
}
} }

View file

@ -117,6 +117,11 @@ public interface VascEntry extends VascBaseIdRoleCrud {
*/ */
public String getRolesDelete(); public String getRolesDelete();
/**
* @return the accessType
*/
public VascEntryAccessType getAccessType();
/** /**
* @return the vascFields * @return the vascFields
*/ */
@ -196,6 +201,8 @@ public interface VascEntry extends VascBaseIdRoleCrud {
public String getBackendId(); public String getBackendId();
public String getVascGroupId();
/** /**
* @return the vascDisplayOnly * @return the vascDisplayOnly
*/ */

View file

@ -1,5 +1,5 @@
/* /*
* Copyright 2009-2012 forwardfire.net All rights reserved. * Copyright 2007-2012 forwardfire.net All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided * Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met: * that the following conditions are met:
@ -20,30 +20,22 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package net.forwardfire.vasc.demo.tech.ejb3.menu.model; package net.forwardfire.vasc.core;
import java.io.Serializable; import java.io.Serializable;
import java.util.Comparator;
/** /**
* VascMenuComparator orders the menu group. * The type of a VascEntryAccessType
* *
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 nov 17, 2012 * @version 1.0 Nov 25, 2012
*/ */
public class VascMenuComparator implements Serializable,Comparator<VascMenu> { public enum VascEntryAccessType implements Serializable {
private static final long serialVersionUID = 386631856823832371L; DIRECT,
DIRECT_PARAMETER,
ENTRY_LIST,
ENTRY_LINK;
public int compare(VascMenu m1, VascMenu m2) { public static VascEntryAccessType DEFAULT_TYPE = VascEntryAccessType.DIRECT;
if (m1.getMenuOrder()==null) {
return 1;
}
if (m2.getMenuOrder()==null) {
return -1;
}
return m1.getMenuOrder().compareTo(m2.getMenuOrder());
}
} }

View file

@ -35,4 +35,10 @@ public interface VascEntryController {
public VascEntry getVascEntryById(String id); public VascEntry getVascEntryById(String id);
public List<String> getVascEntryIds(); public List<String> getVascEntryIds();
public List<String> getVascEntryByGroupId(String groupId);
public VascEntryGroup getVascEntryGroupById(String id);
public List<String> getVascEntryGroupIds();
} }

View file

@ -37,4 +37,6 @@ public interface VascEntryControllerLocal extends VascEntryController {
public void removeVascEntry(String entryId); public void removeVascEntry(String entryId);
public VascEntryLocal getMasterVascEntryById(String entryId); public VascEntryLocal getMasterVascEntryById(String entryId);
public void addVascEntryGroup(VascEntryGroupLocal group);
} }

View file

@ -0,0 +1,35 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.core;
import net.forwardfire.vasc.core.base.VascBaseIdRoleViewOrderMeta;
/**
* VascLinkGroup binds multiple entries as one group.
*
* @author Willem Cazander
* @version 1.0 Nove 23, 2012
*/
public interface VascEntryGroup extends VascBaseIdRoleViewOrderMeta {
}

View file

@ -0,0 +1,41 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.core;
import net.forwardfire.vasc.core.base.VascBaseIdRoleViewOrderMetaLocal;
/**
* VascEntryGroupLocal
*
* @author Willem Cazander
* @version 1.0 Nov 23, 2012
*/
public interface VascEntryGroupLocal extends VascEntryGroup,VascBaseIdRoleViewOrderMetaLocal {
/**
* Force impl to have public clone methode
* @return
* @throws CloneNotSupportedException
*/
public VascEntryGroupLocal clone() throws CloneNotSupportedException;
}

View file

@ -51,7 +51,7 @@ public interface VascEntryLink extends VascBaseIdRoleViewOrderMeta {
/** /**
* @return the vascLinkEntryType * @return the vascLinkEntryType
*/ */
public VascEntryLinkType getVascLinkEntryType(); public VascEntryLinkType getVascEntryLinkType();
/** /**
* @return the doActionId * @return the doActionId

View file

@ -46,7 +46,7 @@ public interface VascEntryLinkLocal extends VascEntryLink,VascBaseIdRoleViewOrde
/** /**
* @param vascLinkEntryType the vascLinkEntryType to set * @param vascLinkEntryType the vascLinkEntryType to set
*/ */
public void setVascLinkEntryType(VascEntryLinkType vascLinkEntryType); public void setVascEntryLinkType(VascEntryLinkType vascLinkEntryType);
/** /**
* @param doActionId the doActionId to set * @param doActionId the doActionId to set

View file

@ -116,6 +116,11 @@ public interface VascEntryLocal extends VascEntry,VascBaseIdRoleCrudLocal {
*/ */
public void setRolesDelete(String rolesDelete); public void setRolesDelete(String rolesDelete);
/**
* @param accessType the accessType to set
*/
public void setAccessType(VascEntryAccessType accessType);
/** /**
* @param vascField the vascField to add * @param vascField the vascField to add
*/ */
@ -221,12 +226,12 @@ public interface VascEntryLocal extends VascEntry,VascBaseIdRoleCrudLocal {
*/ */
public Collection<VascEntryLinkLocal> getVascEntryLinksLocal(); public Collection<VascEntryLinkLocal> getVascEntryLinksLocal();
public void setVascFrontendController(VascFrontendController vascFrontendData);
public void setVascFrontendController(VascFrontendController vascFrontendData);
public void setBackendId(String backendId); public void setBackendId(String backendId);
public void setVascGroupId(String groupId);
/** /**
* @param vascDisplayOnly the vascDisplayOnly to set * @param vascDisplayOnly the vascDisplayOnly to set
*/ */

View file

@ -0,0 +1,36 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.impl;
import net.forwardfire.vasc.core.AbstractVascEntryGroupLocal;
/**
* DefaultVascEntryGroup
*
* @author Willem Cazander
* @version 1.0 Nov 23, 2012
*/
public class DefaultVascEntryGroup extends AbstractVascEntryGroupLocal {
private static final long serialVersionUID = 853182253019347410L;
}

View file

@ -182,8 +182,8 @@ public class VascDefaultsFinalizer implements VascEntryConfigFinalizer {
if (vle.getVascEntryId()==null) { if (vle.getVascEntryId()==null) {
throw new IllegalArgumentException("All VascLinkEntry need an vascEntryId: "+id); throw new IllegalArgumentException("All VascLinkEntry need an vascEntryId: "+id);
} }
if (vle.getVascLinkEntryType()==null) { if (vle.getVascEntryLinkType()==null) {
vle.setVascLinkEntryType(VascEntryLinkType.DEFAULT_TYPE); vle.setVascEntryLinkType(VascEntryLinkType.DEFAULT_TYPE);
} }
} }

View file

@ -68,7 +68,7 @@ public class DefaultVascFrontendHelper implements VascFrontendHelper {
result.add(link); result.add(link);
continue; continue;
} }
if (type.equals(link.getVascLinkEntryType())) { if (type.equals(link.getVascEntryLinkType())) {
result.add(link); result.add(link);
} }
} }

View file

@ -43,6 +43,7 @@ import net.forwardfire.vasc.core.VascEntryConfigController;
import net.forwardfire.vasc.core.VascEntryController; import net.forwardfire.vasc.core.VascEntryController;
import net.forwardfire.vasc.core.VascEntryControllerLocal; import net.forwardfire.vasc.core.VascEntryControllerLocal;
import net.forwardfire.vasc.core.VascEntryFieldTypeController; import net.forwardfire.vasc.core.VascEntryFieldTypeController;
import net.forwardfire.vasc.core.VascEntryGroup;
import net.forwardfire.vasc.core.VascEventChannelController; import net.forwardfire.vasc.core.VascEventChannelController;
import net.forwardfire.vasc.impl.DefaultVascFactory; import net.forwardfire.vasc.impl.DefaultVascFactory;
@ -139,6 +140,15 @@ public class JndiVascControllerFactory implements ObjectFactory {
public VascEntry getVascEntryById(String id) { public VascEntry getVascEntryById(String id) {
return entryController.getVascEntryById(id); return entryController.getVascEntryById(id);
} }
public List<String> getVascEntryByGroupId(String groupId) {
return entryController.getVascEntryByGroupId(groupId);
}
public VascEntryGroup getVascEntryGroupById(String id) {
return entryController.getVascEntryGroupById(id);
}
public List<String> getVascEntryGroupIds() {
return entryController.getVascEntryGroupIds();
}
}); });
} }

View file

@ -25,6 +25,7 @@ package net.forwardfire.vasc.impl.x4o;
import net.forwardfire.vasc.core.VascController; import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascEntryController; import net.forwardfire.vasc.core.VascEntryController;
import net.forwardfire.vasc.core.VascEntryControllerLocal; import net.forwardfire.vasc.core.VascEntryControllerLocal;
import net.forwardfire.vasc.core.VascEntryGroupLocal;
import net.forwardfire.vasc.core.VascEntryLocal; import net.forwardfire.vasc.core.VascEntryLocal;
import org.x4o.xml.element.AbstractElementConfigurator; import org.x4o.xml.element.AbstractElementConfigurator;
@ -43,14 +44,22 @@ public class VascEntryElementConfigurator extends AbstractElementConfigurator {
* @see org.x4o.xml.element.AbstractElementConfigurator#doConfigEndTag(org.x4o.xml.element.Element) * @see org.x4o.xml.element.AbstractElementConfigurator#doConfigEndTag(org.x4o.xml.element.Element)
*/ */
public void doConfigElement(Element element) throws ElementConfiguratorException { public void doConfigElement(Element element) throws ElementConfiguratorException {
VascEntryLocal entry = (VascEntryLocal)element.getElementObject(); Object elementObject = element.getElementObject();
VascController vascController = VascParser.getVascController(element.getElementLanguage()); VascController vascController = VascParser.getVascController(element.getElementLanguage());
VascEntryController entryController = vascController.getVascEntryController(); VascEntryController entryController = vascController.getVascEntryController();
if (entryController instanceof VascEntryControllerLocal) { if (entryController instanceof VascEntryControllerLocal) {
((VascEntryControllerLocal)entryController).addVascEntry(entry); if (elementObject instanceof VascEntryLocal) {
VascEntryLocal entry = (VascEntryLocal)elementObject;
((VascEntryControllerLocal)entryController).addVascEntry(entry);
} else if (elementObject instanceof VascEntryGroupLocal) {
VascEntryGroupLocal entryGroup = (VascEntryGroupLocal)elementObject;
((VascEntryControllerLocal)entryController).addVascEntryGroup(entryGroup);
} else {
throw new ElementConfiguratorException(this,"ElementObject is unknown instance: "+elementObject);
}
} else { } else {
throw new ElementConfiguratorException(this,"Can not add entry '"+entry.getId()+"' to VascEntryController because we have no access to VascEntryControllerLocal interface."); throw new ElementConfiguratorException(this,"Can not run configurator because we have no access to VascEntryControllerLocal interface.");
} }
} }
} }

View file

@ -47,8 +47,14 @@
> >
<!-- Object for building an entry --> <!-- Object for building an entry -->
<eld:element tag="entryGroup" objectClass="net.forwardfire.vasc.impl.DefaultVascEntryGroup" >
<eld:configurator id="entryGroup-VascEntryElementConfigurator" bean.class="net.forwardfire.vasc.impl.x4o.VascEntryElementConfigurator" configAction="true"/>
</eld:element>
<eld:element tag="entry" objectClass="net.forwardfire.vasc.impl.DefaultVascEntry" > <eld:element tag="entry" objectClass="net.forwardfire.vasc.impl.DefaultVascEntry" >
<eld:configurator id="entry-VascEntryElementConfigurator" bean.class="net.forwardfire.vasc.impl.x4o.VascEntryElementConfigurator" configAction="true"/> <eld:configurator id="entry-VascEntryElementConfigurator" bean.class="net.forwardfire.vasc.impl.x4o.VascEntryElementConfigurator" configAction="true"/>
<eld:attribute name="accessType">
<conv:enumConverter enumClass="net.forwardfire.vasc.core.VascEntryAccessType"/>
</eld:attribute>
</eld:element> </eld:element>
<eld:element tag="field" objectClass="net.forwardfire.vasc.impl.DefaultVascEntryField" elementClass="net.forwardfire.vasc.impl.x4o.VascEntryFieldElement"> <eld:element tag="field" objectClass="net.forwardfire.vasc.impl.DefaultVascEntryField" elementClass="net.forwardfire.vasc.impl.x4o.VascEntryFieldElement">
<eld:attribute name="vascEntryFieldType" runBeanFill="false"/> <eld:attribute name="vascEntryFieldType" runBeanFill="false"/>

View file

@ -13,5 +13,6 @@
<modules> <modules>
<module>vasc-demo-server-build</module> <module>vasc-demo-server-build</module>
<module>vasc-demo-server-core</module> <module>vasc-demo-server-core</module>
<module>vasc-demo-server-build-client-swing</module>
</modules> </modules>
</project> </project>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>vasc-demo-server-build-client-swing</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,42 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>net.forwardfire.vasc.demo</groupId>
<artifactId>vasc-demo-server</artifactId>
<version>0.4.1-SNAPSHOT</version>
</parent>
<artifactId>vasc-demo-server-build-client-swing</artifactId>
<packaging>pom</packaging>
<name>vasc-demo-server-build-client-swing</name>
<description>vasc-demo-server-build-client-swing</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven-assembly-plugin.version}</version>
<executions>
<execution>
<id>build-clients-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/bin.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>net.forwardfire.vasc.demo</groupId>
<artifactId>vasc-demo-tech-client-swing</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2011, Willem Cazander
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided
that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the
following disclaimer.
* 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 THE COPYRIGHT HOLDERS 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
THE COPYRIGHT HOLDER 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.
-->
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>bin</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<baseDirectory>vasc-demo-server-build-client-swing-${project.version}</baseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/libs</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>false</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.basedir}/src/main/scripts/</directory>
<outputDirectory>/</outputDirectory>
<fileMode>755</fileMode>
</fileSet>
</fileSets>
</assembly>

View file

@ -0,0 +1,38 @@
::
:: Copyright (c) 2011, Willem Cazander
:: All rights reserved.
::
:: Redistribution and use in source and binary forms, with or without modification, are permitted provided
:: that the following conditions are met:
::
:: * Redistributions of source code must retain the above copyright notice, this list of conditions and the
:: following disclaimer.
:: * 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 THE COPYRIGHT HOLDERS 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
:: THE COPYRIGHT HOLDER 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.
::
@echo off
setlocal enableextensions
:: Run in app dir
cd /d %~dp0
:: Config variables
set JAVA_OPTS=-Xms128m -Xmx512m -XX:MaxPermSize=128m
set MAIN_CLASS=net.forwardfire.vasc.demo.client.swing.VascDemoSwingClient
set CP=libs\*
:: Launch application
java %JAVA_OPTS% -cp "%CP%" %MAIN_CLASS%
endlocal
:: EOF

View file

@ -27,8 +27,8 @@ cd `dirname $0`;
# Config variables # Config variables
JAVA="java"; JAVA="java";
JAVA_OPTS="-Xms64m -Xmx256m"; JAVA_OPTS="-Xms128m -Xmx512m -XX:MaxPermSize=128m";
MAIN_CLASS="net.forwardfire.vasc.demo.server.core.VascTechDemoStartup"; MAIN_CLASS="net.forwardfire.vasc.demo.client.swing.VascDemoSwingClient";
CP=`echo libs/*.jar | sed 's/ /:/g'`; CP=`echo libs/*.jar | sed 's/ /:/g'`;
# Launch application # Launch application

View file

@ -91,5 +91,11 @@
<artifactId>vasc-demo-tech-web</artifactId> <artifactId>vasc-demo-tech-web</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>net.forwardfire.vasc.demo</groupId>
<artifactId>vasc-demo-server-build-client-swing</artifactId>
<version>${project.version}</version>
<type>pom</type>
</dependency>
</dependencies> </dependencies>
</project> </project>

View file

@ -50,7 +50,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</fileSet> </fileSet>
<fileSet> <fileSet>
<directory>${project.basedir}/src/main/scripts/</directory> <directory>${project.basedir}/src/main/scripts/</directory>
<outputDirectory>/</outputDirectory> <outputDirectory>/bin</outputDirectory>
<fileMode>755</fileMode> <fileMode>755</fileMode>
</fileSet> </fileSet>
<fileSet> <fileSet>
@ -71,5 +71,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<directory>${project.basedir}/target/docs/</directory> <directory>${project.basedir}/target/docs/</directory>
<outputDirectory>/docs</outputDirectory> <outputDirectory>/docs</outputDirectory>
</fileSet> </fileSet>
<fileSet>
<directory>${project.parent.basedir}/vasc-demo-server-build-client-swing/target/</directory>
<outputDirectory>/clients</outputDirectory>
<includes>
<include>vasc-demo-server-build-client-swing-${project.version}-bin.zip</include>
</includes>
</fileSet>
</fileSets> </fileSets>
</assembly> </assembly>

View file

@ -8,14 +8,9 @@
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<Listener className="net.forwardfire.vasc.demo.server.tomcat.JndiVascDeployerListener" <Listener className="net.forwardfire.vasc.demo.server.tomcat.JndiVascDeployerListener"
vascControllerName="vasc/server-tech" vascControllerName="vasc/server-tech"
scanPath="conf/server-tech" scanPath="conf/vasc.d"
scanTime="3" scanTime="3"
/> />
<Listener className="net.forwardfire.vasc.demo.server.tomcat.JndiVascDeployerListener"
vascControllerName="vasc/server-admin"
scanPath="conf/server-admin"
scanTime="9"
/>
<GlobalNamingResources> <GlobalNamingResources>
<!-- Config Vasc Tech Demo --> <!-- Config Vasc Tech Demo -->
<Environment name="config/START_GUI" value="true" type="java.lang.Boolean"/> <Environment name="config/START_GUI" value="true" type="java.lang.Boolean"/>
@ -36,11 +31,6 @@
vascControllerProvider="net.forwardfire.vasc.demo.server.core.VascTechDemoControllerConfig" vascControllerProvider="net.forwardfire.vasc.demo.server.core.VascTechDemoControllerConfig"
removeLocal="false" removeLocal="false"
/> />
<Resource name="vasc/server-admin" auth="Container" type="net.forwardfire.vasc.core.VascController" singleton="true" scope="Shareable"
factory="net.forwardfire.vasc.impl.jndi.JndiVascControllerFactory"
vascControllerProvider="net.forwardfire.vasc.demo.server.core.VascTechDemoControllerConfig"
removeLocal="false"
/>
</GlobalNamingResources> </GlobalNamingResources>
<Service name="Catalina"> <Service name="Catalina">
<Connector port="8899" protocol="HTTP/1.1" connectionTimeout="5000" redirectPort="9988" /> <Connector port="8899" protocol="HTTP/1.1" connectionTimeout="5000" redirectPort="9988" />

View file

@ -3,7 +3,12 @@
xmlns:v="http://vasc.forwardfire.net/xml/ns/vasc-lang" xmlns:v="http://vasc.forwardfire.net/xml/ns/vasc-lang"
xmlns:mm="http://vasc.forwardfire.net/xml/ns/vasc-backend-metamodel" xmlns:mm="http://vasc.forwardfire.net/xml/ns/vasc-backend-metamodel"
> >
<v:entryGroup
id="demo-csv"
rolesView="login"
/>
<mm:csvDataContext <mm:csvDataContext
el.id="metaPeopleDS" el.id="metaPeopleDS"
file="data/demo/meta-people.csv" file="data/demo/meta-people.csv"
@ -11,10 +16,10 @@
<mm:metaModelBackend <mm:metaModelBackend
id="metaPeopleBackend" id="metaPeopleBackend"
dataContextProvider="${metaPeopleDS}" dataContextProvider="${metaPeopleDS}"
table="meta_people" table="meta-people"
tableId="id" tableId="id"
/> />
<v:entry id="metaPeople" backendId="metaPeopleBackend"> <v:entry id="metaPeople" backendId="metaPeopleBackend" vascGroupId="demo-csv">
<v:field id="id" list="false"/> <v:field id="id" list="false"/>
<v:field id="name"/> <v:field id="name"/>
<v:field id="age"/> <v:field id="age"/>
@ -33,10 +38,10 @@
<mm:metaModelBackend <mm:metaModelBackend
id="metaProjectBackend" id="metaProjectBackend"
dataContextProvider="${metaProjectDS}" dataContextProvider="${metaProjectDS}"
table="meta_project" table="meta-project"
tableId="id" tableId="id"
/> />
<v:entry id="metaProject" backendId="metaProjectBackend"> <v:entry id="metaProject" backendId="metaProjectBackend" vascGroupId="demo-csv">
<v:field id="id" list="false"/> <v:field id="id" list="false"/>
<v:field id="name"/> <v:field id="name"/>
<v:field id="description" vascEntryFieldType="TextAreaField"/> <v:field id="description" vascEntryFieldType="TextAreaField"/>

View file

@ -25,12 +25,6 @@
</v:entry> </v:entry>
--> -->
<!--
<mm:schemaAutoEntry dataContextProvider="${mmdc_pf}" entryPrefix="pf" />
-->
<!-- <!--
<td:tomcatResource name="mmdc/mongo/laura" auth="Container" type="org.eobjects.metamodel.DataContext" <td:tomcatResource name="mmdc/mongo/laura" auth="Container" type="org.eobjects.metamodel.DataContext"
factory="net.forwardfire.vasc.backend.metamodel.jndi.JndiDataContextObjectFactory" factory="net.forwardfire.vasc.backend.metamodel.jndi.JndiDataContextObjectFactory"

View file

@ -4,11 +4,15 @@
xmlns:mm="http://vasc.forwardfire.net/xml/ns/vasc-backend-metamodel" xmlns:mm="http://vasc.forwardfire.net/xml/ns/vasc-backend-metamodel"
xmlns:td="http://vasc.forwardfire.net/xml/ns/vasc-tech-demo" xmlns:td="http://vasc.forwardfire.net/xml/ns/vasc-tech-demo"
> >
<v:entryGroup
id="tech-admin"
rolesView="admin"
/>
<mm:jndiDataSourceDataContext el.id="DemoManagerDataDC" jndiName="java:jdbc/DemoManagerDataDS" /> <mm:jndiDataSourceDataContext el.id="DemoManagerDataDC" jndiName="java:jdbc/DemoManagerDataDS" />
<mm:metaModelBackend id="AdminVascUserBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_USER" tableId="ID" /> <mm:metaModelBackend id="AdminVascUserBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_USER" tableId="ID" />
<v:entry id="AdminVascUser" backendId="AdminVascUserBackend" displayNameFieldId="username"> <v:entry id="AdminVascUser" backendId="AdminVascUserBackend" displayNameFieldId="username" vascGroupId="tech-admin">
<v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/> <v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/>
<v:field id="username" backendName="USERNAME"/> <v:field id="username" backendName="USERNAME"/>
<v:field id="password" backendName="PASSWORD"/> <v:field id="password" backendName="PASSWORD"/>
@ -17,7 +21,7 @@
<mm:metaModelBackend id="AdminVascUserRoleBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_USER_ROLE" tableId="ID" /> <mm:metaModelBackend id="AdminVascUserRoleBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_USER_ROLE" tableId="ID" />
<v:entry id="AdminVascUserRole" backendId="AdminVascUserRoleBackend" > <v:entry id="AdminVascUserRole" backendId="AdminVascUserRoleBackend" vascGroupId="tech-admin">
<v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/> <v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/>
<v:field id="username" backendName="USERNAME" vascEntryFieldType="ListField"> <v:field id="username" backendName="USERNAME" vascEntryFieldType="ListField">
<v:vascSelectItemModel entryId="AdminVascUser" keyFieldId="username"/> <v:vascSelectItemModel entryId="AdminVascUser" keyFieldId="username"/>
@ -27,7 +31,7 @@
<mm:metaModelBackend id="AdminVascUserChangeFieldBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_USER_CHANGE_FIELD" tableId="ID" /> <mm:metaModelBackend id="AdminVascUserChangeFieldBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_USER_CHANGE_FIELD" tableId="ID" />
<v:entry id="AdminVascUserChangeField" backendId="AdminVascUserChangeFieldBackend" adminEditReadOnly="true"> <v:entry id="AdminVascUserChangeField" backendId="AdminVascUserChangeFieldBackend" adminEditReadOnly="true" vascGroupId="tech-admin">
<v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/> <v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/>
<v:field id="field" backendName="FIELD"/> <v:field id="field" backendName="FIELD"/>
<v:field id="name" backendName="NAME"/> <v:field id="name" backendName="NAME"/>
@ -36,7 +40,7 @@
<mm:metaModelBackend id="AdminVascUserChangeLogBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_USER_CHANGE_LOG" tableId="ID" /> <mm:metaModelBackend id="AdminVascUserChangeLogBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_USER_CHANGE_LOG" tableId="ID" />
<v:entry id="AdminVascUserChangeLog" backendId="AdminVascUserChangeLogBackend" adminEditReadOnly="true"> <v:entry id="AdminVascUserChangeLog" backendId="AdminVascUserChangeLogBackend" adminEditReadOnly="true" vascGroupId="tech-admin">
<v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/> <v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/>
<v:field id="user_id" backendName="USER_ID" vascEntryFieldType="ListField"> <v:field id="user_id" backendName="USER_ID" vascEntryFieldType="ListField">
<v:vascSelectItemModel entryId="AdminVascUser" keyFieldId="id"/> <v:vascSelectItemModel entryId="AdminVascUser" keyFieldId="id"/>
@ -49,7 +53,7 @@
</v:entry> </v:entry>
<mm:metaModelBackend id="AdminVascPageBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_PAGE" tableId="ID" /> <mm:metaModelBackend id="AdminVascPageBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_PAGE" tableId="ID" />
<v:entry id="AdminVascPage" backendId="AdminVascPageBackend"> <v:entry id="AdminVascPage" backendId="AdminVascPageBackend" vascGroupId="tech-admin">
<v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/> <v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/>
<v:field id="slug" backendName="SLUG"/> <v:field id="slug" backendName="SLUG"/>
<v:field id="title" backendName="TITLE"/> <v:field id="title" backendName="TITLE"/>
@ -60,7 +64,7 @@
<mm:metaModelBackend id="AdminVascPagePartBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_PAGE_PART" tableId="ID" /> <mm:metaModelBackend id="AdminVascPagePartBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_PAGE_PART" tableId="ID" />
<v:entry id="AdminVascPagePart" backendId="AdminVascPagePartBackend"> <v:entry id="AdminVascPagePart" backendId="AdminVascPagePartBackend" vascGroupId="tech-admin">
<v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/> <v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/>
<v:field id="page_id" backendName="PAGE_ID" vascEntryFieldType="ListField"> <v:field id="page_id" backendName="PAGE_ID" vascEntryFieldType="ListField">
<v:vascSelectItemModel entryId="AdminVascPage" keyFieldId="id" displayFieldId="slug"/> <v:vascSelectItemModel entryId="AdminVascPage" keyFieldId="id" displayFieldId="slug"/>
@ -78,7 +82,7 @@
<mm:metaModelBackend id="AdminVascMenuWebBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_MENU_WEB" tableId="ID" /> <mm:metaModelBackend id="AdminVascMenuWebBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_MENU_WEB" tableId="ID" />
<v:entry id="AdminVascMenuWeb" backendId="AdminVascMenuWebBackend"> <v:entry id="AdminVascMenuWeb" backendId="AdminVascMenuWebBackend" vascGroupId="tech-admin">
<v:listOption id="menu_type" backendName="MENU_TYPE" vascEntryFieldType="ListField" optional="true"> <v:listOption id="menu_type" backendName="MENU_TYPE" vascEntryFieldType="ListField" optional="true">
<v:vascSelectItemModelEnum enumClass="net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuWebType"/> <v:vascSelectItemModelEnum enumClass="net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuWebType"/>
</v:listOption> </v:listOption>
@ -97,31 +101,4 @@
</v:field> </v:field>
</v:entry> </v:entry>
<mm:metaModelBackend id="AdminVascMenuGroupBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_MENU_GROUP" tableId="ID" />
<v:entry id="AdminVascMenuGroup" backendId="AdminVascMenuGroupBackend">
<v:listOption id="active" backendName="ACTIVE" vascEntryFieldType="ListField" optional="true" defaultValue="FALSE">
<v:vascSelectItemModelString nullLabel="All" data="TRUE,FALSE"/>
</v:listOption>
<v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/>
<v:field id="title" backendName="TITLE"/>
<v:field id="active" backendName="ACTIVE" vascEntryFieldType="BooleanField"/>
<v:field id="roles" backendName="ROLES"/>
<v:field id="menu_order" backendName="MENU_ORDER" vascEntryFieldType="IntegerField"/>
</v:entry>
<mm:metaModelBackend id="AdminVascMenuBackend" dataContextProvider="${DemoManagerDataDC}" table="VASC_MENU" tableId="ID" />
<v:entry id="AdminVascMenu" backendId="AdminVascMenuBackend">
<v:listOption id="active" backendName="ACTIVE" vascEntryFieldType="ListField" optional="true" defaultValue="FALSE">
<v:vascSelectItemModelString nullLabel="All" data="TRUE,FALSE"/>
</v:listOption>
<v:field id="id" backendName="ID" list="false" editReadOnly="true" create="false"/>
<v:field id="vascEntryId" backendName="VASC_ENTRY_ID"/>
<v:field id="title" backendName="TITLE"/>
<v:field id="active" backendName="ACTIVE" vascEntryFieldType="BooleanField"/>
<v:field id="roles" backendName="ROLES"/>
<v:field id="menu_order" backendName="MENU_ORDER" vascEntryFieldType="IntegerField"/>
<v:field id="menu_group" backendName="MENU_GROUP">
</v:field>
</v:entry>
</vasc:root> </vasc:root>

View file

@ -5,6 +5,11 @@
xmlns:td="http://vasc.forwardfire.net/xml/ns/vasc-tech-demo" xmlns:td="http://vasc.forwardfire.net/xml/ns/vasc-tech-demo"
> >
<v:entryGroup
id="tech-server"
rolesView="admin"
/>
<!-- Load jndi factories into tomcat. --> <!-- Load jndi factories into tomcat. -->
<td:tomcatResource name="mmdc/server/conf/server.xml" auth="Container" type="org.eobjects.metamodel.DataContext" <td:tomcatResource name="mmdc/server/conf/server.xml" auth="Container" type="org.eobjects.metamodel.DataContext"
factory="net.forwardfire.vasc.backend.metamodel.jndi.JndiDataContextObjectFactory" factory="net.forwardfire.vasc.backend.metamodel.jndi.JndiDataContextObjectFactory"
@ -35,10 +40,10 @@
<mm:jndiDataContext el.id="mmdc5" jndiName="java:mmdc/server/conf/web.xml"/> <mm:jndiDataContext el.id="mmdc5" jndiName="java:mmdc/server/conf/web.xml"/>
<!-- Auto config schema from MetaModel backends. --> <!-- Auto config schema from MetaModel backends. -->
<mm:schemaAutoEntry dataContextProvider="${mmdc1}" entryPrefix="AdminConfServer" /> <mm:schemaAutoEntry vascGroupId="tech-server" dataContextProvider="${mmdc1}" entryPrefix="AdminConfServer" />
<mm:schemaAutoEntry dataContextProvider="${mmdc2}" entryPrefix="AdminConfLogServer" /> <mm:schemaAutoEntry vascGroupId="tech-server" dataContextProvider="${mmdc2}" entryPrefix="AdminConfLogServer" />
<mm:schemaAutoEntry dataContextProvider="${mmdc3}" entryPrefix="AdminConfLogAccess" /> <mm:schemaAutoEntry vascGroupId="tech-server" dataContextProvider="${mmdc3}" entryPrefix="AdminConfLogAccess" />
<mm:schemaAutoEntry dataContextProvider="${mmdc4}" entryPrefix="AdminConfConfig" /> <mm:schemaAutoEntry vascGroupId="tech-server" dataContextProvider="${mmdc4}" entryPrefix="AdminConfConfig" />
<mm:schemaAutoEntry dataContextProvider="${mmdc5}" entryPrefix="AdminConfWeb" /> <mm:schemaAutoEntry vascGroupId="tech-server" dataContextProvider="${mmdc5}" entryPrefix="AdminConfWeb" />
</vasc:root> </vasc:root>

View file

@ -25,11 +25,12 @@ setlocal enableextensions
:: Run in app dir :: Run in app dir
cd /d %~dp0 cd /d %~dp0
cd ..
:: Config variables :: Config variables
set JAVA_OPTS=-Xms64m -Xmx256m set JAVA_OPTS=-Xms128m -Xmx768m -XX:MaxPermSize=256m
set MAIN_CLASS=net.forwardfire.vasc.demo.server.core.VascTechDemoStartup set MAIN_CLASS=net.forwardfire.vasc.demo.server.core.VascTechDemoStartup
set CP=libs\* set CP=libs\tomcat-el-api-* libs\*
:: Launch application :: Launch application
java %JAVA_OPTS% -cp "%CP%" %MAIN_CLASS% java %JAVA_OPTS% -cp "%CP%" %MAIN_CLASS%

View file

@ -0,0 +1,38 @@
#!/bin/sh
#
# Copyright (c) 2011, Willem Cazander
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are permitted provided
# that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this list of conditions and the
# following disclaimer.
# * 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 THE COPYRIGHT HOLDERS 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
# THE COPYRIGHT HOLDER 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.
#
# Run in app dir
cd `dirname $0`/..;
# Config variables
JAVA="java";
JAVA_OPTS="-Xms128m -Xmx768m -XX:MaxPermSize=256m";
MAIN_CLASS="org.apache.catalina.startup.Bootstrap";
CP=`echo libs/tomcat-* | sed 's/ /:/g'`;
# Launch application
$JAVA $JAVA_OPTS -cp $CP $MAIN_CLASS stop;
# EOF

View file

@ -0,0 +1,39 @@
::
:: Copyright (c) 2011, Willem Cazander
:: All rights reserved.
::
:: Redistribution and use in source and binary forms, with or without modification, are permitted provided
:: that the following conditions are met:
::
:: * Redistributions of source code must retain the above copyright notice, this list of conditions and the
:: following disclaimer.
:: * 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 THE COPYRIGHT HOLDERS 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
:: THE COPYRIGHT HOLDER 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.
::
@echo off
setlocal enableextensions
:: Run in app dir
cd /d %~dp0
cd ..
:: Config variables
set JAVA_OPTS=-Xms128m -Xmx768m -XX:MaxPermSize=256m
set MAIN_CLASS=net.forwardfire.vasc.demo.server.core.VascTechDemoStartup
set CP=libs\tomcat-el-api-* libs\*
:: Launch application
java %JAVA_OPTS% -cp "%CP%" %MAIN_CLASS%
endlocal
:: EOF

View file

@ -0,0 +1,39 @@
#!/bin/sh
#
# Copyright (c) 2011, Willem Cazander
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are permitted provided
# that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this list of conditions and the
# following disclaimer.
# * 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 THE COPYRIGHT HOLDERS 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
# THE COPYRIGHT HOLDER 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.
#
# Run in app dir
cd `dirname $0`/..;
# Config variables
JAVA="java";
JAVA_OPTS="-Xms128m -Xmx768m -XX:MaxPermSize=256m";
MAIN_CLASS="net.forwardfire.vasc.demo.server.core.VascTechDemoStartup";
CP=`echo libs/tomcat-el-api-* libs/*.jar | sed 's/ /:/g'`;
# todo: tomcat-el-api needs loaded before javaee-api for ELResolver config.
# Launch application
$JAVA $JAVA_OPTS -cp $CP $MAIN_CLASS;
# EOF

View file

@ -170,11 +170,7 @@
<exclusion> <exclusion>
<artifactId>myfaces-impl</artifactId> <artifactId>myfaces-impl</artifactId>
<groupId>org.apache.myfaces.core</groupId> <groupId>org.apache.myfaces.core</groupId>
</exclusion><!-- </exclusion>
<exclusion>
<artifactId>javaee-api</artifactId>
<groupId>org.apache.openejb</groupId>
</exclusion> -->
</exclusions> </exclusions>
</dependency> </dependency>

View file

@ -205,6 +205,7 @@ public class VascTechDemoStartup {
serverConfigService.stop(); serverConfigService.stop();
tomcatService.stop(); tomcatService.stop();
databaseService.stop(); databaseService.stop();
swingGuiService.stop();
long stopTime = System.currentTimeMillis(); long stopTime = System.currentTimeMillis();
logger.info("VascTechDemo shutdown in "+(stopTime-startTime)+" ms."); logger.info("VascTechDemo shutdown in "+(stopTime-startTime)+" ms.");
} catch (Exception e) { } catch (Exception e) {

View file

@ -28,22 +28,29 @@ import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.logging.Logger; import java.util.logging.Logger;
import com.sun.faces.application.ApplicationAssociate;
import com.sun.faces.application.ApplicationResourceBundle;
import net.forwardfire.vasc.backend.VascBackendControllerLocal; import net.forwardfire.vasc.backend.VascBackendControllerLocal;
import net.forwardfire.vasc.core.VascController; import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascEntry; import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryControllerLocal; import net.forwardfire.vasc.core.VascEntryControllerLocal;
import net.forwardfire.vasc.core.VascEntryGroup;
import net.forwardfire.vasc.core.VascEventChannelControllerLocal; import net.forwardfire.vasc.core.VascEventChannelControllerLocal;
import net.forwardfire.vasc.core.VascEventControllerListener; import net.forwardfire.vasc.core.VascEventControllerListener;
import net.forwardfire.vasc.core.VascEventControllerType; import net.forwardfire.vasc.core.VascEventControllerType;
import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup; import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup;
import net.forwardfire.vasc.impl.DefaultVascFactory; import net.forwardfire.vasc.impl.DefaultVascFactory;
import net.forwardfire.vasc.impl.x4o.VascParser; import net.forwardfire.vasc.impl.x4o.VascParser;
import net.forwardfire.vasc.lib.i18n.bundle.RootApplicationBundle;
import net.forwardfire.vasc.test.i18n.VascBundleCheckEntryKeys; import net.forwardfire.vasc.test.i18n.VascBundleCheckEntryKeys;
/** /**
@ -127,6 +134,10 @@ public class VascControllerService {
VascEntry ve = vascController.getVascEntryController().getVascEntryById(veId); VascEntry ve = vascController.getVascEntryController().getVascEntryById(veId);
keys.putAll(checker.generateMissingKeys(ve)); keys.putAll(checker.generateMissingKeys(ve));
} }
for (String groupId:vascController.getVascEntryController().getVascEntryGroupIds()) {
VascEntryGroup veg = vascController.getVascEntryController().getVascEntryGroupById(groupId);
keys.putAll(checker.generateMissingKeys(veg));
}
if (keys.isEmpty()==false) { if (keys.isEmpty()==false) {
Properties p = new Properties(); Properties p = new Properties();
File dataDir = new File("data"); File dataDir = new File("data");
@ -150,6 +161,21 @@ public class VascControllerService {
writePropertiesFile(p,resourceFile); writePropertiesFile(p,resourceFile);
ResourceBundle.clearCache(); ResourceBundle.clearCache();
//ApplicationResourceBundle appBundle = ApplicationAssociate.getCurrentInstance().getResourceBundles().get(RootApplicationBundle.class.getName());
//Map<Locale, ResourceBundle> resources = getFieldValue(appBundle, "resources");
//resources.clear();
}
}
@SuppressWarnings("unchecked")
private <T> T getFieldValue(Object object, String fieldName) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
return (T) field.get(object);
} catch (Exception e) {
return null;
} }
} }

View file

@ -37,8 +37,6 @@ import java.util.jar.JarEntry;
import java.util.jar.JarFile; import java.util.jar.JarFile;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.ejb.embeddable.EJBContainer;
import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup; import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup;
import org.apache.catalina.Container; import org.apache.catalina.Container;

View file

@ -22,23 +22,12 @@
package net.forwardfire.vasc.demo.server.ui; package net.forwardfire.vasc.demo.server.ui;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.logging.Handler; import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.LogRecord; import java.util.logging.LogRecord;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.logging.SimpleFormatter; import java.util.logging.SimpleFormatter;
import javax.swing.BorderFactory; import javax.swing.JComponent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.JTextArea; import javax.swing.JTextArea;
@ -52,25 +41,19 @@ import javax.swing.SwingUtilities;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 May 12, 2012 * @version 1.0 May 12, 2012
*/ */
public class JConsolePanel extends JPanel implements ActionListener { public class JConsolePanel extends JPanel {
private static final long serialVersionUID = 485766723433479054L; private static final long serialVersionUID = 485766723433479054L;
private UILogHandler logHandler = null; private UILogHandler logHandler = null;
private JButton clearButton = null;
private JComboBox levelBox = null;
private JTextArea logTextArea = null; private JTextArea logTextArea = null;
private JCheckBox autoScrollBox = null;
private int logLinesMax = 255; private int logLinesMax = 255;
public JConsolePanel() { public JConsolePanel() {
setLayout(new FlowLayout(FlowLayout.LEFT)); setLayout(new SpringLayout());
JPanel wrap = new JPanel(); setBorder(new JFireBorder("Console Log",this));
wrap.setLayout(new SpringLayout()); add(createEditor());
wrap.add(createHeader()); SpringLayoutGrid.makeCompactGrid(this, 1, 1, 6, 6, 6, 6);
wrap.add(createEditor());
SpringLayoutGrid.makeCompactGrid(wrap,2,1);
add(wrap);
Logger rootLogger = Logger.getAnonymousLogger(); Logger rootLogger = Logger.getAnonymousLogger();
while (rootLogger.getParent()!=null) { while (rootLogger.getParent()!=null) {
rootLogger = rootLogger.getParent(); rootLogger = rootLogger.getParent();
@ -93,53 +76,14 @@ public class JConsolePanel extends JPanel implements ActionListener {
rootLogger.removeHandler(logHandler); rootLogger.removeHandler(logHandler);
} }
private JPanel createHeader() { private JComponent createEditor() {
JPanel result = new JPanel(); logTextArea = new JTextArea(6, 80);
result.setBorder(BorderFactory.createLineBorder(Color.BLUE));
result.setLayout(new FlowLayout(FlowLayout.LEFT));
result.add(new JLabel("Log Level"));
levelBox = new JComboBox(new Level[] {Level.OFF,Level.SEVERE,Level.WARNING,Level.INFO,Level.FINE,Level.FINER,Level.FINEST,Level.ALL});
levelBox.setSelectedItem(Level.INFO);
levelBox.addActionListener(this);
result.add(levelBox);
clearButton = new JButton("Clear");
clearButton.addActionListener(this);
result.add(clearButton);
autoScrollBox = new JCheckBox("Autoscroll");
autoScrollBox.setSelected(true);
result.add(autoScrollBox);
return result;
}
private JPanel createEditor() {
JPanel result = new JPanel();
result.setBorder(BorderFactory.createLineBorder(Color.BLUE));
logTextArea = new JTextArea(5, 80);
logTextArea.setAutoscrolls(true); logTextArea.setAutoscrolls(true);
logTextArea.setEditable(false); logTextArea.setEditable(false);
JScrollPane logScrollPane = new JScrollPane(logTextArea); JScrollPane scrollPane = new JScrollPane(logTextArea);
logScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
logScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
logScrollPane.getViewport().setOpaque(false); return scrollPane;
result.add(logScrollPane);
return result;
}
public void actionPerformed(ActionEvent e) {
if (clearButton.equals(e.getSource())) {
logTextArea.setText("");
} else if (levelBox.equals(e.getSource()) && levelBox.getSelectedIndex()!=-1) {
Level level = (Level)levelBox.getSelectedItem();
logHandler.setLevel(level);
Enumeration<String> loggers = LogManager.getLogManager().getLoggerNames();
while (loggers.hasMoreElements()) {
String name = loggers.nextElement();
Logger logger = LogManager.getLogManager().getLogger(name);
if (logger!=null && name.contains("pulsefire")) {
logger.setLevel(level); // only set pulsefire code loggers
}
}
}
} }
class UILogHandler extends Handler { class UILogHandler extends Handler {
@ -169,9 +113,7 @@ public class JConsolePanel extends JPanel implements ActionListener {
String tt = t.substring(l,t.length()); String tt = t.substring(l,t.length());
logTextArea.setText(tt); logTextArea.setText(tt);
} }
if (autoScrollBox.isSelected()) { logTextArea.setCaretPosition(logTextArea.getText().length());
logTextArea.setCaretPosition(logTextArea.getText().length());
}
} }
}); });
} }

View file

@ -0,0 +1,148 @@
package net.forwardfire.vasc.demo.server.ui;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.UIManager;
import javax.swing.border.Border;
/**
* JFireBorder
*
* @author Willem Cazander
*/
public class JFireBorder implements Border,MouseListener {
private int radius;
boolean entered = false;
private JComponent comp = null;
private String title;
static private JFireBorder lastFireBorder = null;
private GradientPaint gradientNormal = null;
private GradientPaint gradientEntered = null;
private int gradientWidth = 0;
public JFireBorder(String title,JComponent comp) {
this.radius = 10;
this.comp=comp;
this.title = title;
comp.addMouseListener(this);
}
public Insets getBorderInsets(Component c) {
return new Insets(getTitleHeight(c)+1, 1, radius-2, 1);
}
public boolean isBorderOpaque() {
return true;
}
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
int titleHeight = getTitleHeight(c);
if (gradientWidth!=width) {
gradientNormal = null;
gradientEntered = null;
}
gradientWidth = width;
Color endColor = UIManager.getColor("control");
if (endColor==null) {
endColor = c.getBackground();
}
Color startColor = UIManager.getColor("nimbusBorder");
if (startColor==null) {
startColor = c.getForeground();
}
//BufferedImage titleImage = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
if (gradientNormal==null) {
gradientNormal = new GradientPaint(
0, 0, startColor,
titleHeight*5, width/3,endColor,
false);
}
if (gradientEntered==null) {
startColor = UIManager.getColor("nimbusFocus");
if (startColor==null) {
startColor = c.getForeground();
}
gradientEntered = new GradientPaint(
0, 0, startColor,
titleHeight*5, width/3,endColor,
false);
}
if (entered) {
g2.setPaint(gradientEntered);
} else {
g2.setPaint(gradientNormal);
}
g2.fillRoundRect(x, y, width, titleHeight, radius, radius);
g2.fillRect(x,titleHeight/2,radius+1, titleHeight/2);
g2.drawRoundRect(x,y,width-1,height-1,radius,radius);
if (title==null) {
return;
}
Font font = UIManager.getFont("TitledBorder.font");
g2.setColor(c.getForeground());
FontMetrics metrics = c.getFontMetrics(font);
g2.setFont(font);
g2.drawString(title,x+8,y+(titleHeight-metrics.getHeight())/2 +metrics.getAscent());
}
protected int getTitleHeight(Component c) {
Font font = UIManager.getFont("TitledBorder.font");
FontMetrics metrics = c.getFontMetrics(font);
return (int)(metrics.getHeight() * 1.40);
}
public GradientPaint getGradient() {
if (entered) {
return gradientEntered;
} else {
return gradientNormal;
}
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
if (entered==true && lastFireBorder==this) {
return;
}
entered = true;
if (comp!=null) {
comp.repaint();
if (lastFireBorder!=null) {
lastFireBorder.entered = false;
lastFireBorder.comp.repaint();
}
lastFireBorder = this;
}
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}

View file

@ -1,20 +0,0 @@
package net.forwardfire.vasc.demo.server.ui;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
public class JStartupPanel extends JPanel {
private static final long serialVersionUID = -2880272130103870144L;
private JProgressBar bar = null;
public JStartupPanel() {
JLabel label = new JLabel("Starting up....");
add(label);
bar = new JProgressBar();
add(bar);
}
}

View file

@ -22,262 +22,295 @@
package net.forwardfire.vasc.demo.server.ui; package net.forwardfire.vasc.demo.server.ui;
import java.awt.BorderLayout; import java.awt.event.ActionEvent;
import java.awt.Dimension; import java.awt.event.ActionListener;
import java.awt.GridLayout; import java.lang.management.ManagementFactory;
import java.awt.event.MouseAdapter; import java.lang.management.ThreadInfo;
import java.awt.event.MouseEvent; import java.lang.management.ThreadMXBean;
import java.io.Serializable;
import javax.swing.BorderFactory; import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.SpringLayout;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTree;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import net.forwardfire.vasc.core.VascEntryLocal; import org.apache.catalina.Context;
import org.apache.catalina.Server;
import org.apache.catalina.Service;
import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup; import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup;
import net.forwardfire.vasc.demo.server.core.service.VascControllerService; import net.forwardfire.vasc.demo.server.ui.load.JLoadDialog;
import net.forwardfire.vasc.frontend.swing.SwingPanelIntegration; import net.forwardfire.vasc.demo.server.ui.load.JLoadDialog.LoadType;
import net.forwardfire.vasc.frontend.swing.SwingPanelTabbed;
/** /**
* JMainPanel is the main panel/window of this demo. * JStatusPanel is the main panel/window of this demo.
* *
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 May 12, 2012 * @version 1.0 May 12, 2012
*/ */
public class JStatusPanel extends JPanel { public class JStatusPanel extends JPanel implements ActionListener {
private static final long serialVersionUID = 5834715323973411147L; private static final long serialVersionUID = 5834715323973411147L;
private VascControllerService vascManager = null; private JButton stopButton = null;
private SwingPanelIntegration spi = null; private JButton playButton = null;
private JTabbedPane tabPane = null; private JButton shutdownButton = null;
private JTree vascTree = null; private JButton restartButton = null;
private JSplitPane bottomSplitPane = null; private JButton importJdbcButton = null;
private JSplitPane treeSplitPane = null; private JButton importMongoButton = null;
private JButton importDataFileButton = null;
private JButton importDataPathButton = null;
private JLabel infoStatus = null;
private JLabel infoThreads = null;
private JLabel infoWorkers = null;
private JLabel infoSessions = null;
private JLabel infoHttpPort = null;
private JLabel infoVascGroups = null;
private JLabel infoVascEntries = null;
private JLabel infoVascBackends= null;
public JStatusPanel() { public JStatusPanel() {
this.vascManager=VascTechDemoStartup.getInstance().getVascControllerService(); setLayout(new SpringLayout());
setLayout(new BorderLayout());
add(createBottomSplit(), BorderLayout.CENTER); JPanel main = new JPanel();
main.setLayout(new SpringLayout());
main.add(createPanelInfoServer());
main.add(createPanelInfoVasc());
main.add(createPanelAction());
main.add(createPanelImport());
SpringLayoutGrid.makeCompactGrid(main, 2,2,0,0,6,6);
JConsolePanel consolePanel = new JConsolePanel();
add(main);
add(consolePanel);
SpringLayoutGrid.makeCompactGrid(this, 2,1,6,6,0,0);
} }
private JSplitPane createBottomSplit() {
JSplitPane sp0 = createTreeSplit();
JPanel sp1 = new JConsolePanel();
bottomSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,sp0,sp1);
bottomSplitPane.setOneTouchExpandable(true);
bottomSplitPane.setResizeWeight(0.2);
bottomSplitPane.setDividerLocation(700);
sp0.setMinimumSize(new Dimension(400, 400));
sp1.setMinimumSize(new Dimension(400, 150));
return bottomSplitPane;
}
private JSplitPane createTreeSplit() {
JScrollPane sp0 = createTreePane();
JScrollPane sp1 = createContentPane();
treeSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,sp0,sp1);
treeSplitPane.setOneTouchExpandable(true);
treeSplitPane.setResizeWeight(0.7);
treeSplitPane.setDividerLocation(200);
sp0.setMinimumSize(new Dimension(200, 400));
sp1.setMinimumSize(new Dimension(400, 400));
return treeSplitPane;
}
class VascTreeModel extends DefaultTreeModel {
public VascTreeModel(TreeNode root) {
super(root);
}
private static final long serialVersionUID = -7436681803506994277L; private JPanel createPanelInfoVasc() {
JPanel statusPanel = new JPanel();
statusPanel.setBorder(new JFireBorder("Info Vasc",statusPanel));
statusPanel.setLayout(new SpringLayout());
infoVascGroups = new JLabel("0");
infoVascEntries = new JLabel("0");
infoVascBackends = new JLabel("0");
statusPanel.add(new JLabel("Artifact:"));
statusPanel.add(new JLabel("vasc-demo-server-core"));
statusPanel.add(new JLabel("Version:"));
statusPanel.add(new JLabel("0.X.X"));
statusPanel.add(new JLabel("Groups:"));
statusPanel.add(infoVascGroups);
statusPanel.add(new JLabel("Entries:"));
statusPanel.add(infoVascEntries);
statusPanel.add(new JLabel("Backends:"));
statusPanel.add(infoVascBackends);
SpringLayoutGrid.makeCompactGrid(statusPanel, 5, 2);
return statusPanel;
}
private JPanel createPanelInfoServer() {
JPanel statusPanel = new JPanel();
statusPanel.setBorder(new JFireBorder("Info Server",statusPanel));
statusPanel.setLayout(new SpringLayout());
infoStatus = new JLabel("booting");
infoThreads = new JLabel("0");
infoWorkers = new JLabel("0");
infoSessions = new JLabel("0");
infoHttpPort = new JLabel("0");
statusPanel.add(new JLabel("Running:"));
statusPanel.add(infoStatus);
statusPanel.add(new JLabel("HttpPort:"));
statusPanel.add(infoHttpPort);
statusPanel.add(new JLabel("Threads:"));
statusPanel.add(infoThreads);
statusPanel.add(new JLabel("Workers:"));
statusPanel.add(infoWorkers);
statusPanel.add(new JLabel("Sessions:"));
statusPanel.add(infoSessions);
SpringLayoutGrid.makeCompactGrid(statusPanel, 5, 2);
return statusPanel;
}
@Override private JPanel createPanelImport() {
public void addTreeModelListener(TreeModelListener l) { JPanel statusPanel = new JPanel();
super.addTreeModelListener(l); statusPanel.setBorder(new JFireBorder("Import",statusPanel));
statusPanel.setLayout(new SpringLayout());
importJdbcButton = new JButton("Jdbc");
importMongoButton = new JButton("Mongo");
importDataFileButton = new JButton("DataFile");
importDataPathButton = new JButton("DataPath");
importJdbcButton.addActionListener(this);
importMongoButton.addActionListener(this);
importDataFileButton.addActionListener(this);
importDataPathButton.addActionListener(this);
importJdbcButton.setEnabled(false);
importMongoButton.setEnabled(false);
importDataFileButton.setEnabled(false);
importDataPathButton.setEnabled(false);
statusPanel.add(new JLabel("Import Jdbc:"));
statusPanel.add(importJdbcButton);
statusPanel.add(new JLabel("Import Mongo:"));
statusPanel.add(importMongoButton);
statusPanel.add(new JLabel("Import File:"));
statusPanel.add(importDataFileButton);
statusPanel.add(new JLabel("Data Directory:"));
statusPanel.add(importDataPathButton);
SpringLayoutGrid.makeCompactGrid(statusPanel,2,4,6,6,0,0);
return statusPanel;
}
private JPanel createPanelAction() {
JPanel actionPanel = new JPanel();
actionPanel.setBorder(new JFireBorder("Actions",actionPanel));
actionPanel.setLayout(new SpringLayout());
actionPanel.add(new JLabel("Catalina:"));
playButton = new JButton("Play");
playButton.setEnabled(false);
playButton.addActionListener(this);
actionPanel.add(playButton);
stopButton = new JButton("Stop");
stopButton.setEnabled(false);
stopButton.addActionListener(this);
actionPanel.add(stopButton);
actionPanel.add(new JLabel("Application:"));
restartButton = new JButton("Restart");
restartButton.setEnabled(false);
restartButton.addActionListener(this);
actionPanel.add(restartButton);
shutdownButton = new JButton("Shutdown");
shutdownButton.setEnabled(false);
shutdownButton.addActionListener(this);
actionPanel.add(shutdownButton);
SpringLayoutGrid.makeCompactGrid(actionPanel,2,3,6,6,0,0);
return actionPanel;
}
public void startupDone() {
infoStatus.setText("running");
//restartButton.setEnabled(true);
shutdownButton.setEnabled(true);
importJdbcButton.setEnabled(true);
importMongoButton.setEnabled(true);
//importDataFileButton.setEnabled(true);
//importDataPathButton.setEnabled(true);
updateInfo();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(shutdownButton)) {
VascTechDemoStartup.getInstance().shutdown();
} else if (e.getSource().equals(importJdbcButton)) {
JLoadDialog dialog = new JLoadDialog(ServerGuiApplication.getInstance().getMainFrame(),LoadType.JDBC);
dialog.setVisible(true);
} else if (e.getSource().equals(importMongoButton)) {
JLoadDialog dialog = new JLoadDialog(ServerGuiApplication.getInstance().getMainFrame(),LoadType.MONGODB);
dialog.setVisible(true);
} else if (e.getSource().equals(importDataFileButton)) {
JLoadDialog dialog = new JLoadDialog(ServerGuiApplication.getInstance().getMainFrame(),LoadType.JDBC);
dialog.setVisible(true);
} else if (e.getSource().equals(importDataPathButton)) {
JLoadDialog dialog = new JLoadDialog(ServerGuiApplication.getInstance().getMainFrame(),LoadType.JDBC);
dialog.setVisible(true);
} }
} }
private JScrollPane createTreePane() { public void updateInfo() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.NONE,null)); VascController vc = VascTechDemoStartup.getInstance().getVascControllerService().getVascController();
if (vc==null) {
return;
}
Server server = VascTechDemoStartup.getInstance().getTomcatService().getServer();
if (server==null) {
return; // still booting
}
Service service = server.findService("Catalina");
if (service==null) {
return;
}
Context demoContext = VascTechDemoStartup.getInstance().getTomcatService().getApplicationContext();
vascTree = new JTree(new VascTreeModel(root)); infoVascGroups.setText(""+vc.getVascEntryController().getVascEntryGroupIds().size());
vascTree.addMouseListener(new MouseAdapter() { infoVascEntries.setText(""+vc.getVascEntryController().getVascEntryIds().size());
@Override infoVascBackends.setText(""+vc.getVascBackendController().getVascBackendIds().size());
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e); int httpPort = service.findConnectors()[0].getPort();
if (e.getClickCount() == 2 && vascTree.getSelectionModel().isSelectionEmpty()==false) { infoHttpPort.setText(""+httpPort);
try { infoThreads.setText(""+Thread.activeCount());
DefaultMutableTreeNode node = (DefaultMutableTreeNode)vascTree.getSelectionModel().getSelectionPath().getLastPathComponent();
if (node.getUserObject() instanceof String) { int sessions = 0;
return; int workers = 0;
}
VascTreeNode vascNode = (VascTreeNode)node.getUserObject(); if (demoContext!=null) {
if (vascNode != null) { sessions = demoContext.getManager().getActiveSessions();
if (vascNode.type == VascTreeNodeType.ENTRY) { }
VascEntryLocal ee = (VascEntryLocal)vascManager.getVascController().getVascEntryController().getVascEntryById(vascNode.id);
vascManager.getVascController().getVascEntryConfigController().configVascFrontendController(vascManager.getVascController(), ee); ThreadMXBean man = ManagementFactory.getThreadMXBean();
spi.createNewVascView(ee); ThreadInfo[] infos = man.getThreadInfo(man.getAllThreadIds());
} for (ThreadInfo info:infos) {
} if (info.getThreadName()!=null && info.getThreadName().startsWith("http")) {
} catch (Exception ee) { workers++;
ee.printStackTrace(); }
}
infoWorkers.setText(""+workers);
infoSessions.setText(""+sessions);
}
/*
*
*
JMenuItem openXmlItem = new JMenuItem("Import Xml");
openXmlItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
final JFileChooser fc = new JFileChooser();
//fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = fc.showOpenDialog((JMenuItem)e.getSource());
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//VascTechDemoStartup.getInstance().getVascControllerService().openFile(file);
} }
} catch (Exception e1) {
e1.printStackTrace();
} }
} }
});
});
JPanel treePanel = new JPanel();
treePanel.setLayout(new GridLayout(1,0));
JScrollPane p = createJScrollPane(treePanel);
p.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
p.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
treePanel.add(vascTree);
rebuildTree();
return p;
}
private JScrollPane createContentPane() {
JPanel contentPane = new JPanel();
contentPane.setLayout(new GridLayout(1,0));
JScrollPane p = createJScrollPane(contentPane);
tabPane = new JTabbedPane();
spi = new SwingPanelTabbed(tabPane);
contentPane.add(tabPane);
return p;
}
private JScrollPane createJScrollPane(JPanel innerPanel) {
JScrollPane scrollPane = new JScrollPane(innerPanel);
scrollPane.setBorder(BorderFactory.createEmptyBorder());
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.getVerticalScrollBar().setUnitIncrement(10);
scrollPane.getHorizontalScrollBar().setUnitIncrement(10);
//innerPanel.setParentScrollPane(scrollPane);
return scrollPane;
}
class VascTreeNode implements Serializable {
private static final long serialVersionUID = -1177727401194030822L;
public VascTreeNode() {}
public VascTreeNode(VascTreeNodeType type,String id) { this.type=type;this.id=id; }
public VascTreeNode(VascTreeNodeType type,String id,String entryId) { this.type=type;this.id=id;this.entryId=entryId; }
VascTreeNodeType type;
String id;
String entryId;
@Override
public String toString() {
return id;
}
}
enum VascTreeNodeType {
NONE,
FIELD_TYPE,
BACKEND,
ENTRY
}
public void rebuildTree() {
DefaultMutableTreeNode root = (DefaultMutableTreeNode)vascTree.getModel().getRoot();
root.removeAllChildren();
DefaultMutableTreeNode fieldTypes = new DefaultMutableTreeNode("VascFieldTypes");
for (String id:vascManager.getVascController().getVascEntryFieldTypeController().getVascEntryFieldTypeIds()) {
DefaultMutableTreeNode typeNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.FIELD_TYPE,id));
fieldTypes.add(typeNode);
}
root.add(fieldTypes);
DefaultMutableTreeNode backends = new DefaultMutableTreeNode("VascBackends");
for (String id:vascManager.getVascController().getVascBackendController().getVascBackendIds()) {
DefaultMutableTreeNode backendNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.BACKEND,id));
backends.add(backendNode);
}
root.add(backends);
DefaultMutableTreeNode entries = new DefaultMutableTreeNode("VascEntries");
for (String id:vascManager.getVascController().getVascEntryController().getVascEntryIds()) {
//VascEntry ve = vascManager.getVascController().getVascEntryController().getVascEntryById(id);
DefaultMutableTreeNode entryNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.ENTRY,id));
entries.add(entryNode);
/*
DefaultMutableTreeNode fields = new DefaultMutableTreeNode("Fields");
for (VascEntryField vef:ve.getVascEntryFields()) {
DefaultMutableTreeNode vefNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.ENTRY_FIELD,vef.getId(),id));
fields.add(vefNode);
}
entryNode.add(fields);
DefaultMutableTreeNode fieldSets = new DefaultMutableTreeNode("FieldSets");
for (VascEntryFieldSet vefs:ve.getVascEntryFieldSets()) {
DefaultMutableTreeNode vefsNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.ENTRY_FIELD_SET,vefs.getId(),id));
fieldSets.add(vefsNode);
}
entryNode.add(fieldSets);
DefaultMutableTreeNode links = new DefaultMutableTreeNode("Links");
for (VascLinkEntry vle:ve.getVascLinkEntries()) {
DefaultMutableTreeNode vefsNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.ENTRY_FIELD_SET,vle.getId()));
links.add(vefsNode);
}
entryNode.add(links);
DefaultMutableTreeNode filters = new DefaultMutableTreeNode("Backend Filters");
for (VascBackendFilter vbf:ve.getVascBackendFilters()) {
DefaultMutableTreeNode vefsNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.ENTRY_FIELD_SET,vbf.getClass().getSimpleName()));
filters.add(vefsNode);
}
entryNode.add(links);
DefaultMutableTreeNode param = new DefaultMutableTreeNode("Backend Parameters");
for (String key:ve.getEntryParameterKeys()) {
DefaultMutableTreeNode vefsNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.ENTRY_FIELD_SET,key));
param.add(vefsNode);
}
entryNode.add(param);
DefaultMutableTreeNode options = new DefaultMutableTreeNode("List Options");
for (VascEntryField vef:ve.getListOptions()) {
DefaultMutableTreeNode vefsNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.ENTRY_FIELD_SET,vef.getId()));
options.add(vefsNode);
}
entryNode.add(options);
*/
}
root.add(entries);
SwingUtilities.updateComponentTreeUI(vascTree);
}
public JTabbedPane getTabPane() {
return tabPane;
}
public void changeEvent() {
rebuildTree();
}
*/
} }

View file

@ -23,28 +23,32 @@
package net.forwardfire.vasc.demo.server.ui; package net.forwardfire.vasc.demo.server.ui;
import java.awt.AWTException; import java.awt.AWTException;
import java.awt.CheckboxMenuItem; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Image; import java.awt.Font;
import java.awt.Menu;
import java.awt.MenuItem; import java.awt.MenuItem;
import java.awt.PopupMenu; import java.awt.PopupMenu;
import java.awt.SystemTray; import java.awt.SystemTray;
import java.awt.TrayIcon; import java.awt.TrayIcon;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.util.EventObject; import java.util.EventObject;
import java.util.Properties;
import java.util.logging.Logger;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JTabbedPane; import javax.swing.JOptionPane;
import javax.swing.UIManager;
import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup; import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup;
import org.jdesktop.application.Application;
import org.jdesktop.application.FrameView; import org.jdesktop.application.FrameView;
import org.jdesktop.application.SingleFrameApplication; import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.Application.ExitListener;
/** /**
* SwingGuiService Shows the demo swing gui and vasc swing frontend. * SwingGuiService Shows the demo swing gui and vasc swing frontend.
@ -54,77 +58,113 @@ import org.jdesktop.application.Application.ExitListener;
*/ */
public class ServerGuiApplication extends SingleFrameApplication { public class ServerGuiApplication extends SingleFrameApplication {
private Logger logger = null;
private JStatusPanel statusPanel = null;
private ImageIcon serverIcon = null;
public ServerGuiApplication() {
logger = Logger.getLogger(ServerGuiApplication.class.getName());
}
protected void startup() { protected void startup() {
addExitListener(new ShutdownManager()); installColorsLaF();
addExitListener(new CloseWindowExitListener());
serverIcon = createImageIcon("/net/forwardfire/vasc/demo/server/ui/resources/icon.png", "Vasc Icon");
statusPanel = new JStatusPanel();
FrameView mainView = getMainView(); FrameView mainView = getMainView();
mainView.setComponent(statusPanel);
mainView.setComponent(new JStartupPanel()); mainView.getFrame().setMinimumSize(new Dimension(640,480));
mainView.getFrame().setMinimumSize(new Dimension(600,200)); mainView.getFrame().setMaximumSize(new Dimension(800,600));
//mainView.getFrame().setResizable(false); mainView.getFrame().addWindowListener(new UpdateInfoListener());
show(mainView); show(mainView);
startSystemTray(); startSystemTray();
} }
public void startupDone() { class UpdateInfoListener extends WindowAdapter {
getMainFrame().setVisible(false); @Override
public void windowActivated(WindowEvent e) {
System.out.println("vis: opened -ac");
statusPanel.updateInfo();
}
@Override
public void windowDeactivated(WindowEvent e) {
System.out.println("vis: closed - ac");
}
} }
class CloseWindowExitListener implements ExitListener {
@Override
public boolean canExit(EventObject event) {
if (event!=null && event.getSource().equals(ServerGuiApplication.this)) {
return true;
} else {
ServerGuiApplication.getInstance().getMainFrame().setVisible(false);
return false;
}
}
@Override
public void willExit(EventObject event) {
}
}
public void startupDone() {
statusPanel.startupDone();
}
/**
* Stop if requested from service
*/
public void stop() { public void stop() {
exit(); //shutdown();
exit(new EventObject(this));
}
public ImageIcon getServerIcon() {
return serverIcon;
} }
static public ServerGuiApplication getInstance() { static public ServerGuiApplication getInstance() {
return getInstance(ServerGuiApplication.class); return getInstance(ServerGuiApplication.class);
} }
class ShutdownManager implements ExitListener {
public boolean canExit(EventObject e) {
return true;
}
public void willExit(EventObject event) {
VascTechDemoStartup.getInstance().shutdown();
}
}
private void startSystemTray() { private void startSystemTray() {
if (!SystemTray.isSupported()) { if (!SystemTray.isSupported()) {
return; return;
} }
final PopupMenu popup = new PopupMenu(); final PopupMenu popup = new PopupMenu();
final TrayIcon trayIcon = new TrayIcon(createImage("/net/forwardfire/vasc/demo/server/ui/resources/tray-icon.png", "tray icon")); final TrayIcon trayIcon = new TrayIcon(createImageIcon("/net/forwardfire/vasc/demo/server/ui/resources/tray-icon.png", "tray icon").getImage());
final SystemTray tray = SystemTray.getSystemTray(); final SystemTray tray = SystemTray.getSystemTray();
MenuItem aboutItem = new MenuItem("About"); MenuItem aboutItem = new MenuItem("About");
MenuItem statusItem = new MenuItem("View Status"); aboutItem.addActionListener(new ActionListener() {
MenuItem logItem = new MenuItem("View Log"); @Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(ServerGuiApplication.getInstance().getMainFrame(), "Vasc Demo Tech Server:\nIs build to test and demo different parts of the vasc package.", "About Vasc Demo", JOptionPane.PLAIN_MESSAGE);
Menu displayMenu = new Menu("Launch"); }
MenuItem errorItem = new MenuItem("Web client"); });
MenuItem warningItem = new MenuItem("Swing client"); MenuItem statusItem = new MenuItem("Open Status");
MenuItem infoItem = new MenuItem("Swt client"); statusItem.addActionListener(new ActionListener() {
MenuItem noneItem = new MenuItem("None"); @Override
public void actionPerformed(ActionEvent e) {
getMainFrame().setVisible(true);
}
});
MenuItem exitItem = new MenuItem("Exit"); MenuItem exitItem = new MenuItem("Exit");
exitItem.addActionListener(new ActionListener() { exitItem.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent arg0) { public void actionPerformed(ActionEvent arg0) {
exit(); VascTechDemoStartup.getInstance().shutdown();
} }
}); });
popup.add(aboutItem);
popup.addSeparator();
popup.add(statusItem);
popup.add(logItem);
popup.addSeparator();
popup.add(displayMenu);
displayMenu.add(errorItem);
displayMenu.add(warningItem);
displayMenu.add(infoItem);
displayMenu.add(noneItem);
popup.add(exitItem); popup.add(exitItem);
popup.addSeparator();
popup.add(aboutItem);
popup.add(statusItem);
trayIcon.setPopupMenu(popup); trayIcon.setPopupMenu(popup);
@ -135,11 +175,45 @@ public class ServerGuiApplication extends SingleFrameApplication {
} }
} }
protected static Image createImage(String path, String description) { protected static ImageIcon createImageIcon(String path, String description) {
URL imageURL = ServerGuiApplication.class.getResource(path); URL imageURL = ServerGuiApplication.class.getResource(path);
if (imageURL == null) { if (imageURL == null) {
throw new NullPointerException("Could not find resource: "+path); throw new NullPointerException("Could not find resource: "+path);
} }
return (new ImageIcon(imageURL, description)).getImage(); return new ImageIcon(imageURL, description);
}
private String installColorsLaF() {
UIManager.put("TabbedPane.font", Font.decode("SansSerif-BOLD-12"));
UIManager.put("TitledBorder.font", Font.decode("SansSerif-BOLD-16"));
UIManager.put("FireDial.font", Font.decode("SansSerif-9"));
String colorName = "laf-colors";
ClassLoader cl = Thread.currentThread().getContextClassLoader();
if (cl==null) {
cl = this.getClass().getClassLoader();
}
InputStream in = cl.getResourceAsStream("net/forwardfire/vasc/demo/server/ui/resources/"+colorName+".properties");
if (in==null) {
logger.warning("Color schema not found: "+colorName);
return "unknown";
}
try {
Properties p = new Properties();
p.load(in);
for (Object key:p.keySet()) {
String value = p.getProperty(key.toString());
Color colorValue = Color.decode(value);
UIManager.put(key,colorValue);
}
} catch (IOException e) {
logger.warning("Could not load color schema: "+colorName+" error: "+e.getMessage());
} finally {
try {
in.close();
} catch (IOException e) {
}
}
return colorName;
} }
} }

View file

@ -0,0 +1,241 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.demo.server.ui.load;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.eobjects.metamodel.jdbc.JdbcDataContext;
import org.eobjects.metamodel.mongodb.MongoDbDataContext;
import net.forwardfire.vasc.demo.server.ui.JFireBorder;
import net.forwardfire.vasc.demo.server.ui.ServerGuiApplication;
/**
* JLoadDialog mini wizzard for loading.
*
* @author Willem Cazander
* @version 1.0 May 9, 2012
*/
public class JLoadDialog extends JDialog implements ActionListener {
private static final long serialVersionUID = -8638394652416472734L;
private JButton prev = null;
private JButton next = null;
private JButton cancel = null;
private List<LoadStep> steps = null;
private int currentStep = 0;
private LoadStepData model = null;
private JPanel centerPanel = null;
private JLabel topLabel = null;
public enum LoadType {
CSV,
JDBC,
MONGODB
}
public JLoadDialog(Frame aFrame,LoadType type) {
setTitle("Load Edit Data");
setIconImage(ServerGuiApplication.getInstance().getServerIcon().getImage());
setMinimumSize(new Dimension(640,400));
setPreferredSize(new Dimension(640,400));
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
clearAndHide();
}
});
JPanel mainPanel = new JPanel();
// mainPanel.setBorder();
// mainPanel.setLayout(new SpringLayout());
mainPanel.setLayout(new BorderLayout());
mainPanel.add(createPanelTop(),BorderLayout.PAGE_START);
JPanel wrap = new JPanel();
wrap.setLayout(new GridLayout(1,1));
wrap.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
centerPanel = new JPanel();
//centerPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
centerPanel.setLayout(new GridLayout(1,1));
centerPanel.setBorder(new JFireBorder(null,centerPanel));
wrap.add(centerPanel);
mainPanel.add(wrap,BorderLayout.CENTER);
model = new LoadStepData();
steps = new ArrayList<LoadStep>(10);
switch(type) {
case CSV:
break;
case JDBC:
steps.add(new JLoadStepMetaJdbc());
break;
case MONGODB:
steps.add(new JLoadStepMetaMongodb());
break;
}
steps.add(new JLoadStepSelectTables());
steps.add(new JLoadStepMiscInfo());
steps.add(new JLoadStepWriteFile());
centerPanel.add(steps.get(0).getPanel());
mainPanel.add(createPanelBottom(),BorderLayout.PAGE_END);
//SpringLayoutGrid.makeCompactGrid(mainPanel, 3, 1,6,6,6,6);
getContentPane().add(mainPanel);
pack();
setLocationRelativeTo(aFrame);
}
public void clearAndHide() {
setVisible(false);
// clean up connection
if (model.dc instanceof JdbcDataContext) {
JdbcDataContext dc = (JdbcDataContext)model.dc;
try {
dc.getConnection().close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (model.dc instanceof MongoDbDataContext) {
MongoDbDataContext dc = (MongoDbDataContext)model.dc;
dc.getMongoDb().getMongo().close();
}
}
public JPanel createPanelTop() {
JPanel top = new JPanel();
top.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
top.setLayout(new GridLayout(1,1));
JPanel wrap = new JPanel();
wrap.setLayout(new FlowLayout(FlowLayout.LEFT));
wrap.setBorder(new JFireBorder("Load",top));
topLabel = new JLabel("Load data to edit...");
wrap.add(topLabel);
top.add(wrap);
return top;
}
public JPanel createPanelBottom() {
JPanel bottom = new JPanel();
bottom.setLayout(new FlowLayout(FlowLayout.RIGHT));
prev = new JButton("Prev");
next = new JButton("Next");
cancel = new JButton("Cancel");
prev.addActionListener(this);
next.addActionListener(this);
cancel.addActionListener(this);
prev.setEnabled(false);
bottom.add(prev);
bottom.add(next);
bottom.add(cancel);
return bottom;
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(prev)) {
gotoStepPrev();
} else if (e.getSource().equals(next)) {
gotoStepNext();
} if (e.getSource().equals(cancel)) {
clearAndHide();
}
}
public void gotoStepPrev() {
if (currentStep <= 0) {
return;
}
currentStep--;
centerPanel.removeAll();
LoadStep step = steps.get(currentStep);
centerPanel.add(step.getPanel());
topLabel.setText(step.getStepTitle());
step.setupStep(model);
SwingUtilities.updateComponentTreeUI(centerPanel);
if (currentStep==0) {
prev.setEnabled(false);
}
next.setText("Next");
}
public void gotoStepNext() {
if (currentStep == steps.size()-1) {
// perform last step
LoadStep step = steps.get(currentStep);
boolean result = step.performStep(model);
if (result==false) {
return;
}
clearAndHide();
return;
}
if (currentStep > steps.size()-1) {
return;
}
LoadStep step = steps.get(currentStep);
boolean result = step.performStep(model);
if (result==false) {
return;
}
currentStep++;
centerPanel.removeAll();
step = steps.get(currentStep);
centerPanel.add(step.getPanel());
topLabel.setText(step.getStepTitle());
step.setupStep(model);
SwingUtilities.updateComponentTreeUI(centerPanel);
if (currentStep==steps.size()-1) {
next.setText("Finish");
}
prev.setEnabled(true);
}
}

View file

@ -20,27 +20,23 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package net.forwardfire.vasc.demo.server.ui.actions; package net.forwardfire.vasc.demo.server.ui.load;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Frame; import java.awt.Frame;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File; import java.io.File;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser; import javax.swing.JFileChooser;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import net.forwardfire.vasc.backend.metamodel.MetaModelDataContextCsv; import net.forwardfire.vasc.backend.metamodel.MetaModelDataContextCsv;
import net.forwardfire.vasc.backend.metamodel.MetaModelSchemaAutoEntry; import net.forwardfire.vasc.backend.metamodel.MetaModelSchemaAutoEntry;
import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup;
/** /**
* JDialogMetaCsv Add and runs MetaModel Schema Auto Entry code. * JDialogMetaCsv Add and runs MetaModel Schema Auto Entry code.
@ -48,29 +44,21 @@ import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 May 9, 2012 * @version 1.0 May 9, 2012
*/ */
public class JDialogMetaCsv extends JDialog implements ActionListener { public class JLoadStepMetaCsv extends JPanel implements ActionListener {
private static final long serialVersionUID = -8638394652416472734L; private static final long serialVersionUID = -8638394652416472734L;
public JDialogMetaCsv(Frame aFrame) { public JLoadStepMetaCsv(Frame aFrame) {
setTitle("Add csv file"); //setTitle("Add csv file");
setMinimumSize(new Dimension(640,480)); setMinimumSize(new Dimension(640,480));
setPreferredSize(new Dimension(999,666)); setPreferredSize(new Dimension(999,666));
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
clearAndHide();
}
});
JPanel mainPanel = new JPanel(); JPanel mainPanel = new JPanel();
mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
mainPanel.setLayout(new BorderLayout()); mainPanel.setLayout(new BorderLayout());
//mainPanel.add(createPanelTop(),BorderLayout.NORTH); //mainPanel.add(createPanelTop(),BorderLayout.NORTH);
mainPanel.add(createPanelCenter(),BorderLayout.CENTER); mainPanel.add(createPanelCenter(),BorderLayout.CENTER);
//mainPanel.add(createPanelBottom(),BorderLayout.SOUTH); //mainPanel.add(createPanelBottom(),BorderLayout.SOUTH);
getContentPane().add(mainPanel); add(mainPanel);
pack();
setLocationRelativeTo(aFrame);
} }
public void clearAndHide() { public void clearAndHide() {
@ -95,7 +83,7 @@ public class JDialogMetaCsv extends JDialog implements ActionListener {
MetaModelSchemaAutoEntry schema = new MetaModelSchemaAutoEntry(); MetaModelSchemaAutoEntry schema = new MetaModelSchemaAutoEntry();
schema.setDataContextProvider(ds); schema.setDataContextProvider(ds);
schema.setEntryPrefix(file.getName()); schema.setEntryPrefix(file.getName());
schema.autoCreateEntries(VascTechDemoStartup.getInstance().getVascControllerService().getVascController()); //schema.autoCreateEntries(VascTechDemoStartup.getInstance().getVascControllerService().getVascController());
//VascTechDemoStartup.getInstance().getVascControllerService().fireChangeEvent(); //VascTechDemoStartup.getInstance().getVascControllerService().fireChangeEvent();
} }
} }

View file

@ -20,28 +20,21 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package net.forwardfire.vasc.demo.server.ui.actions; package net.forwardfire.vasc.demo.server.ui.load;
import java.awt.BorderLayout; import java.awt.FlowLayout;
import java.awt.Dimension; import java.sql.Connection;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox; import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JTextField; import javax.swing.JTextField;
import javax.swing.SpringLayout; import javax.swing.SpringLayout;
import org.eobjects.metamodel.jdbc.JdbcDataContext;
import net.forwardfire.vasc.backend.metamodel.MetaModelDataContextJdbc; import net.forwardfire.vasc.backend.metamodel.MetaModelDataContextJdbc;
import net.forwardfire.vasc.backend.metamodel.MetaModelSchemaAutoEntry;
import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup;
import net.forwardfire.vasc.demo.server.ui.SpringLayoutGrid; import net.forwardfire.vasc.demo.server.ui.SpringLayoutGrid;
/** /**
@ -50,7 +43,7 @@ import net.forwardfire.vasc.demo.server.ui.SpringLayoutGrid;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 May 9, 2012 * @version 1.0 May 9, 2012
*/ */
public class JDialogMetaJdbc extends JDialog implements ActionListener { public class JLoadStepMetaJdbc extends JPanel implements LoadStep {
private static final long serialVersionUID = -8638394652416472734L; private static final long serialVersionUID = -8638394652416472734L;
private JComboBox driverClassBox = null; private JComboBox driverClassBox = null;
@ -59,31 +52,19 @@ public class JDialogMetaJdbc extends JDialog implements ActionListener {
private JTextField passwordField = null; private JTextField passwordField = null;
public JDialogMetaJdbc(Frame aFrame) { public JLoadStepMetaJdbc() {
setTitle("Add jdbc"); setLayout(new FlowLayout(FlowLayout.LEFT));
setMinimumSize(new Dimension(300,200)); add(createPanelCenter());
setPreferredSize(new Dimension(500,400));
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
clearAndHide();
}
});
JPanel mainPanel = new JPanel();
mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
mainPanel.setLayout(new BorderLayout());
//mainPanel.add(createPanelTop(),BorderLayout.NORTH);
mainPanel.add(createPanelCenter(),BorderLayout.CENTER);
//mainPanel.add(createPanelBottom(),BorderLayout.SOUTH);
getContentPane().add(mainPanel);
pack();
setLocationRelativeTo(aFrame);
} }
public void clearAndHide() { public String getStepTitle() {
setVisible(false); return "Connect to database.";
} }
public JPanel getPanel() {
return this;
}
public JPanel createPanelCenter() { public JPanel createPanelCenter() {
JPanel result = new JPanel(); JPanel result = new JPanel();
result.setLayout(new SpringLayout()); result.setLayout(new SpringLayout());
@ -105,32 +86,41 @@ public class JDialogMetaJdbc extends JDialog implements ActionListener {
passwordField = new JTextField("postgresql"); passwordField = new JTextField("postgresql");
result.add(passwordField); result.add(passwordField);
JButton fileButton = new JButton("Connect"); SpringLayoutGrid.makeCompactGrid(result, 4, 2);
fileButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String url = connectUrlField.getText();
MetaModelDataContextJdbc ds = new MetaModelDataContextJdbc();
ds.setDriverClass((String)driverClassBox.getSelectedItem());
ds.setConnectUrl(url);
ds.setUsername(usernameField.getText());
ds.setPassword(passwordField.getText());
String dbName = url.substring(url.lastIndexOf('/')+1,url.length());
MetaModelSchemaAutoEntry schema = new MetaModelSchemaAutoEntry();
schema.setDataContextProvider(ds);
schema.setEntryPrefix(dbName);
schema.autoCreateEntries(VascTechDemoStartup.getInstance().getVascControllerService().getVascController());
//VascTechDemoStartup.getInstance().getVascControllerService().fireChangeEvent();
}
});
result.add(fileButton);
result.add(new JLabel(""));
SpringLayoutGrid.makeCompactGrid(result, 5, 2);
return result; return result;
} }
public void actionPerformed(ActionEvent arg0) { public void setupStep(LoadStepData model) {
// TODO Auto-generated method stub
} }
@Override
public boolean performStep(LoadStepData model) {
String url = connectUrlField.getText();
MetaModelDataContextJdbc ds = new MetaModelDataContextJdbc();
ds.setDriverClass((String)driverClassBox.getSelectedItem());
ds.setConnectUrl(url);
ds.setUsername(usernameField.getText());
ds.setPassword(passwordField.getText());
String dbName = url.substring(url.lastIndexOf('/')+1,url.length());
try {
Connection c = ds.getConnection();
c.close();
if (model.dc instanceof JdbcDataContext) {
JdbcDataContext dc = (JdbcDataContext)model.dc;
dc.getConnection().close();
}
model.dcProvider = ds;
model.dc=ds.getDataContext();
model.name=dbName;
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Fatal connect error:\n"+e.getMessage(), "Jdbc Connect Error", JOptionPane.ERROR_MESSAGE);
return false;
}
return true;
}
} }

View file

@ -20,65 +20,49 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package net.forwardfire.vasc.demo.server.ui.actions; package net.forwardfire.vasc.demo.server.ui.load;
import java.awt.BorderLayout; import java.awt.FlowLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JTextField; import javax.swing.JTextField;
import javax.swing.SpringLayout; import javax.swing.SpringLayout;
import org.eobjects.metamodel.mongodb.MongoDbDataContext;
import com.mongodb.DB;
import net.forwardfire.vasc.backend.metamodel.MetaModelDataContextMongodb; import net.forwardfire.vasc.backend.metamodel.MetaModelDataContextMongodb;
import net.forwardfire.vasc.backend.metamodel.MetaModelSchemaAutoEntry;
import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup;
import net.forwardfire.vasc.demo.server.ui.SpringLayoutGrid; import net.forwardfire.vasc.demo.server.ui.SpringLayoutGrid;
/** /**
* JDialogMetaMongodb Add and runs MetaModel Schema Auto Entry code. * JLoadStepMetaMongodb Add and runs MetaModel Schema Auto Entry code.
* *
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 May 9, 2012 * @version 1.0 May 9, 2012
*/ */
public class JDialogMetaMongodb extends JDialog implements ActionListener { public class JLoadStepMetaMongodb extends JPanel implements LoadStep,ActionListener {
private static final long serialVersionUID = -8638394652416472734L; private static final long serialVersionUID = -8638394652416472734L;
private JTextField hostNameField = null; private JTextField hostNameField = null;
private JTextField hostPortField = null; private JTextField hostPortField = null;
private JTextField databaseField = null; private JTextField databaseField = null;
public JDialogMetaMongodb(Frame aFrame) { public JLoadStepMetaMongodb() {
setTitle("Add mongodb"); setLayout(new FlowLayout(FlowLayout.LEFT));
setMinimumSize(new Dimension(300,200)); add(createPanelCenter());
setPreferredSize(new Dimension(400,300));
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
clearAndHide();
}
});
JPanel mainPanel = new JPanel();
mainPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
mainPanel.setLayout(new BorderLayout());
//mainPanel.add(createPanelTop(),BorderLayout.NORTH);
mainPanel.add(createPanelCenter(),BorderLayout.CENTER);
//mainPanel.add(createPanelBottom(),BorderLayout.SOUTH);
getContentPane().add(mainPanel);
pack();
setLocationRelativeTo(aFrame);
} }
public void clearAndHide() { public String getStepTitle() {
setVisible(false); return "Connect to mongodb.";
}
public JPanel getPanel() {
return this;
} }
public JPanel createPanelCenter() { public JPanel createPanelCenter() {
@ -86,7 +70,7 @@ public class JDialogMetaMongodb extends JDialog implements ActionListener {
result.setLayout(new SpringLayout()); result.setLayout(new SpringLayout());
result.add(new JLabel("Hostname")); result.add(new JLabel("Hostname"));
hostNameField = new JTextField("localhost"); hostNameField = new JTextField("localhost",25);
result.add(hostNameField); result.add(hostNameField);
result.add(new JLabel("Port")); result.add(new JLabel("Port"));
@ -96,31 +80,45 @@ public class JDialogMetaMongodb extends JDialog implements ActionListener {
result.add(new JLabel("Database")); result.add(new JLabel("Database"));
databaseField = new JTextField("lefiona"); databaseField = new JTextField("lefiona");
result.add(databaseField); result.add(databaseField);
JButton fileButton = new JButton("Connect"); SpringLayoutGrid.makeCompactGrid(result, 3, 2);
fileButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MetaModelDataContextMongodb ds = new MetaModelDataContextMongodb();
ds.setHostname(hostNameField.getText());
ds.setPort(new Integer(hostPortField.getText()));
ds.setDatabase(databaseField.getText());
MetaModelSchemaAutoEntry schema = new MetaModelSchemaAutoEntry();
schema.setDataContextProvider(ds);
schema.setEntryPrefix(ds.getDatabase());
schema.autoCreateEntries(VascTechDemoStartup.getInstance().getVascControllerService().getVascController());
//VascTechDemoStartup.getInstance().getVascControllerService().fireChangeEvent();
}
});
result.add(fileButton);
result.add(new JLabel(""));
SpringLayoutGrid.makeCompactGrid(result, 4, 2);
return result; return result;
} }
public void actionPerformed(ActionEvent arg0) { public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
}
public void setupStep(LoadStepData model) {
}
@Override
public boolean performStep(LoadStepData model) {
MetaModelDataContextMongodb ds = new MetaModelDataContextMongodb();
ds.setHostname(hostNameField.getText());
ds.setPort(new Integer(hostPortField.getText()));
ds.setDatabase(databaseField.getText());
try {
DB mongoDB = ds.getMongodbConnection();
mongoDB.getMongo().close();
if (model.dc instanceof MongoDbDataContext) {
MongoDbDataContext dc = (MongoDbDataContext)model.dc;
dc.getMongoDb().getMongo().close();
}
model.dcProvider = ds;
model.dc=ds.getDataContext();
model.name=ds.getDatabase();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Fatal connect error:\n"+e.getMessage(), "Jdbc Connect Error", JOptionPane.ERROR_MESSAGE);
return false;
}
return true;
} }
} }

View file

@ -0,0 +1,98 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.demo.server.ui.load;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import net.forwardfire.vasc.demo.server.ui.SpringLayoutGrid;
/**
* JLoadStepMiscInfo
*
* @author Willem Cazander
* @version 1.0 Nov 21, 2012
*/
public class JLoadStepMiscInfo extends JPanel implements LoadStep {
private static final long serialVersionUID = -8638394652416472734L;
private JTextField filenameField = null;
private JTextField groupIdField = null;
private JTextField rolesGroupField = null;
private JTextField rolesEntryField = null;
public JLoadStepMiscInfo() {
setLayout(new FlowLayout(FlowLayout.LEFT));
add(createPanelCenter());
}
public String getStepTitle() {
return "Select Info";
}
public JPanel getPanel() {
return this;
}
public JPanel createPanelCenter() {
JPanel result = new JPanel();
result.setLayout(new SpringLayout());
filenameField = new JTextField();
groupIdField = new JTextField();
rolesGroupField = new JTextField();
rolesEntryField = new JTextField();
result.add(new JLabel("Filename:"));
result.add(filenameField);
result.add(new JLabel("groupId:"));
result.add(groupIdField);
result.add(new JLabel("rolesGroup:"));
result.add(rolesGroupField);
result.add(new JLabel("rolesEntry:"));
result.add(rolesEntryField);
SpringLayoutGrid.makeCompactGrid(result, 4, 2);
return result;
}
public void setupStep(LoadStepData model) {
filenameField.setText(model.name+".xml");
groupIdField.setText(model.name);
rolesGroupField.setText("login,admin");
rolesEntryField.setText("login,admin");
}
@Override
public boolean performStep(LoadStepData model) {
model.filename = filenameField.getText();
model.groupId = groupIdField.getText();
model.rolesGroup = rolesGroupField.getText();
model.rolesEntry = rolesEntryField.getText();
return true;
}
}

View file

@ -0,0 +1,180 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.demo.server.ui.load;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.SpringLayout;
import javax.swing.table.AbstractTableModel;
import org.eobjects.metamodel.DataContext;
import net.forwardfire.vasc.demo.server.ui.SpringLayoutGrid;
/**
* JLoadStepSelectTables select tables to load.
*
* @author Willem Cazander
* @version 1.0 May 9, 2012
*/
public class JLoadStepSelectTables extends JPanel implements LoadStep {
private static final long serialVersionUID = -8638394652416472734L;
private JTable table = null;
private MetaModelTableModel tableModel = null;
private DataContext dcOld = null;
public JLoadStepSelectTables() {
setLayout(new SpringLayout());
add(createPanelCenter());
SpringLayoutGrid.makeCompactGrid(this, 1, 1, 6, 6, 6, 6);
}
public String getStepTitle() {
return "Select Tables";
}
public JPanel getPanel() {
return this;
}
public JComponent createPanelCenter() {
tableModel = new MetaModelTableModel();
table = new JTable(tableModel);
table.setFillsViewportHeight(true);
table.setShowHorizontalLines(true);
table.setAutoscrolls(true);
//((JComponent) table.getDefaultRenderer(Boolean.class)).setOpaque(true);// let backgroup color work correctly
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
return scrollPane;
}
public void setupStep(LoadStepData model) {
if (model.tables.isEmpty() | (dcOld!=null && dcOld!=model.dc)) {
tableModel.setData(Arrays.asList(model.dc.getDefaultSchema().getTableNames()));
dcOld = model.dc;
}
}
@Override
public boolean performStep(LoadStepData model) {
model.tables.clear();
for (TableRow row:tableModel.getData()) {
if (row.load) {
model.tables.add(row.table);
}
}
return true;
}
class TableRow {
String table;
boolean load = true;
}
class MetaModelTableModel extends AbstractTableModel {
private static final long serialVersionUID = 5487313677918103654L;
private List<TableRow> data = new ArrayList<TableRow>();
public void setData(List<String> tables) {
data.clear();
for (String table:tables) {
TableRow row = new TableRow();
row.table=table;
data.add(row);
}
fireTableDataChanged();
}
public List<TableRow> getData() {
return data;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex==0) {
return String.class;
} else {
return Boolean.class;
}
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public String getColumnName(int columnIndex) {
if (columnIndex==0) {
return "TableName";
} else {
return "Import";
}
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
TableRow row = data.get(rowIndex);
if (columnIndex==0) {
return row.table;
} else {
return new Boolean(row.load);
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return columnIndex>0;
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
if (columnIndex==1) {
TableRow row = data.get(rowIndex);
if (value instanceof Boolean) {
row.load = (Boolean)value;
}
}
}
}
}

View file

@ -0,0 +1,118 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.demo.server.ui.load;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.SpringLayout;
import org.x4o.xml.sax.XMLWriter;
import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.demo.server.core.VascTechDemoStartup;
import net.forwardfire.vasc.demo.server.ui.SpringLayoutGrid;
/**
* JLoadStepWriteFile writes the file.
*
* @author Willem Cazander
* @version 1.0 Nov 21, 2012
*/
public class JLoadStepWriteFile extends JPanel implements LoadStep,ActionListener {
private static final long serialVersionUID = -8638394652416472734L;
private JTextArea text = null;
public JLoadStepWriteFile() {
setLayout(new SpringLayout());
add(createPanelCenter());
SpringLayoutGrid.makeCompactGrid(this, 1, 1, 6, 6, 6, 6);
}
public String getStepTitle() {
return "Select Tables";
}
public JPanel getPanel() {
return this;
}
public JComponent createPanelCenter() {
text = new JTextArea(13,45);
text.setAutoscrolls(true);
JScrollPane scrollPane = new JScrollPane(text);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
return scrollPane;
}
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
public void setupStep(LoadStepData model) {
try {
VascController vc = VascTechDemoStartup.getInstance().getVascControllerService().getVascController();
StringWriter out = new StringWriter();
XMLWriter outXml = new XMLWriter(out);
LoadVascXmlWriter writer = new LoadVascXmlWriter(outXml,vc);
writer.writeXml(model);
text.setText(out.getBuffer().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean performStep(LoadStepData model) {
try {
VascController vc = VascTechDemoStartup.getInstance().getVascControllerService().getVascController();
File tmpFile = new File("conf/vasc.d/"+model.filename);// File.createTempFile("vasc","xml");
System.out.println("write to : "+tmpFile);
Writer out = new OutputStreamWriter(new FileOutputStream(tmpFile));
XMLWriter outXml = new XMLWriter(out);
LoadVascXmlWriter writer = new LoadVascXmlWriter(outXml,vc);
writer.writeXml(model);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
}

View file

@ -1,5 +1,5 @@
/* /*
* Copyright 2009-2012 forwardfire.net All rights reserved. * Copyright 2007-2012 forwardfire.net All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are permitted provided * Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met: * that the following conditions are met:
@ -20,30 +20,24 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package net.forwardfire.vasc.demo.tech.ejb3.menu.model;
import java.io.Serializable;
import java.util.Comparator;
/** /**
* VascMenuGroupComparator orders the menu group. * LoadStep are the load wizzard steps.
* *
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 nov 17, 2012 * @version 1.0 Nov 21, 2012
*/ */
public class VascMenuGroupComparator implements Serializable,Comparator<VascMenuGroup> { package net.forwardfire.vasc.demo.server.ui.load;
import javax.swing.JPanel;
public interface LoadStep {
JPanel getPanel();
private static final long serialVersionUID = 386631856823832371L; String getStepTitle();
public int compare(VascMenuGroup m1, VascMenuGroup m2) { void setupStep(LoadStepData model);
if (m1.getMenuOrder()==null) {
return 1; boolean performStep(LoadStepData model);
} }
if (m2.getMenuOrder()==null) {
return -1;
}
return m1.getMenuOrder().compareTo(m2.getMenuOrder());
}
}

View file

@ -0,0 +1,50 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.demo.server.ui.load;
import java.util.ArrayList;
import java.util.List;
import org.eobjects.metamodel.DataContext;
import net.forwardfire.vasc.backend.metamodel.MetaModelDataContextProvider;
/**
* LoadStepData Simple model to load wizzard steps.
*
* @author Willem Cazander
* @version 1.0 Nov 21, 2012
*/
public class LoadStepData {
public String name = null;
public MetaModelDataContextProvider dcProvider = null;
public DataContext dc = null;
public String filename = null;
public String groupId = null;
public String rolesGroup = null;
public String rolesEntry = null;
public List<String> tables = new ArrayList<String>();
}

View file

@ -0,0 +1,242 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.demo.server.ui.load;
import net.forwardfire.vasc.backend.metamodel.MetaModelDataContextJdbc;
import net.forwardfire.vasc.backend.metamodel.MetaModelDataContextMongodb;
import net.forwardfire.vasc.backend.metamodel.MetaModelSchemaAutoEntry;
import net.forwardfire.vasc.backend.metamodel.MetaModelVascBackend;
import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascEntryFieldType;
import net.forwardfire.vasc.core.VascEntryLink;
import net.forwardfire.vasc.core.VascEntryLinkType;
import net.forwardfire.vasc.impl.ui.VascSelectItemModelEntry;
import org.xml.sax.SAXException;
import org.xml.sax.ext.DefaultHandler2;
import org.xml.sax.helpers.AttributesImpl;
/**
* LoadVascXmlWriter writes the xml tags.
* note: need to move this to x4o
*
* @author Willem Cazander
* @version 1.0 Nov 22, 2012
*/
public class LoadVascXmlWriter {
private VascController vc = null;
private DefaultHandler2 xmlWriter = null;
static private final String URI_VASC_ROOT = "http://vasc.forwardfire.net/xml/ns/vasc-root";
static private final String URI_VASC_LANG = "http://vasc.forwardfire.net/xml/ns/vasc-lang";
static private final String URI_META_MODEL = "http://vasc.forwardfire.net/xml/ns/vasc-backend-metamodel";
static private final String URI_VASC_DEMO = "http://vasc.forwardfire.net/xml/ns/vasc-tech-demo";
public LoadVascXmlWriter(DefaultHandler2 xmlWriter,VascController vc) {
this.xmlWriter=xmlWriter;
this.vc=vc;
}
public void writeXml(LoadStepData model) throws SAXException {
MetaModelSchemaAutoEntry autoEntry = new MetaModelSchemaAutoEntry();
autoEntry.setVascGroupId(model.groupId);
autoEntry.setEntryPrefix(model.name);
autoEntry.setDataContextProvider(model.dcProvider);
autoEntry.getTables().addAll(model.tables);
autoEntry.autoFillResult(vc);
xmlWriter.startDocument();
char[] msg;
msg = "\n".toCharArray();
xmlWriter.ignorableWhitespace(msg,0,msg.length);
xmlWriter.startPrefixMapping("vasc", URI_VASC_ROOT);
xmlWriter.startPrefixMapping("v", URI_VASC_LANG);
xmlWriter.startPrefixMapping("mm", URI_META_MODEL);
xmlWriter.startPrefixMapping("td", URI_VASC_DEMO);
AttributesImpl atts = new AttributesImpl();
xmlWriter.startElement (URI_VASC_ROOT, "root", "", atts);
msg = "Auto generated vasc xml example.".toCharArray();
xmlWriter.comment(msg,0,msg.length);
writeGroup(model.groupId,model.rolesGroup);
writeMetaProvider(model);
for (MetaModelVascBackend vb:autoEntry.getResultBackends()) {
writeEntryBackend(vb,model);
}
for (VascEntry ve:autoEntry.getResultEntries()) {
writeEntry(ve,model);
}
xmlWriter.endElement(URI_VASC_ROOT, "root", "");
xmlWriter.endDocument();
}
private void writeMetaProvider(LoadStepData model) throws SAXException {
AttributesImpl atts = null;
if (model.dcProvider instanceof MetaModelDataContextMongodb) {
MetaModelDataContextMongodb mongo = (MetaModelDataContextMongodb)model.dcProvider;
atts = new AttributesImpl();
atts.addAttribute ("", "el.id", "", "", model.name+"DC");
if (mongo.getHostname()!=null) {
atts.addAttribute ("", "hostname", "", "", mongo.getHostname());
}
if (mongo.getDatabase()!=null) {
atts.addAttribute ("", "database", "", "", mongo.getDatabase());
}
if (mongo.getUsername()!=null) {
atts.addAttribute ("", "username", "", "", mongo.getUsername());
}
if (mongo.getPassword()!=null) {
atts.addAttribute ("", "password", "", "", mongo.getPassword());
}
atts.addAttribute ("", "port", "", "", ""+mongo.getPort());
xmlWriter.startElement (URI_META_MODEL, "mongodbDataContext", "", atts);
xmlWriter.endElement(URI_META_MODEL, "mongodbDataContext", "");
} else if (model.dcProvider instanceof MetaModelDataContextJdbc) {
MetaModelDataContextJdbc jdbc = (MetaModelDataContextJdbc)model.dcProvider;
atts = new AttributesImpl();
atts.addAttribute ("", "name", "", "", "jdbc/load/"+model.name+"DS");
atts.addAttribute ("", "auth", "", "", "Container");
atts.addAttribute ("", "type", "", "", "javax.sql.DataSource");
atts.addAttribute ("", "factory", "", "", "org.apache.tomcat.jdbc.pool.DataSourceFactory");
atts.addAttribute ("", "initialSize", "", "", "1");
atts.addAttribute ("", "minIdle", "", "", "1");
atts.addAttribute ("", "username", "", "", jdbc.getUsername());
atts.addAttribute ("", "password", "", "", jdbc.getPassword());
atts.addAttribute ("", "driverClassName", "", "", jdbc.getDriverClass());
atts.addAttribute ("", "url", "", "", jdbc.getConnectUrl());
xmlWriter.startElement (URI_VASC_DEMO, "tomcatResource", "", atts);
xmlWriter.endElement(URI_VASC_DEMO, "tomcatResource", "");
atts = new AttributesImpl();
atts.addAttribute ("", "el.id", "", "", model.name+"DC");
atts.addAttribute ("", "jndiName", "", "", "java:jdbc/load/"+model.name+"DS");
xmlWriter.startElement (URI_META_MODEL, "jndiDataSourceDataContext", "", atts);
xmlWriter.endElement(URI_META_MODEL, "jndiDataSourceDataContext", "");
}
}
private void writeGroup(String groupId,String roles) throws SAXException {
AttributesImpl atts = new AttributesImpl();
atts.addAttribute ("", "id", "", "", groupId);
atts.addAttribute ("", "rolesView", "", "", roles);
xmlWriter.startElement (URI_VASC_LANG, "entryGroup", "", atts);
xmlWriter.endElement(URI_VASC_LANG, "entryGroup", "");
}
private void writeEntryBackend(MetaModelVascBackend vb,LoadStepData model) throws SAXException {
AttributesImpl atts = new AttributesImpl();
atts.addAttribute ("", "id", "", "", vb.getId());
atts.addAttribute ("", "dataContextProvider", "", "", "${"+model.name+ "DC}");
atts.addAttribute ("", "table", "", "", vb.getTable());
atts.addAttribute ("", "tableId", "", "", vb.getTableId());
xmlWriter.startElement (URI_META_MODEL, "metaModelBackend", "", atts);
xmlWriter.endElement(URI_META_MODEL, "metaModelBackend", "");
}
private void writeEntry(VascEntry ve,LoadStepData model) throws SAXException {
AttributesImpl atts = new AttributesImpl();
atts.addAttribute ("", "id", "", "", ve.getId());
atts.addAttribute ("", "backendId", "", "", ve.getBackendId());
atts.addAttribute ("", "primaryKeyFieldId", "", "", ve.getPrimaryKeyFieldId());
if (ve.getDisplayNameFieldId()!=null) {
atts.addAttribute ("", "displayNameFieldId", "", "", ve.getDisplayNameFieldId());
}
if (ve.getVascGroupId()!=null) {
atts.addAttribute ("", "vascGroupId", "", "", ve.getVascGroupId());
}
if (ve.getAccessType()!=null) {
atts.addAttribute ("", "accessType", "", "", ve.getAccessType().name());
}
xmlWriter.startElement (URI_VASC_LANG, "entry", "", atts);
createFields(ve);
for (VascEntryLink vel:ve.getVascEntryLinks()) {
atts = new AttributesImpl();
atts.addAttribute ("", "id", "", "", vel.getId());
if (vel.getVascEntryLinkType()!=null && vel.getVascEntryLinkType()!=VascEntryLinkType.DEFAULT_TYPE) {
atts.addAttribute ("", "vascEntryLinkType", "", "", ""+vel.getVascEntryLinkType());
}
atts.addAttribute ("", "vascEntryId", "", "", vel.getVascEntryId());
xmlWriter.startElement (URI_VASC_LANG, "link", "", atts);
for (String key:vel.getEntryParameterFieldIdKeys()) {
String value = vel.getEntryParameterFieldId(key);
atts = new AttributesImpl();
atts.addAttribute ("", "name", "", "", key);
atts.addAttribute ("", "valueFieldId", "", "", value);
xmlWriter.startElement (URI_VASC_LANG, "linkParameter", "", atts);
xmlWriter.endElement(URI_VASC_LANG, "linkParameter", "");
}
xmlWriter.endElement(URI_VASC_LANG, "link", "");
}
xmlWriter.endElement(URI_VASC_LANG, "entry", "");
}
private void createFields(VascEntry ve) throws SAXException {
for (VascEntryField f:ve.getVascEntryFields()) {
AttributesImpl atts = new AttributesImpl();
atts.addAttribute ("", "id", "", "", f.getId());
VascEntryFieldType type = f.getVascEntryFieldType();
if (type!=null) {
atts.addAttribute ("", "vascEntryFieldType", "", "", type.getId());
}
if (f.getEditReadOnly()!=null) {
atts.addAttribute ("", "editReadOnly", "", "", ""+f.getEditReadOnly());
}
//atts.addAttribute ("", "vascGroupId", "", "", model.groupId);
xmlWriter.startElement (URI_VASC_LANG, "field", "", atts);
if (type!=null && "ListField".equals(type.getId())) {
VascSelectItemModelEntry link = (VascSelectItemModelEntry)type.getDataObject();
atts = new AttributesImpl();
atts.addAttribute ("", "entryId", "", "", ""+link.getEntryId());
atts.addAttribute ("", "displayFieldId", "", "", ""+link.getDisplayFieldId());
xmlWriter.startElement (URI_VASC_LANG, "vascSelectItemModel", "", atts);
xmlWriter.endElement(URI_VASC_LANG, "vascSelectItemModel", "");
}
xmlWriter.endElement(URI_VASC_LANG, "field", "");
}
}
}

View file

@ -63,27 +63,6 @@ CREATE INDEX vasc_page_part_page_id_idx ON vasc_page_part(page_id);
CREATE INDEX vasc_page_part_active_idx ON vasc_page_part(active); CREATE INDEX vasc_page_part_active_idx ON vasc_page_part(active);
CREATE INDEX vasc_page_part_sitemap_idx ON vasc_page_part(sitemap); CREATE INDEX vasc_page_part_sitemap_idx ON vasc_page_part(sitemap);
CREATE TABLE vasc_menu_group (
id varchar not null primary key,
title varchar not null,
active BOOLEAN NOT NULL,
roles varchar not null,
menu_order integer not null,
);
CREATE INDEX vasc_menu_group_active_idx ON vasc_menu_group(active);
CREATE TABLE vasc_menu (
id IDENTITY not null primary key,
vasc_entry_id varchar not null,
title varchar not null,
active BOOLEAN NOT NULL,
roles varchar not null,
menu_order integer not null,
menu_group varchar not null
);
CREATE INDEX vasc_menu_active_idx ON vasc_menu(active);
CREATE TABLE vasc_menu_web ( CREATE TABLE vasc_menu_web (
id IDENTITY not null primary key, id IDENTITY not null primary key,
href varchar not null, href varchar not null,
@ -135,22 +114,6 @@ INSERT INTO vasc_page_part VALUES(10,6, 'metamodel','', TRUE,TRUE,TRUE,3,'WIKI',
-- INSERT INTO vasc_page VALUES(1, 'home','home','Welcome to the vasc demo, please login as admin to view all stuff.'); -- INSERT INTO vasc_page VALUES(1, 'home','home','Welcome to the vasc demo, please login as admin to view all stuff.');
INSERT INTO vasc_menu_group VALUES('demo', 'Demo',true,'',1);
INSERT INTO vasc_menu_group VALUES('meta', 'Meta',true,'',2);
INSERT INTO vasc_menu VALUES(1,'metaPeople', 'People', true,'',1,'meta');
INSERT INTO vasc_menu VALUES(2,'metaProjects', 'Projects',true,'',2,'meta');
INSERT INTO vasc_menu VALUES(3,'AdminVascUser', 'Users', true,'',1,'demo');
INSERT INTO vasc_menu VALUES(4,'AdminVascUserRole', 'UserRole',true,'',2,'demo');
INSERT INTO vasc_menu VALUES(5,'AdminVascUserChangeField','ChangeField', true,'',3,'demo');
INSERT INTO vasc_menu VALUES(6,'AdminVascUserChangeLog', 'ChangeLog',true,'',4,'demo');
INSERT INTO vasc_menu VALUES(7,'AdminVascPage', 'Pages', true,'',5,'demo');
INSERT INTO vasc_menu VALUES(8,'AdminVascPagePart', 'PagesPart',true,'',6,'demo');
INSERT INTO vasc_menu VALUES( 9,'AdminVascMenuWeb', 'MenuWeb', true,'',7,'demo');
INSERT INTO vasc_menu VALUES(10,'AdminVascMenuGroup', 'MenuGroup',true,'',8,'demo');
INSERT INTO vasc_menu VALUES(11,'AdminVascMenu', 'Menu', true,'',9,'demo');
INSERT INTO vasc_menu_web VALUES(1, '/html/index.jsf','Home', '',true,'',1,'BAR_RIGHT'); INSERT INTO vasc_menu_web VALUES(1, '/html/index.jsf','Home', '',true,'',1,'BAR_RIGHT');
INSERT INTO vasc_menu_web VALUES(2, '/html/admin/debug.jsf','Debug','',true,'admin',2,'BAR_RIGHT'); INSERT INTO vasc_menu_web VALUES(2, '/html/admin/debug.jsf','Debug','',true,'admin',2,'BAR_RIGHT');
INSERT INTO vasc_menu_web VALUES(3, '/html/admin/index.jsf','Admin','',true,'admin',3,'BAR_RIGHT'); INSERT INTO vasc_menu_web VALUES(3, '/html/admin/index.jsf','Admin','',true,'admin',3,'BAR_RIGHT');

View file

@ -29,7 +29,7 @@ Application.homepage = http://vasc.forwardfire.org/
Application.vendorId = vasc Application.vendorId = vasc
Application.id = vascdemotech Application.id = vascdemotech
Application.lookAndFeel = com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel Application.lookAndFeel = com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
#Application.icon = images/icon.png Application.icon = icon.png
Application.web.meta.robots = index, follow Application.web.meta.robots = index, follow
Application.web.meta.description = Vasc Tech Demo Web Frontends Application.web.meta.description = Vasc Tech Demo Web Frontends

View file

@ -0,0 +1,12 @@
#
# Default dark red color thema for pulsefire
#
text=#DF0A0A
info=#370A00
control=#0A1428
nimbusBase=#00050A
nimbusFocus=#0A6428
nimbusOrange=#00960A
nimbusBorder=#34415E
nimbusDisabledText=#850F0F
nimbusLightBackground=#050A28

Binary file not shown.

Before

Width:  |  Height:  |  Size: 644 B

After

Width:  |  Height:  |  Size: 400 B

View file

@ -28,6 +28,11 @@
<artifactId>vasc-core-ejb3-client</artifactId> <artifactId>vasc-core-ejb3-client</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>net.forwardfire.vasc.lib</groupId>
<artifactId>vasc-lib-i18n</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>net.forwardfire.vasc.demo</groupId> <groupId>net.forwardfire.vasc.demo</groupId>
<artifactId>vasc-demo-tech-web</artifactId> <artifactId>vasc-demo-tech-web</artifactId>

View file

@ -27,27 +27,10 @@ import java.awt.Dimension;
import java.awt.GridLayout; import java.awt.GridLayout;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable; import java.io.Serializable;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.ResourceBundle;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.JSplitPane; import javax.swing.JSplitPane;
@ -60,32 +43,22 @@ import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode; import javax.swing.tree.TreeNode;
import net.forwardfire.vasc.annotations.VascModelReference;
import net.forwardfire.vasc.backend.VascBackend; import net.forwardfire.vasc.backend.VascBackend;
import net.forwardfire.vasc.backend.VascBackendController;
import net.forwardfire.vasc.backend.VascBackendControllerLocal; import net.forwardfire.vasc.backend.VascBackendControllerLocal;
import net.forwardfire.vasc.backend.VascBackendState;
import net.forwardfire.vasc.backend.proxy.VascBackendProxyEventExecutor;
import net.forwardfire.vasc.core.VascController; import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascControllerLocal; import net.forwardfire.vasc.core.VascEntryConfigControllerLocal;
import net.forwardfire.vasc.core.VascControllerProvider;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryControllerLocal; import net.forwardfire.vasc.core.VascEntryControllerLocal;
import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascEntryFieldLocal;
import net.forwardfire.vasc.core.VascEntryLocal; import net.forwardfire.vasc.core.VascEntryLocal;
import net.forwardfire.vasc.core.VascException; import net.forwardfire.vasc.core.VascException;
import net.forwardfire.vasc.core.entry.VascEntryFieldValue;
import net.forwardfire.vasc.core.entry.VascEntryRecordCreator;
import net.forwardfire.vasc.demo.tech.ejb3.menu.VascMenuController; import net.forwardfire.vasc.demo.tech.ejb3.menu.VascMenuController;
import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenu; import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenu;
import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuGroup; import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuGroup;
import net.forwardfire.vasc.ejb3.VascServiceManager; import net.forwardfire.vasc.ejb3.VascServiceManager;
import net.forwardfire.vasc.ejb3.VascServiceRemoteBackend;
import net.forwardfire.vasc.frontend.swing.SwingPanelIntegration; import net.forwardfire.vasc.frontend.swing.SwingPanelIntegration;
import net.forwardfire.vasc.frontend.swing.SwingPanelTabbed; import net.forwardfire.vasc.frontend.swing.SwingPanelTabbed;
import net.forwardfire.vasc.impl.DefaultVascController;
import net.forwardfire.vasc.impl.DefaultVascFactory; import net.forwardfire.vasc.impl.DefaultVascFactory;
import net.forwardfire.vasc.impl.entry.SetParameterBackendListener; import net.forwardfire.vasc.lib.i18n.bundle.RootApplicationBundle;
/** /**
* JMainPanel is the main panel/window of this demo. * JMainPanel is the main panel/window of this demo.
@ -96,199 +69,23 @@ import net.forwardfire.vasc.impl.entry.SetParameterBackendListener;
public class JMainPanel extends JPanel { public class JMainPanel extends JPanel {
private static final long serialVersionUID = 5834715323973411147L; private static final long serialVersionUID = 5834715323973411147L;
//private VascControllerService vascManager = null;
private VascController vc = null; private VascController vc = null;
private VascMenuController vmc = null; private VascMenuController vmc = null;
private VascServiceManager vsm = null; private VascServiceManager vsm = null;
private SwingPanelIntegration spi = null; private SwingPanelIntegration spi = null;
private JTabbedPane tabPane = null; private JTabbedPane tabPane = null;
private JTree vascTree = null; private JTree vascTree = null;
private JSplitPane bottomSplitPane = null;
private JSplitPane treeSplitPane = null; private JSplitPane treeSplitPane = null;
public JMainPanel(VascServiceManager vsm,VascMenuController vmc) { public JMainPanel(VascServiceManager vsm,VascMenuController vmc) {
//this.vascManager=VascTechDemoStartup.getInstance().getVascControllerService();
this.vsm = vsm; this.vsm = vsm;
this.vmc = vmc; this.vmc = vmc;
setLayout(new BorderLayout()); setLayout(new BorderLayout());
add(createBottomSplit(), BorderLayout.CENTER); add(createTreeSplit(), BorderLayout.CENTER);
vc = createVascController(vsm);
//vascManager.addVascServiceListener(this);
rebuildTree();
}
class RemoteVascBackend implements VascBackend {
private String backendId = null;
private VascServiceManager vascManager = null;
public RemoteVascBackend(String backendId,VascServiceManager vascManager) { vc = createVascController(vsm);
this.backendId=backendId; rebuildTree();
this.vascManager=vascManager;
}
public void startBackend() {
}
public void stopBackend() {
}
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 {
field = ((VascEntryFieldLocal)field).clone(); // RM...
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 (Exception 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) {
VascEntryLocal clone = null;
try {
clone = ((VascEntryLocal)vascEntry).clone();
clone.setVascFrontendController(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;
}
public boolean isReadOnly() {
return false;
}
} }
/** /**
@ -301,7 +98,8 @@ public class JMainPanel extends JPanel {
// get local jvm plugging controller // get local jvm plugging controller
VascController c = DefaultVascFactory.getDefaultVascController(); VascController c = DefaultVascFactory.getDefaultVascController();
((VascEntryConfigControllerLocal)c.getVascEntryConfigController()).setResourceBundle(RootApplicationBundle.class.getName());
/* /*
DefaultVascEntryController con = new DefaultVascEntryController() { DefaultVascEntryController con = new DefaultVascEntryController() {
public VascEntry getVascEntryById(String id) { public VascEntry getVascEntryById(String id) {
@ -323,7 +121,7 @@ public class JMainPanel extends JPanel {
for (String id:entryIds) { for (String id:entryIds) {
VascEntryLocal ve = (VascEntryLocal)vascManager.getVascEntry(id); VascEntryLocal ve = (VascEntryLocal)vascManager.getVascEntry(id);
String backendId = ve.getBackendId(); String backendId = ve.getBackendId();
VascBackend vb = new RemoteVascBackend(backendId,vascManager); VascBackend vb = new VascServiceRemoteBackend(vascManager,backendId);
/* /*
for (String key:ve.getEntryParameterKeys()) { for (String key:ve.getEntryParameterKeys()) {
@ -360,32 +158,18 @@ public class JMainPanel extends JPanel {
} }
} }
private JSplitPane createBottomSplit() {
JSplitPane sp0 = createTreeSplit();
JPanel sp1 = new JPanel();//JConsolePanel();
bottomSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,sp0,sp1);
bottomSplitPane.setOneTouchExpandable(true);
bottomSplitPane.setResizeWeight(0.2);
bottomSplitPane.setDividerLocation(700);
sp0.setMinimumSize(new Dimension(400, 400));
sp1.setMinimumSize(new Dimension(400, 150));
return bottomSplitPane;
}
private JSplitPane createTreeSplit() { private JSplitPane createTreeSplit() {
JScrollPane sp0 = createTreePane(); JScrollPane sp0 = createTreePane();
JScrollPane sp1 = createContentPane(); JScrollPane sp1 = createContentPane();
treeSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,sp0,sp1); treeSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,sp0,sp1);
treeSplitPane.setOneTouchExpandable(true); treeSplitPane.setOneTouchExpandable(true);
treeSplitPane.setResizeWeight(0.7); treeSplitPane.setResizeWeight(0.2);
treeSplitPane.setDividerLocation(200); treeSplitPane.setDividerLocation(170);
sp0.setMinimumSize(new Dimension(200, 400)); sp0.setMinimumSize(new Dimension(200, 400));
sp1.setMinimumSize(new Dimension(400, 400)); sp1.setMinimumSize(new Dimension(400, 400));
return treeSplitPane; return treeSplitPane;
} }
class VascTreeModel extends DefaultTreeModel { class VascTreeModel extends DefaultTreeModel {
public VascTreeModel(TreeNode root) { public VascTreeModel(TreeNode root) {
super(root); super(root);
@ -450,9 +234,9 @@ public class JMainPanel extends JPanel {
JScrollPane p = createJScrollPane(contentPane); JScrollPane p = createJScrollPane(contentPane);
tabPane = new JTabbedPane(); tabPane = new JTabbedPane();
spi = new SwingPanelTabbed(tabPane); spi = new SwingPanelTabbed(tabPane);
contentPane.add(tabPane); contentPane.add(tabPane);
return p; return p;
} }
@ -500,9 +284,9 @@ public class JMainPanel extends JPanel {
List<VascMenuGroup> groups = vmc.getFilteredMenuGroup(); List<VascMenuGroup> groups = vmc.getFilteredMenuGroup();
for (VascMenuGroup group:groups) { for (VascMenuGroup group:groups) {
DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.GROUP,group.getTitle())); DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.GROUP,VascDemoSwingClient.getInstance().i18n(group.getTitleKey())));
for (VascMenu vm:group.getMenus()) { for (VascMenu vm:group.getMenus()) {
DefaultMutableTreeNode entryNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.ENTRY,vm.getVascEntryId())); DefaultMutableTreeNode entryNode = new DefaultMutableTreeNode(new VascTreeNode(VascTreeNodeType.ENTRY,VascDemoSwingClient.getInstance().i18n(vm.getTitleKey())));
groupNode.add(entryNode); groupNode.add(entryNode);
} }
root.add(groupNode); root.add(groupNode);

View file

@ -24,22 +24,14 @@ package net.forwardfire.vasc.demo.client.swing;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.File;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JMenu; import javax.swing.JMenu;
import javax.swing.JMenuBar; import javax.swing.JMenuBar;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JTabbedPane; import javax.swing.JTabbedPane;
import net.forwardfire.vasc.backend.VascBackendControllerLocal;
import net.forwardfire.vasc.core.VascEntryControllerLocal;
import net.forwardfire.vasc.core.VascException; import net.forwardfire.vasc.core.VascException;
import net.forwardfire.vasc.demo.tech.ejb3.menu.VascMenuController; import net.forwardfire.vasc.demo.tech.ejb3.menu.VascMenuController;
import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenu;
import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuGroup;
/** /**
* JMainPanelMenuBar Adds all menu bar items. * JMainPanelMenuBar Adds all menu bar items.
@ -50,85 +42,73 @@ import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuGroup;
public class JMainPanelMenuBar extends JMenuBar implements ActionListener { public class JMainPanelMenuBar extends JMenuBar implements ActionListener {
private static final long serialVersionUID = -2828428804621352725L; private static final long serialVersionUID = -2828428804621352725L;
private VascMenuController vmc = null;
private JMainPanel mainPanel = null; private JMainPanel mainPanel = null;
private List<JMenu> vascMenus = null; //private List<JMenu> vascMenus = null;
private JMenu clientFileMenu = null; private JMenu clientFileMenu = null;
private JMenu clientTabMenu = null; private JMenu clientTabMenu = null;
public JMainPanelMenuBar(VascMenuController vmc,JMainPanel mainPanel) { public JMainPanelMenuBar(VascMenuController vmc,JMainPanel mainPanel) {
this.vmc=vmc;
this.mainPanel=mainPanel; this.mainPanel=mainPanel;
clientFileMenu = new JMenu("File"); clientFileMenu = new JMenu("File");
add(clientFileMenu); add(clientFileMenu);
JMenuItem logoutItem = new JMenuItem("Logout"); JMenuItem logoutItem = new JMenuItem("Logout");
logoutItem.addActionListener(new ActionListener() { logoutItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
try { try {
/* VascDemoSwingClient.getInstance().logout();
final JFileChooser fc = new JFileChooser();
//fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = fc.showOpenDialog((JMenuItem)e.getSource());
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//VascTechDemoStartup.getInstance().getVascControllerService().openFile(file);
}
*/
} catch (Exception e1) { } catch (Exception e1) {
e1.printStackTrace(); e1.printStackTrace();
} }
} }
});
}); clientFileMenu.add(logoutItem);
clientFileMenu.add(logoutItem); clientFileMenu.addSeparator();
clientFileMenu.addSeparator(); JMenuItem exitItem = new JMenuItem("Exit");
JMenuItem exitItem = new JMenuItem("Exit"); exitItem.addActionListener(new ActionListener() {
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
VascDemoSwingClient.getInstance().exit(); VascDemoSwingClient.getInstance().exit();
} }
}); });
clientFileMenu.add(exitItem); clientFileMenu.add(exitItem);
/*
List<VascMenuGroup> groups = vmc.getFilteredMenuGroup(); List<VascMenuGroup> groups = vmc.getFilteredMenuGroup();
for (VascMenuGroup group:groups) { for (VascMenuGroup group:groups) {
JMenu menu = new JMenu(group.getTitle()); JMenu menu = new JMenu(group.getTitleKey());
for (VascMenu vm:group.getMenus()) { for (VascMenu vm:group.getMenus()) {
JMenuItem item = new JMenuItem(vm.getTitle()); JMenuItem item = new JMenuItem(vm.getTitleKey());
item.putClientProperty("vascEntryId", vm.getVascEntryId()); item.putClientProperty("vascEntryId", vm.getVascEntryId());
item.addActionListener(this); item.addActionListener(this);
menu.add(item); menu.add(item);
} }
add(menu); add(menu);
} }
*/
clientTabMenu = new JMenu("Tabs"); clientTabMenu = new JMenu("Tabs");
add(clientTabMenu); add(clientTabMenu);
JMenuItem item = new JMenuItem("Close tab"); JMenuItem item = new JMenuItem("Close tab");
item.addActionListener(new ActionListener() { item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
JTabbedPane tabPane = getTabPane(); JTabbedPane tabPane = getTabPane();
if (tabPane.getSelectedIndex()>=0) { if (tabPane.getSelectedIndex()>=0) {
tabPane.removeTabAt(tabPane.getSelectedIndex()); // todo release vasc frontend tabPane.removeTabAt(tabPane.getSelectedIndex()); // todo release vasc frontend
} }
} }
});
}); clientTabMenu.add(item);
clientTabMenu.add(item); JMenuItem itemAll = new JMenuItem("Close All tabs");
JMenuItem itemAll = new JMenuItem("Close All tabs"); itemAll.addActionListener(new ActionListener() {
itemAll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
JTabbedPane tabPane = getTabPane(); JTabbedPane tabPane = getTabPane();
for (int i=tabPane.getTabCount();i>0;i--) { for (int i=tabPane.getTabCount();i>0;i--) {
tabPane.removeTabAt(i-1); // todo release vasc frontend tabPane.removeTabAt(i-1); // todo release vasc frontend
} }
} }
}); });
clientTabMenu.add(itemAll); clientTabMenu.add(itemAll);
} }
public JTabbedPane getTabPane() { public JTabbedPane getTabPane() {
@ -148,66 +128,4 @@ public class JMainPanelMenuBar extends JMenuBar implements ActionListener {
} }
} }
/*
private void createMenuItems() {
JMenuItem openXmlItem = new JMenuItem("Import Xml");
openXmlItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
final JFileChooser fc = new JFileChooser();
//fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = fc.showOpenDialog((JMenuItem)e.getSource());
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//VascTechDemoStartup.getInstance().getVascControllerService().openFile(file);
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
fileMenu.add(openXmlItem);
//JMenuItem closeXmlItem = new JMenuItem("Close");
//fileMenu.add(closeXmlItem);
fileMenu.addSeparator();
JMenuItem exitItem = new JMenuItem("Exit");
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//JApplication.getInstance().exit();
}
});
fileMenu.add(exitItem);
JMenuItem connectVascItem = new JMenuItem("Add Vasc");
connectVascItem.setEnabled(false);
connectVascItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
vascMenu.add(connectVascItem);
JMenuItem connectLdapItem = new JMenuItem("Add Ldap");
connectLdapItem.setEnabled(false);
vascMenu.add(connectLdapItem);
vascMenu.addSeparator();
vascMenu.addSeparator();
JMenuItem removeEntryItem = new JMenuItem("Remove entry");
removeEntryItem.setEnabled(false);
removeEntryItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
vascMenu.add(removeEntryItem);
tabMenu.add(itemAll);
}
*/
} }

View file

@ -1,14 +1,27 @@
/*
* Copyright 2007-2012 forwardfire.net All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/
package net.forwardfire.vasc.demo.client.swing; package net.forwardfire.vasc.demo.client.swing;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -20,63 +33,58 @@ import java.util.logging.Logger;
import javax.naming.CommunicationException; import javax.naming.CommunicationException;
import javax.naming.Context; import javax.naming.Context;
import javax.naming.InitialContext; import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingException;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginContext;
import javax.swing.JFrame;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import net.forwardfire.vasc.demo.tech.ejb3.menu.VascMenuController; import net.forwardfire.vasc.demo.tech.ejb3.menu.VascMenuController;
import net.forwardfire.vasc.demo.tech.ejb3.user.LoginUserController; import net.forwardfire.vasc.demo.tech.ejb3.user.ClientUserController;
import net.forwardfire.vasc.ejb3.VascServiceManager; import net.forwardfire.vasc.ejb3.VascServiceManager;
import net.forwardfire.vasc.lib.i18n.bundle.RootApplicationBundle;
import org.jdesktop.application.Application; import org.jdesktop.application.Application;
import org.jdesktop.application.FrameView; import org.jdesktop.application.FrameView;
import org.jdesktop.application.SingleFrameApplication; import org.jdesktop.application.SingleFrameApplication;
/**
* VascDemoSwingClient is the main swing remote client.
*
* @author Willem Cazander
* @version 1.0 Nov 10, 2012
*/
public class VascDemoSwingClient extends SingleFrameApplication { public class VascDemoSwingClient extends SingleFrameApplication {
private static VascDemoSwingClient instance = null;
static protected Context context = null; static protected Context context = null;
static protected LoginContext loginContext = null; static protected LoginContext loginContext = null;
private Logger logger = null; private Logger logger = null;
static public void main(String[] args) { static public void main(String[] args) {
/*
instance = new VascDemoSwingClient();
instance.initialize(args);
instance.startup();
*/
Application.launch(VascDemoSwingClient.class, new String[] {}); Application.launch(VascDemoSwingClient.class, new String[] {});
} }
static public VascDemoSwingClient getInstance() {
return (VascDemoSwingClient)SingleFrameApplication.getInstance();
}
@Override @Override
protected void startup() { protected void startup() {
logger = Logger.getLogger(VascDemoSwingClient.class.getName()); logger = Logger.getLogger(VascDemoSwingClient.class.getName());
createContext();
try {
setJaasConfig();
} catch (IOException e) {
e.printStackTrace();
}
doLogin(); doLogin();
JdniTreePrinter printer = new JdniTreePrinter(false);
StringBuffer buf = new StringBuffer();
printer.printJNDITree(context, "", buf);
System.out.println(buf);
VascServiceManager vc = null; VascServiceManager vc = null;
LoginUserController luc = null; ClientUserController cuc = null;
VascMenuController vmc = null; VascMenuController vmc = null;
try { try {
vc = (VascServiceManager)context.lookup("vascServiceManagerRemote"); vc = (VascServiceManager)context.lookup("vascServiceManagerRemote");
System.out.println("ob: "+vc); System.out.println("ob: "+vc);
luc = (LoginUserController)context.lookup("loginUserControllerRemote"); cuc = (ClientUserController)context.lookup("clientUserControllerRemote");
System.out.println("fll: "+luc.doClientLogin()); System.out.println("fll: "+cuc.doClientLogin());
// i18n fixme !!
RootApplicationBundle bundle = (RootApplicationBundle)ResourceBundle.getBundle(RootApplicationBundle.class.getName());
bundle.addBundleData(cuc.getResourceBundle(bundle.getLocale()));
vmc = (VascMenuController)context.lookup("vascMenuControllerRemote"); vmc = (VascMenuController)context.lookup("vascMenuControllerRemote");
} catch (Exception e) { } catch (Exception e) {
@ -86,126 +94,48 @@ public class VascDemoSwingClient extends SingleFrameApplication {
JMainPanel mainPanel = new JMainPanel(vc,vmc); JMainPanel mainPanel = new JMainPanel(vc,vmc);
SingleFrameApplication a = (VascDemoSwingClient)getInstance(); // BIG NOTE because of 'launch' for auto conf swing. SingleFrameApplication a = (VascDemoSwingClient)getInstance(); // BIG NOTE because of 'launch' for auto conf swing.
FrameView mainView = a.getMainView(); FrameView mainView = a.getMainView();
mainView.getFrame().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainView.setComponent(mainPanel); mainView.setComponent(mainPanel);
mainView.setMenuBar(new JMainPanelMenuBar(vmc,mainPanel)); mainView.setMenuBar(new JMainPanelMenuBar(vmc,mainPanel));
mainView.getFrame().setSize(600, 800); mainView.getFrame().setSize(1000, 600);
mainView.getFrame().setVisible(true); mainView.getFrame().setVisible(true);
} }
/** public void logout() {
* Created an context to the showplanner server. SingleFrameApplication a = (VascDemoSwingClient)getInstance(); // BIG NOTE because of 'launch' for auto conf swing.
*/ FrameView mainView = a.getMainView();
private void createContext() { mainView.getFrame().setVisible(false);
Properties props = new Properties();
String connectUrl = "http://localhost:8899/demo/ejb"; //System.getProperty("javaws.connecturl");
logger.info("Connecting to: "+connectUrl);
props.put(Context.PROVIDER_URL, connectUrl );
props.put("openejb.authentication.realmName", "vasc-auth-server");
props.put(Context.SECURITY_PRINCIPAL,"admin");
props.put(Context.SECURITY_CREDENTIALS,"admin123");
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
try { startup(); // ugly ..
context = new InitialContext(props);
} catch (Exception e) {
e.printStackTrace();
//logger.log(Level.WARNING,e.getMessage(),e);
//ExceptionDialog err = new ExceptionDialog(e,true);
//err.showOpenDialog(null,i18n(VascDemoSwingClient.class,"dialogTitle"),i18n(VascDemoSwingClient.class,"dialogContext"));
}
} }
/**
* Sets our jaas config path
*/
private void setJaasConfig() throws IOException {
// tomee
String path = System.getProperty("java.security.auth.login.config");
if (path == null) {
URL url = VascDemoSwingClient.class.getClassLoader().getResource("META-INF/client.login.conf");
File tempFile = File.createTempFile("cached-", ".jar");
tempFile.deleteOnExit();
copyFile(url.openConnection().getInputStream(),tempFile);
String urlString = "file:"+tempFile.getAbsolutePath();
//logger.info("Setting jaas config property to url: "+urlString);
System.setProperty("java.security.auth.login.config", urlString);
logger.info("Setting jaas config property to url: "+urlString);
/*
if (resource != null) {
path = URLDecoder.decode(resource.getFile());
System.setProperty("java.security.auth.login.config", path);
} else {
logger.warning("Could not find client.login.conf");
}*/
}
/* jboss
URL url = Thread.currentThread().getContextClassLoader().getResource("META-INF/jaas.config");
String urlString = url.toExternalForm();
// jdk1.6 update10 has different classloader, so just copy for the moment..... ..
if (urlString.startsWith("jar:")) {
File tempFile = File.createTempFile("cached-", ".jar");
tempFile.deleteOnExit();
copyFile(url.openConnection().getInputStream(),tempFile);
urlString = "file:"+tempFile.getAbsolutePath();
}
//logger.info("Setting jaas config property to url: "+urlString);
System.setProperty("java.security.auth.login.config", urlString);
*/
}
private void copyFile(InputStream in, File out) throws IOException {
ByteBuffer buffer = ByteBuffer.allocate(1024*4);
byte[] bufferArray = buffer.array();
FileChannel outputChannel = new FileOutputStream(out).getChannel();
while (true) {
buffer.clear();
int lim = in.read(bufferArray);
if (lim < 0) {
break; // could not read anymore
}
buffer.flip();
buffer.limit(lim);
while (buffer.hasRemaining()) {
outputChannel.write(buffer);
}
}
outputChannel.close();
}
/** /**
* Do an login on the server * Do an login on the server
*/ */
private void doLogin() { private void doLogin() {
VascDemoUserLoginDialog loginHandler = new VascDemoUserLoginDialog(); VascDemoUserLoginDialog loginHandler = new VascDemoUserLoginDialog();
try { loginHandler.setConnectUrl("http://localhost:8899/demo");
loginContext = new LoginContext("vasc-auth-client", loginHandler); /*
loginContext.login(); try {
loginContext = new LoginContext("vasc-auth-client", loginHandler);
loginContext.login();
} catch(Exception e) { } catch(Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, i18n(this,"dialogNoLoginContext"),i18n(this,"dialogTitle"), JOptionPane.WARNING_MESSAGE); JOptionPane.showMessageDialog(null, i18n(this,"dialogNoLoginContext"),i18n(this,"dialogTitle"), JOptionPane.WARNING_MESSAGE);
System.exit(1); System.exit(1);
} }
*/
try { try {
// Subject subject = loginContext.getSubject(); loginHandler.handle();
if(doLoginContext(loginHandler)) {
if(doLoginTest()) {
return; return;
} }
loginContext.login(); loginHandler.handle();
if(doLoginTest()) { if(doLoginContext(loginHandler)) {
return; return;
} }
loginContext.login(); loginHandler.handle();
if(doLoginTest()) { if(doLoginContext(loginHandler)) {
return; return;
} }
@ -234,25 +164,45 @@ public class VascDemoSwingClient extends SingleFrameApplication {
} }
/** /**
* Check if we have 'login' role on server. * Create naming context and check if we have 'login' role on server.
* @return * @return
* @throws Exception * @throws Exception
*/ */
private boolean doLoginTest() throws Exception { private boolean doLoginContext(VascDemoUserLoginDialog loginHandler) throws Exception {
Properties props = new Properties();
String connectUrl = loginHandler.getConnectUrl()+"/ejb";
logger.info("Connecting to: "+connectUrl);
props.put(Context.PROVIDER_URL, connectUrl );
props.put("openejb.authentication.realmName", "vasc-auth-server");
props.put(Context.SECURITY_PRINCIPAL,loginHandler.getUsername());
props.put(Context.SECURITY_CREDENTIALS,loginHandler.getPassword());
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
try { try {
LoginUserController loginManager = (LoginUserController)context.lookup("loginUserControllerRemote"); context = new InitialContext(props);
loginManager.doClientLogin(); ClientUserController loginManager = (ClientUserController)context.lookup("clientUserControllerRemote");
return true; loginManager.doClientLogin();
return true;
} catch (javax.naming.NameNotFoundException e) { } catch (javax.naming.NameNotFoundException e) {
JOptionPane.showMessageDialog(null, "Server is not deployed.\nPlease wait a couple of minuts and try again."); JOptionPane.showMessageDialog(null, "Server is not deployed.\nPlease wait a couple of minuts and try again.");
return false; return false;
} catch (Exception e) { } catch (Exception e) {
JOptionPane.showMessageDialog(null, "Server error: "+e.getMessage()); JOptionPane.showMessageDialog(null, "Server error: "+e.getMessage());
e.printStackTrace(); e.printStackTrace();
return false; return false;
} }
} }
public String i18n(Object obj,String key,Object...params) {
if(obj==null) { throw new NullPointerException("Can't get key of null obj"); }
if (key==null) { throw new NullPointerException("key may not be null"); }
if(obj instanceof Class) {
key=((Class<?>)obj).getName()+"."+key;
} else {
key=obj.getClass().getName()+"."+key;
}
return i18n(key,params);
}
/** /**
* Some simple hardcoded i18n function here * Some simple hardcoded i18n function here
* *
@ -260,102 +210,16 @@ public class VascDemoSwingClient extends SingleFrameApplication {
* @param params * @param params
* @return * @return
*/ */
static protected String i18n(Object obj,String key,Object...params) { public String i18n(String key,Object...params) {
if(obj==null) { throw new NullPointerException("Can't get key of null obj"); }
if (key==null) { throw new NullPointerException("key may not be null"); }
if(obj instanceof Class) {
key=((Class<?>)obj).getName()+"."+key;
} else {
key=obj.getClass().getName()+"."+key;
}
return key;
/*
try { try {
String text = ResourceBundle.getBundle("resources.i18n.root").getString(key); String text = ResourceBundle.getBundle(RootApplicationBundle.class.getName()).getString(key);
if (params != null) { if (params != null) {
MessageFormat mf = new MessageFormat(text); MessageFormat mf = new MessageFormat(text);
text = mf.format(params, new StringBuffer(), null).toString(); text = mf.format(params, new StringBuffer(), null).toString();
} }
return text; return text;
} catch(MissingResourceException e){ } catch(MissingResourceException e){
return "MISSING: '"+key+"'"; return key;
} }
*/
}
class JdniTreePrinter {
boolean printXml = true;
public JdniTreePrinter(boolean printXml) {
this.printXml=printXml;
}
public void printJNDITree(javax.naming.Context context,String ct,StringBuffer buf) {
if (printXml) {
buf.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
buf.append("<NamingRoot name=\""+ct+"\">\n");
}
printTree(context,ct,buf);
if (printXml) {
buf.append("</NamingRoot>\n");
}
}
public void printTree(javax.naming.Context context,String ct,StringBuffer buf) {
try {
printNE(context,context.list(ct), ct,buf);
} catch (NamingException e) {
//ignore leaf node exception
}
}
private void printNE(javax.naming.Context context,javax.naming.NamingEnumeration<?> ne, String parentctx,StringBuffer buf) throws NamingException {
if (ne==null) {
return;
}
while (ne.hasMoreElements()) {
NameClassPair next = (NameClassPair) ne.nextElement();
if (printXml) {
printIndent(buf);
buf.append("<NamingRoot name=\""+next.getName()+"\" className=\""+next.getClassName()+"\">\n");
increaseIndent();
printTree(context,(parentctx.length() == 0) ? next.getName() : parentctx + "/" + next.getName(),buf);
decreaseIndent();
printIndent(buf);
buf.append("</NamingRoot>\n");
} else {
printEntry(next,buf);
increaseIndent();
printTree(context,(parentctx.length() == 0) ? next.getName() : parentctx + "/" + next.getName(),buf);
decreaseIndent();
}
}
}
private void printEntry(javax.naming.NameClassPair next,StringBuffer buf) {
printIndent(buf);
buf.append("-->");
buf.append(next);
buf.append("\n");
}
private int indentLevel = 0;
private void increaseIndent() {
indentLevel += 4;
}
private void decreaseIndent() {
indentLevel -= 4;
}
private void printIndent(StringBuffer buf) {
for (int i = 0; i < indentLevel; i++) {
buf.append(" ");
}
}
} }
} }

View file

@ -1,20 +1,27 @@
/* /*
* @(#)DialogCallbackHandler.java 1.9 03/12/19 * Copyright 2007-2012 forwardfire.net All rights reserved.
* *
* Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Redistribution and use in source and binary forms, with or without modification, are permitted provided
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
* * 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 THE COPYRIGHT HOLDERS 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
* THE COPYRIGHT HOLDER 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.
*/ */
package net.forwardfire.vasc.demo.client.swing; package net.forwardfire.vasc.demo.client.swing;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.ConfirmationCallback;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.TextOutputCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Dimension; import java.awt.Dimension;
@ -59,14 +66,15 @@ import javax.swing.JTextField;
* *
* @see javax.security.auth.callback * @see javax.security.auth.callback
*/ */
public class VascDemoUserLoginDialog implements CallbackHandler { public class VascDemoUserLoginDialog {
/* The parent window, or null if using the default parent */
private Component parentComponent; private Component parentComponent;
private static final int JPasswordFieldLen = 8; private static final int JPasswordFieldLen = 8;
private int loginTry = 0; private int loginTry = 0;
private String userName = null; private String connectUrl = null;
private String username = null;
private String password = null;
/** /**
* Creates a callback dialog with the default parent window. * Creates a callback dialog with the default parent window.
*/ */
@ -93,15 +101,9 @@ public class VascDemoUserLoginDialog implements CallbackHandler {
} }
/** /**
* Handles the specified set of callbacks. * Handles the login dialog
*
* @param callbacks
* the callbacks to handle
* @throws UnsupportedCallbackException
* if the callback is not an instance of NameCallback or
* PasswordCallback
*/ */
public void handle(Callback[] callbacks) throws UnsupportedCallbackException { public void handle() {
this.loginTry++; this.loginTry++;
/* Collect messages to display in the dialog */ /* Collect messages to display in the dialog */
final JPanel loginDesign = new JPanel(); final JPanel loginDesign = new JPanel();
@ -110,32 +112,28 @@ public class VascDemoUserLoginDialog implements CallbackHandler {
final JPanel logoPanel = new JPanel() { final JPanel logoPanel = new JPanel() {
private static final long serialVersionUID = 10l; private static final long serialVersionUID = 10l;
protected void paintComponent(Graphics g) { protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D)g; Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
// for antialiasing geometric shapes g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
// for antialiasing text
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
// to go for quality over speed
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
// Paint the default look of the panel. // Paint the default look of the panel.
super.paintComponent(g2d); super.paintComponent(g2d);
int offsetX = 0; // for windows systems int offsetX = 0; // for windows systems
boolean isWindows = System.getProperty("os.name").toLowerCase().indexOf("windows") != -1; boolean isWindows = System.getProperty("os.name").toLowerCase().indexOf("windows") != -1;
if (isWindows) { if (isWindows) {
offsetX += 25; offsetX += 25;
} }
g2d.setColor(Color.BLACK); g2d.setColor(Color.BLACK);
g2d.fillRect(0,0,getWidth(),getHeight()); g2d.fillRect(0,0,getWidth(),getHeight());
g2d.setColor(new Color(238,212,1)); g2d.setColor(new Color(238,212,1));
//int w = (getWidth()/2)-(logoImage.getWidth(null)/2); //int w = (getWidth()/2)-(logoImage.getWidth(null)/2);
//int h = (getHeight()/2)-(logoImage.getHeight(null)/2); //int h = (getHeight()/2)-(logoImage.getHeight(null)/2);
//g2d.drawImage(logoImage, w, h, this); //g2d.drawImage(logoImage, w, h, this);
} }
}; };
logoPanel.setPreferredSize(new Dimension(200, 170)); logoPanel.setPreferredSize(new Dimension(200, 170));
logoPanel.setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); logoPanel.setBorder(BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
@ -148,92 +146,64 @@ public class VascDemoUserLoginDialog implements CallbackHandler {
loginDesign.add(namePanel); loginDesign.add(namePanel);
loginDesign.add(Box.createVerticalStrut(5)); loginDesign.add(Box.createVerticalStrut(5));
final GridLayout messagesLayout = new GridLayout(2,2); final GridLayout messagesLayout = new GridLayout(3,2);
final JPanel messages = new JPanel(); final JPanel messages = new JPanel();
messages.setLayout(messagesLayout); messages.setLayout(messagesLayout);
/* Collection actions to perform if the user clicks OK */ /* Collection actions to perform if the user clicks OK */
final List<Action> okActions = new ArrayList<Action>(2); final List<Action> okActions = new ArrayList<Action>(2);
ConfirmationInfo confirmation = new ConfirmationInfo();
// Add server field
JLabel serverName = new JLabel("Server:");
final JTextField serverField = new JTextField(getConnectUrl());
messages.add(serverName);
messages.add(serverField);
okActions.add(new Action() {
public void perform() {
connectUrl = serverField.getText();
}
});
// hackje for focus // hackje for focus
final JTextField name = new JTextField(); final JTextField name = new JTextField();
confirmation.initialValue=name; final JPasswordField pass = new JPasswordField(JPasswordFieldLen);
for (int i = 0; i < callbacks.length; i++) { JLabel prompt = new JLabel("Username:");
if (callbacks[i] instanceof TextOutputCallback) { String defaultName = null;
TextOutputCallback tc = (TextOutputCallback) callbacks[i];
// if (check some property)
switch (tc.getMessageType()) { defaultName = "";
case TextOutputCallback.INFORMATION: if (defaultName != null) {
confirmation.messageType = JOptionPane.INFORMATION_MESSAGE; name.setText(defaultName);
break;
case TextOutputCallback.WARNING:
confirmation.messageType = JOptionPane.WARNING_MESSAGE;
break;
case TextOutputCallback.ERROR:
confirmation.messageType = JOptionPane.ERROR_MESSAGE;
break;
default:
throw new UnsupportedCallbackException(callbacks[i], "Unrecognized message type");
}
messages.add(new JLabel(tc.getMessage()));
} else if (callbacks[i] instanceof NameCallback) {
final NameCallback nc = (NameCallback) callbacks[i];
JLabel prompt = new JLabel(nc.getPrompt());
String defaultName = nc.getDefaultName();
// if (check some property)
defaultName = "";
if (defaultName != null) {
name.setText(defaultName);
}
// default to last user name
if (userName !=null ) {
name.setText(userName);
}
messages.add(prompt);
messages.add(name);
/* Store the name back into the callback if OK */
okActions.add(new Action() {
public void perform() {
nc.setName(name.getText());
}
});
} else if (callbacks[i] instanceof PasswordCallback) {
final PasswordCallback pc = (PasswordCallback) callbacks[i];
JLabel prompt = new JLabel(pc.getPrompt());
final JPasswordField password = new JPasswordField(JPasswordFieldLen);
if (!pc.isEchoOn()) {
password.setEchoChar('*');
}
messages.add(prompt);
messages.add(password);
okActions.add(new Action() {
public void perform() {
pc.setPassword(password.getPassword());
}
});
} else if (callbacks[i] instanceof ConfirmationCallback) {
ConfirmationCallback cc = (ConfirmationCallback) callbacks[i];
confirmation.setCallback(cc);
if (cc.getPrompt() != null) {
messages.add(new JLabel(cc.getPrompt()));
}
} else {
throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback");
}
} }
// default to last user name
if (username !=null ) {
name.setText(username);
}
messages.add(prompt);
messages.add(name);
/* Store the name back into the callback if OK */
okActions.add(new Action() {
public void perform() {
username = name.getText();
}
});
prompt = new JLabel("Password:");
//if (!pc.isEchoOn()) {
pass.setEchoChar('*');
//}
messages.add(prompt);
messages.add(pass);
okActions.add(new Action() {
public void perform() {
password = new String(pass.getPassword());
}
});
if (this.loginTry>1) { if (this.loginTry>1) {
JPanel messagesPanel = new JPanel(); JPanel messagesPanel = new JPanel();
@ -251,25 +221,17 @@ public class VascDemoUserLoginDialog implements CallbackHandler {
loginDesign.add(messagesPanel); loginDesign.add(messagesPanel);
/* Display the dialog */ /* Display the dialog */
Object[] options = null;
/// JOptionPane(Object message, int messageType, int optionType, Icon icon, Object[] options, Object initialValue) /// JOptionPane(Object message, int messageType, int optionType, Icon icon, Object[] options, Object initialValue)
JOptionPane jop = new JOptionPane(loginDesign, JOptionPane.PLAIN_MESSAGE,confirmation.optionType,null, JOptionPane jop = new JOptionPane(loginDesign, JOptionPane.PLAIN_MESSAGE,JOptionPane.OK_CANCEL_OPTION,null,options,name);
confirmation.options,confirmation.initialValue);
JDialog dialog = jop.createDialog(parentComponent,"Vasc Demo Login"); JDialog dialog = jop.createDialog(parentComponent,"Vasc Demo Login");
// We alway request focus after the windows gets focus // We alway request focus after the windows gets focus
dialog.addWindowFocusListener(new WindowFocusListener() { dialog.addWindowFocusListener(new WindowFocusListener() {
/**
* @see java.awt.event.WindowFocusListener#windowGainedFocus(java.awt.event.WindowEvent)
*/
public void windowGainedFocus(WindowEvent arg0) { public void windowGainedFocus(WindowEvent arg0) {
//System.out.println("request focus window focus"); name.requestFocus();
name.requestFocus();
} }
/**
* @see java.awt.event.WindowFocusListener#windowLostFocus(java.awt.event.WindowEvent)
*/
public void windowLostFocus(WindowEvent arg0) { public void windowLostFocus(WindowEvent arg0) {
} }
}); });
@ -299,10 +261,7 @@ public class VascDemoUserLoginDialog implements CallbackHandler {
// is null when escaping by window closing // is null when escaping by window closing
result = JOptionPane.CANCEL_OPTION; result = JOptionPane.CANCEL_OPTION;
} }
// copy user name for next try
userName = name.getText();
/* Perform the OK actions */ /* Perform the OK actions */
if (result == JOptionPane.OK_OPTION || result == JOptionPane.YES_OPTION) { if (result == JOptionPane.OK_OPTION || result == JOptionPane.YES_OPTION) {
Iterator<Action> iterator = okActions.iterator(); Iterator<Action> iterator = okActions.iterator();
@ -312,97 +271,34 @@ public class VascDemoUserLoginDialog implements CallbackHandler {
} else if (result == JOptionPane.CANCEL_OPTION || result == JOptionPane.NO_OPTION) { } else if (result == JOptionPane.CANCEL_OPTION || result == JOptionPane.NO_OPTION) {
System.exit(1); System.exit(1);
} }
confirmation.handleResult(result);
} }
/** /**
* Provides assistance with translating between JAAS and Swing confirmation * @return the username
* dialogs.
*/ */
private static class ConfirmationInfo { public String getUsername() {
return username;
private int[] translations; }
int optionType = JOptionPane.OK_CANCEL_OPTION; /**
Object[] options = null; * @return the password
Object initialValue = null; */
public String getPassword() {
int messageType = JOptionPane.QUESTION_MESSAGE; return password;
}
private ConfirmationCallback callback;
/**
/* Set the confirmation callback handler */ * @return the connectUrl
void setCallback(ConfirmationCallback callback) throws UnsupportedCallbackException { */
this.callback = callback; public String getConnectUrl() {
return connectUrl;
int confirmationOptionType = callback.getOptionType(); }
switch (confirmationOptionType) {
case ConfirmationCallback.YES_NO_OPTION: /**
optionType = JOptionPane.YES_NO_OPTION; * @param connectUrl the connectUrl to set
translations = new int[] { */
JOptionPane.YES_OPTION, ConfirmationCallback.YES, JOptionPane.NO_OPTION, ConfirmationCallback.NO, JOptionPane.CLOSED_OPTION, ConfirmationCallback.NO public void setConnectUrl(String connectUrl) {
}; this.connectUrl = connectUrl;
break;
case ConfirmationCallback.YES_NO_CANCEL_OPTION:
optionType = JOptionPane.YES_NO_CANCEL_OPTION;
translations = new int[] {
JOptionPane.YES_OPTION, ConfirmationCallback.YES, JOptionPane.NO_OPTION, ConfirmationCallback.NO, JOptionPane.CANCEL_OPTION,
ConfirmationCallback.CANCEL, JOptionPane.CLOSED_OPTION, ConfirmationCallback.CANCEL
};
break;
case ConfirmationCallback.OK_CANCEL_OPTION:
optionType = JOptionPane.OK_CANCEL_OPTION;
translations = new int[] {
JOptionPane.OK_OPTION, ConfirmationCallback.OK, JOptionPane.CANCEL_OPTION, ConfirmationCallback.CANCEL, JOptionPane.CLOSED_OPTION,
ConfirmationCallback.CANCEL
};
break;
case ConfirmationCallback.UNSPECIFIED_OPTION:
options = callback.getOptions();
/*
* There's no way to know if the default option means to
* cancel the login, but there isn't a better way to guess
* this.
*/
translations = new int[] {
JOptionPane.CLOSED_OPTION, callback.getDefaultOption()
};
break;
default:
throw new UnsupportedCallbackException(callback, "Unrecognized option type: " + confirmationOptionType);
}
int confirmationMessageType = callback.getMessageType();
switch (confirmationMessageType) {
case ConfirmationCallback.WARNING:
messageType = JOptionPane.WARNING_MESSAGE;
break;
case ConfirmationCallback.ERROR:
messageType = JOptionPane.ERROR_MESSAGE;
break;
case ConfirmationCallback.INFORMATION:
messageType = JOptionPane.INFORMATION_MESSAGE;
break;
default:
throw new UnsupportedCallbackException(callback, "Unrecognized message type: " + confirmationMessageType);
}
}
/* Process the result returned by the Swing dialog */
void handleResult(int result) {
if (callback == null) {
return;
}
for (int i = 0; i < translations.length; i += 2) {
if (translations[i] == result) {
result = translations[i + 1];
break;
}
}
callback.setSelectedIndex(result);
}
} }
} }

View file

@ -1,6 +0,0 @@
vasc-auth-client {
org.apache.openejb.client.ClientLoginModule required
debug=true
openejb.server.uri="http://localhost:8899/demo/ejb";
};

View file

@ -0,0 +1,13 @@
config.charset=UTF-8
config.bundles=bundle1
#,bundle2
# bundle list to merge and load
bundle1.uri=net.forwardfire.vasc.demo.client.swing.resources.VascDemoSwingClient
#bundle2.uri=data/vasc-bundle.properties
#bundle2.type=FILE
#bundle2.optional=true

View file

@ -0,0 +1,32 @@
#
# Copyright (c) 2011, Willem Cazander
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are permitted provided
# that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this list of conditions and the
# following disclaimer.
# * 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 THE COPYRIGHT HOLDERS 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
# THE COPYRIGHT HOLDER 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.
#
# Application's properties
Application.name = Vasc Demo Tech
Application.title = VascDemoTech
Application.vendor = Willem Cazander
Application.homepage = http://vasc.forwardfire.org/
Application.vendorId = vasc
Application.id = vascdemotech
Application.lookAndFeel = com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
#Application.icon = images/icon.png

View file

@ -9,11 +9,29 @@
<name>vasc-demo-tech-ejb3</name> <name>vasc-demo-tech-ejb3</name>
<description>vasc-demo-tech-ejb3</description> <description>vasc-demo-tech-ejb3</description>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>javax</groupId> <groupId>net.forwardfire.vasc</groupId>
<artifactId>javaee-api</artifactId> <artifactId>vasc-core</artifactId>
<version>${javaee-api.version}</version> <version>${project.version}</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>net.forwardfire.vasc</groupId>
<artifactId>vasc-core-ejb3-client</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.forwardfire.vasc.lib</groupId>
<artifactId>vasc-lib-i18n</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

View file

@ -37,9 +37,11 @@ import javax.naming.InitialContext;
import javax.naming.NamingException; import javax.naming.NamingException;
import javax.sql.DataSource; import javax.sql.DataSource;
import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryAccessType;
import net.forwardfire.vasc.core.VascEntryGroup;
import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenu; import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenu;
import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuComparator;
import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuGroupComparator;
import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuWebComparator; import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuWebComparator;
import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuGroup; import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuGroup;
import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuWeb; import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuWeb;
@ -54,17 +56,12 @@ import net.forwardfire.vasc.demo.tech.ejb3.menu.model.VascMenuWebType;
public class VascMenuControllerImpl implements VascMenuControllerLocal,VascMenuControllerRemote { public class VascMenuControllerImpl implements VascMenuControllerLocal,VascMenuControllerRemote {
private VascMenuWebComparator vascMenuWebComparator = null; private VascMenuWebComparator vascMenuWebComparator = null;
private VascMenuGroupComparator vascMenuGroupComparator = null;
private VascMenuComparator vascMenuComparator = null;
@Resource @Resource
private SessionContext session; private SessionContext session;
public VascMenuControllerImpl() { public VascMenuControllerImpl() {
vascMenuWebComparator = new VascMenuWebComparator(); vascMenuWebComparator = new VascMenuWebComparator();
vascMenuGroupComparator = new VascMenuGroupComparator();
vascMenuComparator = new VascMenuComparator();
} }
public List<VascMenuWeb> fetchVascMenuWeb() { public List<VascMenuWeb> fetchVascMenuWeb() {
@ -104,78 +101,7 @@ public class VascMenuControllerImpl implements VascMenuControllerLocal,VascMenuC
} }
return result; return result;
} }
public List<VascMenuGroup> fetchVascMenuGroup() {
List<VascMenuGroup> result = new ArrayList<VascMenuGroup>(50);
Connection connection = null;
try {
DataSource ds = getDataSource("openejb:Resource/jdbc/DemoManagerDataDS");
connection = ds.getConnection();
Statement s = connection.createStatement();
s.execute("SELECT * FROM VASC_MENU_GROUP");
ResultSet rs = s.getResultSet();
while (rs.next()) {
VascMenuGroup menu = new VascMenuGroup();
menu.setId(rs.getString(1));
menu.setTitle(rs.getString(2));
menu.setActive(rs.getBoolean(3));
menu.setRoles(rs.getString(4));
menu.setMenuOrder(rs.getInt(5));
if (filterVascMenuRoles(menu.getActive(),menu.getRoles())==false) {
continue;
}
result.add(menu);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection!=null) {
try {
connection.close();
} catch (Exception e) {
}
}
}
return result;
}
public List<VascMenu> fetchVascMenu() {
List<VascMenu> result = new ArrayList<VascMenu>(50);
Connection connection = null;
try {
DataSource ds = getDataSource("openejb:Resource/jdbc/DemoManagerDataDS");
connection = ds.getConnection();
Statement s = connection.createStatement();
s.execute("SELECT * FROM VASC_MENU");
ResultSet rs = s.getResultSet();
while (rs.next()) {
VascMenu menu = new VascMenu();
menu.setId(rs.getInt(1));
menu.setVascEntryId(rs.getString(2));
menu.setTitle(rs.getString(3));
menu.setActive(rs.getBoolean(4));
menu.setRoles(rs.getString(5));
menu.setMenuOrder(rs.getInt(6));
menu.setMenuGroup(rs.getString(7));
if (filterVascMenuRoles(menu.getActive(),menu.getRoles())==false) {
continue;
}
result.add(menu);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection!=null) {
try {
connection.close();
} catch (Exception e) {
}
}
}
return result;
}
private DataSource getDataSource(String name) throws SQLException { private DataSource getDataSource(String name) throws SQLException {
try { try {
@ -210,11 +136,28 @@ public class VascMenuControllerImpl implements VascMenuControllerLocal,VascMenuC
} }
public List<VascMenuGroup> getFilteredMenuGroup() { public List<VascMenuGroup> getFilteredMenuGroup() {
List<VascMenuGroup> result = fetchVascMenuGroup();
for (VascMenuGroup group:result) { VascController vc = null;
group.setMenus(getFilteredMenu(group.getId())); try {
Context initialContext = new InitialContext();
vc = (VascController)initialContext.lookup("openejb:Resource/vasc/server-tech");
} catch (Exception e) {
e.printStackTrace();
} }
Collections.sort(result,vascMenuGroupComparator);
List<VascMenuGroup> result = new ArrayList<VascMenuGroup>(20);
for (String groupdId:vc.getVascEntryController().getVascEntryGroupIds()) {
VascEntryGroup veg = vc.getVascEntryController().getVascEntryGroupById(groupdId);
if (filterVascMenuRoles(veg.getView(),veg.getRolesView())==false) {
continue;
}
VascMenuGroup group = new VascMenuGroup();
group.setId(veg.getId());
group.setTitleKey(veg.getName());
group.setMenus(getFilteredMenu(group.getId()));
result.add(group);
}
// Collections.sort(result,vascMenuGroupComparator);
return result; return result;
} }
@ -222,13 +165,33 @@ public class VascMenuControllerImpl implements VascMenuControllerLocal,VascMenuC
if (groupId==null) { if (groupId==null) {
throw new NullPointerException("Can't filter on null groupId."); throw new NullPointerException("Can't filter on null groupId.");
} }
List<VascMenu> result = new ArrayList<VascMenu>(15); VascController vc = null;
for (VascMenu menu:fetchVascMenu()) { try {
if (groupId.equals(menu.getMenuGroup())) { Context initialContext = new InitialContext();
result.add(menu); vc = (VascController)initialContext.lookup("openejb:Resource/vasc/server-tech");
} } catch (Exception e) {
e.printStackTrace();
} }
Collections.sort(result,vascMenuComparator); List<VascMenu> result = new ArrayList<VascMenu>(15);
for (String vascEntryId:vc.getVascEntryController().getVascEntryByGroupId(groupId)) {
VascEntry ve = vc.getVascEntryController().getVascEntryById(vascEntryId);
if (ve.getAccessType()!=null && (
ve.getAccessType()==VascEntryAccessType.ENTRY_LINK |
ve.getAccessType()==VascEntryAccessType.ENTRY_LIST
)
) {
continue;
}
if (filterVascMenuRoles(ve.getView(),ve.getRolesView())==false) {
continue;
}
VascMenu menu = new VascMenu();
menu.setVascEntryId(ve.getId());
menu.setVascGroupId(ve.getVascGroupId());
menu.setTitleKey(ve.getName());
result.add(menu);
}
// Collections.sort(result,vascMenuComparator);
return result; return result;
} }

View file

@ -33,109 +33,43 @@ import java.io.Serializable;
public class VascMenu implements Serializable { public class VascMenu implements Serializable {
private static final long serialVersionUID = 5087600835051760512L; private static final long serialVersionUID = 5087600835051760512L;
private Integer id = null;
private String vascEntryId = null; private String vascEntryId = null;
private String title = null; private String titleKey = null;
private Boolean active = null; private String vascGroupId = null;
private String roles = null;
private Integer menuOrder = null;
private String menuGroup = null;
/**
* @return the id
*/
public Integer getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(Integer id) {
this.id = id;
}
/** /**
* @return the vascEntryId * @return the vascEntryId
*/ */
public String getVascEntryId() { public String getVascEntryId() {
return vascEntryId; return vascEntryId;
} }
/** /**
* @param vascEntryId the vascEntryId to set * @param vascEntryId the vascEntryId to set
*/ */
public void setVascEntryId(String vascEntryId) { public void setVascEntryId(String vascEntryId) {
this.vascEntryId = vascEntryId; this.vascEntryId = vascEntryId;
} }
/** /**
* @return the title * @return the titleKey
*/ */
public String getTitle() { public String getTitleKey() {
return title; return titleKey;
} }
/** /**
* @param title the title to set * @param titleKey the titleKey to set
*/ */
public void setTitle(String title) { public void setTitleKey(String titleKey) {
this.title = title; this.titleKey = titleKey;
} }
/** /**
* @return the active * @return the vascGroupId
*/ */
public Boolean getActive() { public String getVascGroupId() {
return active; return vascGroupId;
} }
/** /**
* @param active the active to set * @param vascGroupId the vascGroupId to set
*/ */
public void setActive(Boolean active) { public void setVascGroupId(String vascGroupId) {
this.active = active; this.vascGroupId = vascGroupId;
}
/**
* @return the roles
*/
public String getRoles() {
return roles;
}
/**
* @param roles the roles to set
*/
public void setRoles(String roles) {
this.roles = roles;
}
/**
* @return the menuOrder
*/
public Integer getMenuOrder() {
return menuOrder;
}
/**
* @param menuOrder the menuOrder to set
*/
public void setMenuOrder(Integer menuOrder) {
this.menuOrder = menuOrder;
}
/**
* @return the menuGroup
*/
public String getMenuGroup() {
return menuGroup;
}
/**
* @param menuGroup the menuGroup to set
*/
public void setMenuGroup(String menuGroup) {
this.menuGroup = menuGroup;
} }
} }

View file

@ -35,10 +35,7 @@ public class VascMenuGroup implements Serializable {
private static final long serialVersionUID = -9154803561816570868L; private static final long serialVersionUID = -9154803561816570868L;
private String id = null; private String id = null;
private String title = null; private String titleKey = null;
private Boolean active = null;
private String roles = null;
private Integer menuOrder = null;
private List<VascMenu> menus = null; private List<VascMenu> menus = null;
/** /**
@ -54,61 +51,19 @@ public class VascMenuGroup implements Serializable {
public void setId(String id) { public void setId(String id) {
this.id = id; this.id = id;
} }
/**
* @return the titleKey
*/
public String getTitleKey() {
return titleKey;
}
/** /**
* @return the title * @param titleKey the titleKey to set
*/ */
public String getTitle() { public void setTitleKey(String titleKey) {
return title; this.titleKey = titleKey;
}
/**
* @param title the title to set
*/
public void setTitle(String title) {
this.title = title;
}
/**
* @return the active
*/
public Boolean getActive() {
return active;
}
/**
* @param active the active to set
*/
public void setActive(Boolean active) {
this.active = active;
}
/**
* @return the roles
*/
public String getRoles() {
return roles;
}
/**
* @param roles the roles to set
*/
public void setRoles(String roles) {
this.roles = roles;
}
/**
* @return the menuOrder
*/
public Integer getMenuOrder() {
return menuOrder;
}
/**
* @param menuOrder the menuOrder to set
*/
public void setMenuOrder(Integer menuOrder) {
this.menuOrder = menuOrder;
} }
/** /**

View file

@ -0,0 +1,22 @@
package net.forwardfire.vasc.demo.tech.ejb3.user;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public interface ClientUserController {
String doClientLogin();
Map<String,String> getResourceBundle(Locale locale);
List<Locale> getResourceBundleLocales();
/*
void doClientLogout();
User getUser() throws Exception;
List<RightRole> getClientRoles() throws Exception;
*/
}

View file

@ -1,12 +1,19 @@
package net.forwardfire.vasc.demo.tech.ejb3.user; package net.forwardfire.vasc.demo.tech.ejb3.user;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.annotation.security.RolesAllowed; import javax.annotation.security.RolesAllowed;
import javax.ejb.SessionContext; import javax.ejb.SessionContext;
import javax.ejb.Stateless; import javax.ejb.Stateless;
@Stateless(name="loginUserController") import net.forwardfire.vasc.lib.i18n.bundle.RootApplicationBundle;
public class LoginUserControllerImpl implements LoginUserControllerLocal,LoginUserControllerRemote {
@Stateless(name="clientUserController")
public class ClientUserControllerImpl implements ClientUserControllerLocal,ClientUserControllerRemote {
@Resource @Resource
private SessionContext session; private SessionContext session;
@ -54,4 +61,22 @@ public class LoginUserControllerImpl implements LoginUserControllerLocal,LoginUs
return u.getUsername(); return u.getUsername();
*/ */
} }
public Map<String,String> getResourceBundle(Locale locale) {
ResourceBundle bundle = ResourceBundle.getBundle(RootApplicationBundle.class.getName(), locale);
if (bundle instanceof RootApplicationBundle) {
RootApplicationBundle appBundle = (RootApplicationBundle)bundle;
return appBundle.getBundleData();
}
throw new IllegalStateException("Loaded bundle: "+bundle+" is not RootApplicationBundle.");
}
public List<Locale> getResourceBundleLocales() {
ResourceBundle bundle = ResourceBundle.getBundle(RootApplicationBundle.class.getName());
if (bundle instanceof RootApplicationBundle) {
RootApplicationBundle appBundle = (RootApplicationBundle)bundle;
return appBundle.getApplicationSupportedLocales();
}
throw new IllegalStateException("Loaded bundle: "+bundle+" is not RootApplicationBundle.");
}
} }

View file

@ -3,6 +3,6 @@ package net.forwardfire.vasc.demo.tech.ejb3.user;
import javax.ejb.Local; import javax.ejb.Local;
@Local @Local
public interface LoginUserControllerLocal extends LoginUserController { public interface ClientUserControllerLocal extends ClientUserController {
} }

View file

@ -3,6 +3,6 @@ package net.forwardfire.vasc.demo.tech.ejb3.user;
import javax.ejb.Remote; import javax.ejb.Remote;
@Remote @Remote
public interface LoginUserControllerRemote extends LoginUserController { public interface ClientUserControllerRemote extends ClientUserController {
} }

View file

@ -1,21 +0,0 @@
package net.forwardfire.vasc.demo.tech.ejb3.user;
import java.util.List;
import java.util.Map;
import javax.ejb.Local;
import javax.ejb.Remote;
public interface LoginUserController {
public String doClientLogin();
/*
public void doClientLogout();
public User getUser() throws Exception;
public List<RightRole> getClientRoles() throws Exception;
*/
}

View file

@ -39,21 +39,7 @@
<version>${project.version}</version> <version>${project.version}</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!-- <dependency>
<dependency>
<groupId>net.forwardfire.vasc</groupId>
<artifactId>vasc-xpql-ejb3-server</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.forwardfire.vasc</groupId>
<artifactId>vasc-core-ejb3-server</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
-->
<dependency>
<groupId>javax</groupId> <groupId>javax</groupId>
<artifactId>javaee-api</artifactId> <artifactId>javaee-api</artifactId>
<version>${javaee-api.version}</version> <version>${javaee-api.version}</version>

View file

@ -32,7 +32,7 @@ import javax.naming.Context;
import javax.naming.InitialContext; import javax.naming.InitialContext;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import net.forwardfire.vasc.demo.tech.ejb3.user.LoginUserController; import net.forwardfire.vasc.demo.tech.ejb3.user.ClientUserController;
import net.forwardfire.vasc.demo.tech.web.models.WebUser; import net.forwardfire.vasc.demo.tech.web.models.WebUser;
/** /**

View file

@ -12,10 +12,10 @@
<transaction-type>Container</transaction-type> <transaction-type>Container</transaction-type>
</session> </session>
<session> <session>
<ejb-name>loginUserController</ejb-name> <ejb-name>clientUserController</ejb-name>
<business-local>net.forwardfire.vasc.demo.tech.ejb3.user.LoginUserControllerLocal</business-local> <business-local>net.forwardfire.vasc.demo.tech.ejb3.user.ClientUserControllerLocal</business-local>
<business-remote>net.forwardfire.vasc.demo.tech.ejb3.user.LoginUserControllerRemote</business-remote> <business-remote>net.forwardfire.vasc.demo.tech.ejb3.user.ClientUserControllerRemote</business-remote>
<ejb-class>net.forwardfire.vasc.demo.tech.ejb3.user.LoginUserControllerImpl</ejb-class> <ejb-class>net.forwardfire.vasc.demo.tech.ejb3.user.ClientUserControllerImpl</ejb-class>
<session-type>Stateless</session-type> <session-type>Stateless</session-type>
<transaction-type>Container</transaction-type> <transaction-type>Container</transaction-type>
</session> </session>

View file

@ -8,11 +8,11 @@
<ui:repeat var="menuGroup" value="#{menuController.vascMenuGroup}"> <ui:repeat var="menuGroup" value="#{menuController.vascMenuGroup}">
<div id="body-deco-menu-group"> <div id="body-deco-menu-group">
<h4> <h4>
<span><h:outputText value="#{menuGroup.title}"/></span> <span><h:outputText value="#{i18n[menuGroup.titleKey]}"/></span>
</h4> </h4>
<ul> <ul>
<ui:repeat var="menu" value="#{menuGroup.menus}"> <ui:repeat var="menu" value="#{menuGroup.menus}">
<li><a href="#{contextPathController.rootPath}/vasc/#{menu.vascEntryId}/list,jsf" title="#{menu.title}">#{menu.title}</a></li> <li><a href="#{contextPathController.rootPath}/vasc/#{menu.vascEntryId}/list,jsf" title="#{i18n[menu.titleKey]}">#{i18n[menu.titleKey]}</a></li>
</ui:repeat> </ui:repeat>
</ul> </ul>
</div> </div>

View file

@ -22,38 +22,25 @@
package net.forwardfire.vasc.frontend.web.jsf; package net.forwardfire.vasc.frontend.web.jsf;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Collections; import java.util.Collections;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import javax.faces.context.FacesContext;
import javax.naming.Context; import javax.naming.Context;
import javax.naming.InitialContext; import javax.naming.InitialContext;
import net.forwardfire.vasc.backend.VascBackend; import net.forwardfire.vasc.backend.VascBackend;
import net.forwardfire.vasc.backend.VascBackendControllerLocal; import net.forwardfire.vasc.backend.VascBackendControllerLocal;
import net.forwardfire.vasc.backend.VascBackendState;
import net.forwardfire.vasc.backend.proxy.VascBackendProxyEventExecutor; import net.forwardfire.vasc.backend.proxy.VascBackendProxyEventExecutor;
import net.forwardfire.vasc.core.VascController; import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryControllerLocal; import net.forwardfire.vasc.core.VascEntryControllerLocal;
import net.forwardfire.vasc.core.VascEntryField;
import net.forwardfire.vasc.core.VascEntryLocal; import net.forwardfire.vasc.core.VascEntryLocal;
import net.forwardfire.vasc.core.VascException;
import net.forwardfire.vasc.core.entry.VascEntryFieldValue;
import net.forwardfire.vasc.core.entry.VascEntryFrontendEventListener;
import net.forwardfire.vasc.core.entry.VascEntryRecordCreator;
import net.forwardfire.vasc.ejb3.VascServiceManager; import net.forwardfire.vasc.ejb3.VascServiceManager;
import net.forwardfire.vasc.frontend.VascFrontendController; import net.forwardfire.vasc.ejb3.VascServiceRemoteBackend;
import net.forwardfire.vasc.impl.DefaultVascFactory; import net.forwardfire.vasc.impl.DefaultVascFactory;
import net.forwardfire.vasc.impl.entry.DefaultVascEntryResourceResolver;
import net.forwardfire.vasc.impl.entry.SetParameterBackendListener; import net.forwardfire.vasc.impl.entry.SetParameterBackendListener;
@ -166,174 +153,6 @@ abstract public class AbstractJSFVascFacesControllerEJB extends AbstractJSFVascF
* @return * @return
*/ */
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 startBackend() {
}
public void stopBackend() {
}
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) {
VascEntryLocal clone = null;
try {
clone = ((VascEntryLocal)vascEntry).clone();
clone.setVascFrontendController(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;
}
public boolean isReadOnly() {
return false;
}
}
/** /**
* @return the vascController * @return the vascController
@ -370,7 +189,7 @@ abstract public class AbstractJSFVascFacesControllerEJB extends AbstractJSFVascF
for (String id:entryIds) { for (String id:entryIds) {
VascEntryLocal ve = (VascEntryLocal)vascManager.getVascEntry(id); VascEntryLocal ve = (VascEntryLocal)vascManager.getVascEntry(id);
String backendId = ve.getBackendId(); String backendId = ve.getBackendId();
VascBackend vb = new RemoteVascBackend(backendId,vascManager); VascBackend vb = new VascServiceRemoteBackend(vascManager,backendId);
for (String key:ve.getEntryParameterKeys()) { for (String key:ve.getEntryParameterKeys()) {
Object value = ve.getEntryParameter(key); Object value = ve.getEntryParameter(key);

View file

@ -59,6 +59,15 @@ public class MergeableResourceBundle extends ResourceBundle {
bundleData.clear(); bundleData.clear();
} }
/**
* Returns copy of data of this loaded merged bundle.
*/
public Map<String,String> getBundleData() {
Map<String,String> result = new HashMap<String,String>(bundleData.size());
result.putAll(bundleData);
return result;
}
/** /**
* @see java.util.ResourceBundle#handleGetObject(java.lang.String) * @see java.util.ResourceBundle#handleGetObject(java.lang.String)
*/ */

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_by extends AbstractRootApplicationBundle { public class RootApplicationBundle_by extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_da extends AbstractRootApplicationBundle { public class RootApplicationBundle_da extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_de extends AbstractRootApplicationBundle { public class RootApplicationBundle_de extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_en extends AbstractRootApplicationBundle { public class RootApplicationBundle_en extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_es extends AbstractRootApplicationBundle { public class RootApplicationBundle_es extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_fr extends AbstractRootApplicationBundle { public class RootApplicationBundle_fr extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_it extends AbstractRootApplicationBundle { public class RootApplicationBundle_it extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_nl extends AbstractRootApplicationBundle { public class RootApplicationBundle_nl extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_pl extends AbstractRootApplicationBundle { public class RootApplicationBundle_pl extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_pt extends AbstractRootApplicationBundle { public class RootApplicationBundle_pt extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

View file

@ -22,7 +22,6 @@
package net.forwardfire.vasc.lib.i18n.bundle; package net.forwardfire.vasc.lib.i18n.bundle;
import net.forwardfire.vasc.lib.i18n.AbstractRootApplicationBundle;
import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale; import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
/** /**
@ -31,7 +30,7 @@ import net.forwardfire.vasc.lib.i18n.SupportedBundleLocale;
* @author Willem Cazander * @author Willem Cazander
* @version 1.0 Mar 8, 2012 * @version 1.0 Mar 8, 2012
*/ */
public class RootApplicationBundle_ro extends AbstractRootApplicationBundle { public class RootApplicationBundle_ro extends RootApplicationBundle {
@Override @Override
public SupportedBundleLocale getSupportedBundleLocale() { public SupportedBundleLocale getSupportedBundleLocale() {

Some files were not shown because too many files have changed in this diff Show more