use of com.servoy.j2db.util.ServoyException in project servoy-client by Servoy.
the class RuntimeWebComponentTest method fillTestSolution.
@Override
protected void fillTestSolution() throws ServoyException {
try {
Form form = solution.createNewForm(validator, null, "testForm", null, false, new Dimension(600, 400));
form.createNewWebComponent("testComponent", "my-component");
form.setNavigatorID(-1);
} catch (JSONException e) {
e.printStackTrace();
throw new ServoyException();
}
}
use of com.servoy.j2db.util.ServoyException in project servoy-client by Servoy.
the class ServoyApiObject method getDataSetByQuery.
/**
* Performs a sql query with a query builder object.
* Will throw an exception if anything did go wrong when executing the query.
* Will use any data filter defined on table.
*
* @sample
* var dataset = servoyApi.getDataSetByQuery(qbselect, 10);
*
* @param query QBSelect query.
* @param max_returned_rows The maximum number of rows returned by the query.
*
* @return The JSDataSet containing the results of the query.
*/
@JSFunction
public JSDataSet getDataSetByQuery(QBSelect query, Number max_returned_rows) {
int _max_returned_rows = Utils.getAsInteger(max_returned_rows);
String serverName = DataSourceUtils.getDataSourceServerName(query.getDataSource());
if (serverName == null)
throw new RuntimeException(new ServoyException(ServoyException.InternalCodes.SERVER_NOT_FOUND, new Object[] { query.getDataSource() }));
QuerySelect select = query.build();
try {
return new JSDataSet(app, ((FoundSetManager) app.getFoundSetManager()).getDataSetByQuery(serverName, select, true, _max_returned_rows));
} catch (ServoyException e) {
throw new RuntimeException(e);
}
}
use of com.servoy.j2db.util.ServoyException in project servoy-client by Servoy.
the class WebFormManager method reload.
public void reload(FormController[] fcontrollers) {
HashSet<MainPage> mainPages = new HashSet<MainPage>();
for (FormController fc : fcontrollers) {
WebForm formUI = (WebForm) fc.getFormUI();
MainPage mp = formUI.findParent(MainPage.class);
if (mp != null && mainPages.add(mp)) {
mp.setVersioned(false);
mp.setMainPageSwitched();
}
}
String navigatorName = null;
Set<MainPage> parents = new HashSet<MainPage>();
for (FormController fp : fcontrollers) {
if (fp != null) {
boolean formVisible = fp.isFormVisible();
IFoundSetInternal foundset = fp.getFormModel();
WebForm wf = (WebForm) fp.getFormUI();
MarkupContainer wfParent = wf.getParent();
boolean refresh = false;
// datasource has changed, but foundset has not
if (foundset != null && !Utils.equalObjects(foundset.getDataSource(), fp.getDataSource())) {
try {
foundset = (getApplication()).getFoundSetManager().getSharedFoundSet(fp.getDataSource());
foundset.loadAllRecords();
refresh = true;
} catch (ServoyException e) {
// $NON-NLS-1$
Debug.error("Failed to reload foundset.", e);
}
}
MainPage page = wf.findParent(MainPage.class);
try {
if (page != null) {
page.setTempRemoveMainForm(true);
}
fp.destroy();
} finally {
if (page != null) {
page.setTempRemoveMainForm(false);
}
}
while (wfParent != null && !(wfParent instanceof IWebFormContainer) && !(wfParent.getParent() instanceof MainPage) && !(wfParent.getParent() instanceof WebForm)) {
wfParent = wfParent.getParent();
}
if (wfParent instanceof IWebFormContainer) {
if (formVisible) {
FormController fc = leaseFormPanel(fp.getName());
if (fc != null) {
// form was deleted in developer?
fc.loadData(foundset, null);
if (refresh)
fc.recreateUI();
List<Runnable> runnables = new ArrayList<Runnable>();
((IWebFormContainer) wfParent).notifyVisible(true, runnables);
Utils.invokeLater(getApplication(), runnables);
}
}
} else if (wfParent != null) {
WebForm parentWF = wfParent.findParent(WebForm.class);
if (parentWF != null) {
if (!Arrays.asList(fcontrollers).contains(parentWF.getController()))
parentWF.getController().destroy();
} else {
MainPage parent = wfParent.findParent(MainPage.class);
if (parent != null && !parents.contains(parent)) {
parents.add(parent);
if (parent.getNavigator() == fp) {
navigatorName = fp.getName();
FormController navigator = getFormController(navigatorName, parent);
if (navigator != null) {
List<Runnable> invokeLaterRunnables = new ArrayList<Runnable>();
navigator.notifyVisible(true, invokeLaterRunnables);
Utils.invokeLater(getApplication(), invokeLaterRunnables);
parent.setNavigator(navigator);
// parent.triggerBrowserRequestIfNeeded(); // FIXME: this is needed here but currently does nothing because the request target is not yet set
}
}
FormController previousMainShowingForm = (parent != null ? parent.getController() : null);
if (previousMainShowingForm != null) {
FormController previousNavigator = parent.getNavigator();
parent.setController(null);
// navigator is not re-applied so apply it manually
int navigatorID = previousMainShowingForm.getForm().getNavigatorID();
if (navigatorID == Form.NAVIGATOR_IGNORE || (previousNavigator != null && previousNavigator.getForm().getID() == navigatorID)) {
parent.setNavigator(previousNavigator);
} else if (navigatorID > 0) {
Form newNavigator = application.getFlattenedSolution().getForm(navigatorID);
if (newNavigator != null) {
parent.setNavigator(leaseFormPanel(newNavigator.getName()));
}
}
showFormInMainPanel(previousMainShowingForm.getName(), parent, null, true, null);
// parent.triggerBrowserRequestIfNeeded(); // FIXME: this is needed here but currently does nothing because the request target is not yet set
}
}
}
}
}
}
for (MainPage mainPage : mainPages) {
mainPage.setVersioned(true);
}
}
use of com.servoy.j2db.util.ServoyException in project servoy-client by Servoy.
the class SortableCellViewHeaderGroup method sort.
protected final void sort(final String name, final WebCellBasedView view, int modifiers) {
direction = Utils.getAsBoolean(sorted.get(name));
direction = !direction;
FormController fc = null;
try {
Iterator<IPersist> it = cellview.getAllObjects();
while (it.hasNext()) {
IPersist element = it.next();
if (element instanceof ISupportName && element instanceof ISupportDataProviderID) {
if (name.equals(ComponentFactory.getWebID(form, element))) {
IFoundSetInternal fs = ((FoundSetListWrapper) listView.getList()).getFoundSet();
if (fs != null) {
WebForm wf = listView.findParent(WebForm.class);
if (wf != null)
fc = wf.getController();
GraphicalComponent gc = (GraphicalComponent) view.labelsFor.get(((ISupportName) element).getName());
int labelForOnActionMethodId = 0;
if (gc != null) {
labelForOnActionMethodId = gc.getOnActionMethodID();
}
if (fc != null && labelForOnActionMethodId > 0) {
// execute on action
JSEvent event = new JSEvent();
event.setType(JSEvent.EventType.action);
event.setName(RepositoryHelper.getDisplayName(StaticContentSpecLoader.PROPERTY_ONSORTCMDMETHODID.getPropertyName(), Form.class));
event.setFormName(view.getDataAdapterList().getFormController().getName());
event.setModifiers(modifiers);
event.setElementName(gc.getName());
fc.executeFunction(String.valueOf(labelForOnActionMethodId), // $NON-NLS-1$
Utils.arrayMerge((new Object[] { event }), Utils.parseJSExpressions(gc.getFlattenedMethodArguments("onActionMethodID"))), true, null, false, // $NON-NLS-1$
"onActionMethodID");
}
String id = ((ISupportDataProviderID) element).getDataProviderID();
if (id != null) {
if (cellview instanceof Portal && !ScopesUtils.isVariableScope(id)) {
int idx = id.lastIndexOf('.');
if (idx > 0) {
id = id.substring(idx + 1);
}
}
IDataProvider dataProvider = null;
if (fc != null) {
dataProvider = fs.getFoundSetManager().getApplication().getFlattenedSolution().getDataproviderLookup(fs.getFoundSetManager(), fc.getForm()).getDataProvider(id);
}
if (!(fc != null && labelForOnActionMethodId > 0)) {
// in case there is no onAction definned
if (cellview instanceof Portal || fc == null || fc.getForm().getOnSortCmdMethodID() == 0) {
List<String> sortingProviders = null;
try {
sortingProviders = DBValueList.getShowDataproviders(fs.getFoundSetManager().getApplication().getFlattenedSolution().getValueList(((ISupportDataProviderID) element).getValuelistID()), (Table) fs.getTable(), dataProvider == null ? id : dataProvider.getDataProviderID(), fs.getFoundSetManager());
} catch (RepositoryException ex) {
Debug.error(ex);
}
if (sortingProviders == null) {
// no related sort, use sort on dataProviderID instead
sortingProviders = Collections.singletonList(dataProvider == null ? id : dataProvider.getDataProviderID());
}
List<SortColumn> list = (modifiers & Event.SHIFT_MASK) != 0 ? fs.getSortColumns() : new ArrayList<SortColumn>();
for (String sortingProvider : sortingProviders) {
FoundSetManager fsm = (FoundSetManager) fs.getFoundSetManager();
SortColumn sc = fsm.getSortColumn(fs.getTable(), sortingProvider, false);
if (sc != null && sc.getColumn().getDataProviderType() != IColumnTypes.MEDIA) {
for (SortColumn oldColumn : list) {
if (oldColumn.equalsIgnoreSortorder(sc)) {
sc = oldColumn;
break;
}
}
if (!list.contains(sc))
list.add(sc);
sc.setSortOrder(direction ? SortColumn.ASCENDING : SortColumn.DESCENDING);
}
fs.sort(list, false);
}
} else if (fc != null && fc.getForm().getOnSortCmdMethodID() != -1) {
JSEvent event = new JSEvent();
event.setType(JSEvent.EventType.none);
event.setName(RepositoryHelper.getDisplayName(StaticContentSpecLoader.PROPERTY_ONSORTCMDMETHODID.getPropertyName(), Form.class));
event.setFormName(view.getDataAdapterList().getFormController().getName());
event.setModifiers(modifiers);
fc.executeFunction(String.valueOf(fc.getForm().getOnSortCmdMethodID()), Utils.arrayMerge((new Object[] { dataProvider == null ? id : dataProvider.getDataProviderID(), Boolean.valueOf(direction), event }), // $NON-NLS-1$
Utils.parseJSExpressions(fc.getForm().getFlattenedMethodArguments("onSortCmdMethodID"))), true, null, false, // $NON-NLS-1$
"onSortCmdMethodID");
}
}
if ((modifiers & Event.SHIFT_MASK) == 0) {
sorted.clear();
}
sorted.put(name, new Boolean(direction));
listView.setCurrentPage(0);
}
}
break;
}
}
}
listView.modelChanged();
} catch (Exception e) {
if (fc != null) {
if (e instanceof ServoyException) {
((ServoyException) e).setContext(fc.toString());
} else {
ServoyException se = new ServoyException();
se.initCause(e);
se.setContext(fc.toString());
e = se;
}
}
Debug.error("error sorting foundset: " + sorted, e);
}
}
use of com.servoy.j2db.util.ServoyException in project servoy-client by Servoy.
the class FoundsetTypeSabloValue method updateFoundset.
/**
* Find the foundset to be used based on the design value of "foundsetSelector".\n
* It can be either:
* <ul>
* <li>a related foundset based on the component's current record (as one would access it in scripting). Example: "customers_to_orders";</li>
* <li>the component's foundset (as if in scripting you would say 'foundset') - if foundsetSelector is not specified at design time or null;</li>
* <li>a new foundset based on the given datasource (as if you would do DatabaseManager.getFoundset(datasource) in scripting). Example: "db:/example_data/customers".</li>
* </ul>
*
* @param record the record this component is attached to; can be null. (form not linked to table or no records for example)
*
* @return true if the foundset was update, false otherwise.
*/
protected void updateFoundset(IRecordInternal record) {
// this foundset is only meant to be set from Rhino scripting; do not automatically set it and do not automatically clear it once it's set from Rhino
if (foundsetSelector == null)
return;
IFoundSetInternal newFoundset = null;
if (FORM_FOUNDSET_SELECTOR.equals(foundsetSelector)) {
// it is the form's foundset then
if (record != null) {
newFoundset = record.getParentFoundSet();
}
} else if (!DataSourceUtils.isDatasourceUri(foundsetSelector)) {
// it is a relation then or a shared named foundset (set somewhere on a form in designer)
if (record != null) {
Object o = record.getValue(foundsetSelector);
if (o instanceof IFoundSetInternal) {
// it is a related foundset then if we were able to get it from current record
newFoundset = (IFoundSetInternal) o;
if (chainedRelatedFoundsetSelectionMonitor == null) {
chainedRelatedFoundsetSelectionMonitor = new ChainedRelatedFoundsetSelectionMonitor(new IRelatedFoundsetChainSelectionChangeListener() {
@Override
public void selectionChanged(IRecordInternal rootRecord, String nestedRelationNames) {
updateFoundset(rootRecord);
}
});
}
chainedRelatedFoundsetSelectionMonitor.update(newFoundset, record, foundsetSelector);
} else {
// if it is not a related foundset it must be a shared/named foundset
try {
newFoundset = (IFoundSetInternal) getFoundSetManager().getNamedFoundSet(foundsetSelector);
} catch (ServoyException e) {
Debug.error(e);
}
}
}
} else // DataSourceUtils.isDatasourceUri(foundsetSelector)
{
// that will only reinitialize constantly this FoundsetType/Table with a new foundset - on every dataprovider change.
if (foundset != null)
newFoundset = foundset;
else {
try {
// if we want to use this type on services as well we need extra code here to get the application
newFoundset = (IFoundSetInternal) getFoundSetManager().getFoundSet(foundsetSelector);
if (((JSONObject) designJSONValue).optBoolean(FoundsetPropertyType.LOAD_ALL_RECORDS_FOR_SEPARATE, false)) {
newFoundset.loadAllRecords();
}
} catch (ServoyException e) {
if (record != null && !(record instanceof PrototypeState))
Debug.error(e);
}
}
}
updateFoundset(newFoundset);
}
Aggregations