use of com.servoy.j2db.persistence.Table in project servoy-client by Servoy.
the class JSSolutionModel method getRelations.
/**
* @clonedesc getRelations(String)
* @sampleas getRelations(String)
* @param servername the specified name of the server for the specified table
* @param tablename the specified name of the table
*
* @return an array of all relations (all elements in the array are of type JSRelation)
*/
@JSFunction
public JSRelation[] getRelations(String servername, String tablename) {
FlattenedSolution fs = application.getFlattenedSolution();
try {
Table primaryTable = null;
if (servername != null && tablename != null) {
IServer primaryServer = fs.getSolution().getServer(servername);
if (primaryServer == null)
throw new RuntimeException("can't list relations, primary server not found: " + servername);
primaryTable = (Table) primaryServer.getTable(tablename);
if (primaryTable == null)
throw new RuntimeException("can't list relations, primary table not found: " + tablename);
}
List<JSRelation> relations = new ArrayList<JSRelation>();
Iterator<Relation> iterator = fs.getRelations(primaryTable, true, true);
while (iterator.hasNext()) {
Relation relation = iterator.next();
if (((primaryTable == null) == relation.isGlobal()) && !relation.isInternal()) {
relations.add(new JSRelation(relation, application, false));
}
}
return relations.toArray(new JSRelation[relations.size()]);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
use of com.servoy.j2db.persistence.Table in project servoy-client by Servoy.
the class LocalePreferences method fillTableCombo.
// @Override
// public void setVisible(boolean v)
// {
// super.setVisible(v);
// try
// {
// if (_application.isInDeveloper() && v && _cbTable != null && _cbTable.getModel().getSize() <= 1)
// {
// Object selected = _cbTable.getSelectedItem();
// String serverName = (String)_cbServer.getSelectedItem();
// fillTableCombo(SELECTION_NONE.equals(serverName) ? null : _application.getRepository().getServer(serverName));
// _cbTable.setSelectedItem(selected);
// }
// }
// catch (Exception e1)
// {
// Debug.error(e1);
// }
// }
/**
* @param server
* @throws RepositoryException
* @throws RemoteException
*/
private void fillTableCombo(IServer server) throws RepositoryException, RemoteException {
if (server == null) {
_cbTable.setModel(new DefaultComboBoxModel(new String[] { SELECTION_NONE }));
} else {
List al = new ArrayList();
al.add(SELECTION_NONE);
List lst = ((IServerInternal) server).getTableAndViewNames(true, true);
for (int i = 0; i < lst.size(); i++) {
String tableName = (String) lst.get(i);
Table table = (Table) server.getTable(tableName);
// $NON-NLS-1$
if (table.getColumnInfoID("message_key") == -1)
continue;
// $NON-NLS-1$
if (table.getColumnInfoID("message_value") == -1)
continue;
// $NON-NLS-1$
if (table.getColumnInfoID("message_language") == -1)
continue;
al.add(tableName);
}
DefaultComboBoxModel model = new DefaultComboBoxModel(al.toArray());
_cbTable.setModel(model);
}
}
use of com.servoy.j2db.persistence.Table in project servoy-client by Servoy.
the class TableView method setSortStatus.
public boolean setSortStatus(IFoundSetInternal foundset) {
if (foundset != null) {
List<SortColumn> sortCols = foundset.getSortColumns();
if (sortCols != null && sortCols.size() > 0) {
boolean found = false;
for (SortColumn sc : sortCols) {
for (int i = 0; (i < getColumnModel().getColumnCount()); i++) {
TableColumn tc = getColumnModel().getColumn(i);
if (tc instanceof CellAdapter) {
CellAdapter ca = (CellAdapter) tc;
if (ca.getDataProviderID() != null) {
List<String> sortingProviders = null;
Component renderer = ca.getRenderer();
if (renderer instanceof ISupportValueList && ((ISupportValueList) renderer).getValueList() != null) {
try {
sortingProviders = DBValueList.getShowDataproviders(((ISupportValueList) renderer).getValueList().getValueList(), (Table) foundset.getTable(), ca.getDataProviderID(), application.getFoundSetManager());
} catch (RepositoryException ex) {
Debug.error(ex);
}
}
if (sortingProviders == null) {
// no related sort, use sort on dataProviderID instead
sortingProviders = Collections.singletonList(ca.getDataProviderID());
}
for (String sortingProvider : sortingProviders) {
SortColumn existingSc;
try {
FoundSetManager fsm = (FoundSetManager) foundset.getFoundSetManager();
existingSc = fsm.getSortColumn(foundset.getTable(), sortingProvider, false);
} catch (Exception e) {
Debug.error(e);
continue;
}
if (sc.equalsIgnoreSortorder(existingSc)) {
if (!found) {
// clear old sort
updateSortStatus(-1, true);
}
found = true;
updateSortStatus(ca.getModelIndex(), sc.getSortOrder() == SortColumn.ASCENDING);
}
}
}
}
}
}
return found;
}
}
return false;
}
use of com.servoy.j2db.persistence.Table in project servoy-client by Servoy.
the class ScrollResponseHeaderContainer method tableChanged.
/**
* @see javax.swing.event.TableModelListener#tableChanged(javax.swing.event.TableModelEvent)
*/
public void tableChanged(TableModelEvent e) {
// as changed, as it will be faster on the client the component replace
if ((e.getType() == TableModelEvent.UPDATE) && (e.getFirstRow() == e.getLastRow()) && (nrUpdatedListItems < 20)) {
Component component = table.get(Integer.toString(e.getFirstRow()));
if (component instanceof ListItem) {
((ListItem) component).visitChildren(IProviderStylePropertyChanges.class, new IVisitor<Component>() {
public Object component(Component comp) {
if ((comp instanceof IDisplayData) || !(comp instanceof ILabel)) {
if (comp instanceof ISupportsNeedEntireState && ((ISupportsNeedEntireState) comp).needEntireState()) {
// it if has tags - mark as changed; it could be enhanced further by also know what was last-rendered on tags, not just simple dataproviders
((IProviderStylePropertyChanges) comp).getStylePropertyChanges().setChanged();
} else {
// try to mark cells as changed only if there was a real value change; otherwise there is no use to replace the whole row...
checkForValueChanges(comp);
}
}
// else labels/buttons that don't display data are not changed
return CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
}
});
nrUpdatedListItems++;
IModel<IRecordInternal> newModel = table.getListItemModel(table.getModel(), e.getFirstRow());
IModel oldModel = ((ListItem) component).getModel();
if (newModel != null && oldModel != null && newModel.getObject() != null && !newModel.getObject().equals(oldModel.getObject())) {
// refresh model if it changed
((ListItem) component).setModel(newModel);
}
}
} else {
if (!isRendering && (!isScrollMode() || !(scrollBehavior != null && scrollBehavior.isGettingRows()))) {
if (isScrollMode())
resetScrollParams();
getStylePropertyChanges().setValueChanged();
}
}
// This is just an heuristic for filtering out the sort event from all table changed events that are raised.
if (currentData != null && e.getColumn() == TableModelEvent.ALL_COLUMNS && e.getFirstRow() == 0 && elementToColumnHeader.size() > 0) {
List<SortColumn> sortCols = currentData.getSortColumns();
if (sortCols != null && sortCols.size() > 0) {
Map<String, Boolean> sortMap = new HashMap<String, Boolean>();
for (IPersist persist : elementToColumnHeader.keySet()) {
SortableCellViewHeader sortableCellViewHeader = (SortableCellViewHeader) elementToColumnHeader.get(persist);
sortableCellViewHeader.setResizeImage(R_ARROW_OFF);
}
for (SortColumn sc : sortCols) {
for (IPersist persist : elementToColumnHeader.keySet()) {
Component comp = elementToColumnIdentifierComponent.get(persist);
SortableCellViewHeader sortableCellViewHeader = (SortableCellViewHeader) elementToColumnHeader.get(persist);
if (comp instanceof IDisplayData && ((IDisplayData) comp).getDataProviderID() != null) {
IDisplayData dispComp = (IDisplayData) comp;
List<String> sortingProviders = null;
if (dispComp instanceof ISupportValueList && ((ISupportValueList) dispComp).getValueList() != null) {
try {
sortingProviders = DBValueList.getShowDataproviders(((ISupportValueList) dispComp).getValueList().getValueList(), (Table) currentData.getTable(), dispComp.getDataProviderID(), currentData.getFoundSetManager());
} catch (RepositoryException ex) {
Debug.error(ex);
}
}
if (sortingProviders == null) {
// no related sort, use sort on dataProviderID instead
sortingProviders = Collections.singletonList(dispComp.getDataProviderID());
}
for (String sortingProvider : sortingProviders) {
SortColumn existingSc;
try {
FoundSetManager fsm = (FoundSetManager) currentData.getFoundSetManager();
existingSc = fsm.getSortColumn(currentData.getTable(), sortingProvider, false);
} catch (RepositoryException ex) {
Debug.error(ex);
continue;
}
if (sc.equalsIgnoreSortorder(existingSc)) {
boolean descending = sc.getSortOrder() == SortColumn.DESCENDING;
sortableCellViewHeader.setResizeImage(descending ? R_ARROW_UP : R_ARROW_DOWN);
sortMap.put(sortableCellViewHeader.getId(), Boolean.valueOf(!descending));
}
}
}
}
}
headers.recordSort(sortMap);
}
}
MainPage mp = table.findParent(MainPage.class);
if (mp != null)
mp.triggerBrowserRequestIfNeeded();
}
use of com.servoy.j2db.persistence.Table in project servoy-client by Servoy.
the class FoundsetTest method setupData.
@Override
protected void setupData() throws ServoyException {
BufferedDataSet ds = new BufferedDataSet(new String[] { "pk", "test1", "test2" }, new int[] { IColumnTypes.INTEGER, IColumnTypes.TEXT, IColumnTypes.TEXT });
ds.addRow(new Object[] { Integer.valueOf(1), "value1", "value2" });
ds.addRow(new Object[] { Integer.valueOf(2), "value3", "value4" });
ds.addRow(new Object[] { Integer.valueOf(3), "value1", "value2" });
ds.addRow(new Object[] { Integer.valueOf(4), "value3", "value4" });
ds.addRow(new Object[] { Integer.valueOf(5), "value1", "value2" });
ds.addRow(new Object[] { Integer.valueOf(6), "value3", "value4" });
ds.addRow(new Object[] { Integer.valueOf(7), "value1", "value2" });
ds.addRow(new Object[] { Integer.valueOf(8), "value3", "value4" });
ds.addRow(new Object[] { Integer.valueOf(9), "value1", "value2" });
ds.addRow(new Object[] { Integer.valueOf(10), "value3", "value4" });
ds.addRow(new Object[] { Integer.valueOf(11), "value1", "value2" });
ds.addRow(new Object[] { Integer.valueOf(12), "value3", "value4" });
ds.addRow(new Object[] { Integer.valueOf(13), "value1", "value2" });
ds.addRow(new Object[] { Integer.valueOf(14), "value3", "value4" });
ds.addRow(new Object[] { Integer.valueOf(15), "value1", "value2" });
ds.addRow(new Object[] { Integer.valueOf(16), "value3", "value4" });
ds.addRow(new Object[] { Integer.valueOf(17), "value1", "value2" });
ds.addRow(new Object[] { Integer.valueOf(18), "value3", "value4" });
client.getFoundSetManager().insertToDataSource("test", ds, null, new WrappedObjectReference<String[]>(new String[] { "pk" }), true, false);
BufferedDataSet separateDSs = new BufferedDataSet(new String[] { "pk", "test1", "test2" }, new int[] { IColumnTypes.INTEGER, IColumnTypes.TEXT, IColumnTypes.TEXT });
for (int i = 0; i < 943; i++) {
separateDSs.addRow(new Object[] { Integer.valueOf(i), "value" + i + "0", "value" + i + "1" });
}
client.getFoundSetManager().insertToDataSource("testseparatefoundset", separateDSs, null, new WrappedObjectReference<String[]>(new String[] { "pk" }), true, false);
BufferedDataSet relatedDS = new BufferedDataSet(new String[] { "relatedtestpk", "testpk", "relatedtest1", "relatedtest2" }, new int[] { IColumnTypes.INTEGER, IColumnTypes.INTEGER, IColumnTypes.TEXT, IColumnTypes.TEXT });
relatedDS.addRow(new Object[] { Integer.valueOf(1), Integer.valueOf(1), "relatedvalue111", "relatedvalue112" });
relatedDS.addRow(new Object[] { Integer.valueOf(2), Integer.valueOf(1), "relatedvalue121", "relatedvalue122" });
relatedDS.addRow(new Object[] { Integer.valueOf(3), Integer.valueOf(1), "relatedvalue131", "relatedvalue132" });
relatedDS.addRow(new Object[] { Integer.valueOf(4), Integer.valueOf(2), "relatedvalue241", "relatedvalue242" });
relatedDS.addRow(new Object[] { Integer.valueOf(5), Integer.valueOf(1), "relatedvalue111", "relatedvalue112" });
relatedDS.addRow(new Object[] { Integer.valueOf(6), Integer.valueOf(1), "relatedvalue121", "relatedvalue122" });
relatedDS.addRow(new Object[] { Integer.valueOf(7), Integer.valueOf(1), "relatedvalue131", "relatedvalue132" });
relatedDS.addRow(new Object[] { Integer.valueOf(8), Integer.valueOf(2), "relatedvalue241", "relatedvalue242" });
relatedDS.addRow(new Object[] { Integer.valueOf(9), Integer.valueOf(1), "relatedvalue111", "relatedvalue112" });
relatedDS.addRow(new Object[] { Integer.valueOf(10), Integer.valueOf(1), "relatedvalue121", "relatedvalue122" });
relatedDS.addRow(new Object[] { Integer.valueOf(11), Integer.valueOf(1), "relatedvalue131", "relatedvalue132" });
relatedDS.addRow(new Object[] { Integer.valueOf(12), Integer.valueOf(2), "relatedvalue241", "relatedvalue242" });
relatedDS.addRow(new Object[] { Integer.valueOf(13), Integer.valueOf(1), "relatedvalue111", "relatedvalue112" });
relatedDS.addRow(new Object[] { Integer.valueOf(14), Integer.valueOf(1), "relatedvalue121", "relatedvalue122" });
relatedDS.addRow(new Object[] { Integer.valueOf(15), Integer.valueOf(1), "relatedvalue131", "relatedvalue132" });
relatedDS.addRow(new Object[] { Integer.valueOf(16), Integer.valueOf(2), "relatedvalue241", "relatedvalue242" });
client.getFoundSetManager().insertToDataSource("relatedtest", relatedDS, null, new WrappedObjectReference<String[]>(new String[] { "relatedtestpk" }), true, false);
ConcurrentHashMap<String, IServer> serverProxies = new ConcurrentHashMap<String, IServer>();
serverProxies.put("_sv_inmem", DUMMY_ISERVER);
solution.setServerProxies(serverProxies);
Relation relation = solution.createNewRelation(validator, "test_to_relatedtest", "mem:test", "mem:relatedtest", LEFT_OUTER_JOIN);
Column primaryColumn = ((Table) client.getFoundSetManager().getTable(relation.getPrimaryDataSource())).getColumn("pk");
Column foreignColumn = ((Table) client.getFoundSetManager().getTable(relation.getForeignDataSource())).getColumn("testpk");
relation.createNewRelationItem(client.getFoundSetManager(), primaryColumn, IBaseSQLCondition.EQUALS_OPERATOR, foreignColumn);
}
Aggregations