public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection sel = (IStructuredSelection) event.getSelection(); boolean state = false; if (sel.size() == 1) { SimpleUserNode node = (SimpleUserNode) sel.getFirstElement(); if (node.getRealObject() instanceof IServerInternal) { IServerInternal s = (IServerInternal) node.getRealObject(); if (s.isValid() && s.getConfig().isEnabled() && ServoyModelManager.getServoyModelManager().getServoyModel().getActiveProject() != null) { state = true; } } } setEnabled(state); }
public void run(IMarker marker) { if (uuid == null) return; UUID id = UUID.fromString(uuid); ServoyProject servoyProject = ServoyModelManager.getServoyModelManager().getServoyModel().getServoyProject(solutionName); if (servoyProject == null) return; try { IPersist persist = servoyProject.getEditingPersist(id); if (persist == null) return; IPersist parent = persist.getAncestor(parentTypeId); if (parent == null && parentTypeId == IRepository.TABLENODES && dataSource != null) { parent = servoyProject.getEditingSolution().getOrCreateTableNode(dataSource); } if (parent == null) return; MethodTemplate template = MethodTemplate.getTemplate(ScriptMethod.class, eventName); if (template == null) return; MethodArgument signature = template.getSignature(); if (signature == null) return; Map<String, String> substitutions = null; if (dataSource != null) substitutions = Collections.singletonMap("dataSource", dataSource); ScriptMethod method = NewMethodAction.createNewMethod( UIUtils.getActiveShell(), parent, eventName, true, null, null, substitutions, null, null); if (method != null) { PropertyDescriptor descriptor = new PropertyDescriptor(eventName, persist.getClass()); descriptor.getWriteMethod().invoke(persist, new Integer(method.getID())); servoyProject.saveEditingSolutionNodes(new IPersist[] {parent}, true); } } catch (Exception e) { ServoyLog.logError(e); } }
public void run(IMarker marker) { if (solutionName != null) { ServoyProject servoyProject = ServoyModelManager.getServoyModelManager() .getServoyModel() .getServoyProject(solutionName); if (servoyProject != null) { Solution solution = servoyProject.getEditingSolution(); if (solution != null) { solution.setSolutionType(SolutionMetaData.WEB_CLIENT_ONLY); try { servoyProject.saveEditingSolutionNodes(new IPersist[] {solution}, false); } catch (RepositoryException e) { ServoyLog.logError(e); } } } } }
public List<RelationData> loadData(IServerInternal server, IProgressMonitor monitor) { List<RelationData> relations = new ArrayList<RelationData>(); try { List<String> tableNames = server.getTableAndViewNames(true, true); // plus 1 for sorting at the end monitor.beginTask("Loading relations", tableNames.size() + 1); for (String tableName : tableNames) { if (isCanceled()) { return null; } Table table = server.getTable(tableName); Connection connection = null; ResultSet resultSet = null; try { connection = server.getConnection(); DatabaseMetaData dbmd = connection.getMetaData(); Map<String, List<List<String[]>>> relationInfo = new HashMap<String, List<List<String[]>>>(); resultSet = dbmd.getExportedKeys( server.getConfig().getCatalog(), server.getConfig().getSchema(), table.getSQLName()); while (resultSet.next()) { String pcolumnName = resultSet.getString("PKCOLUMN_NAME"); String ftableName = resultSet.getString("FKTABLE_NAME"); String fcolumnName = resultSet.getString("FKCOLUMN_NAME"); String fkname = resultSet.getString("FK_NAME"); String relname = fkname; if (relname == null) relname = table.getSQLName() + "_to_" + ftableName; int keySeq = resultSet.getInt("KEY_SEQ"); Debug.trace( "Found (export) rel: name: " + relname + " keyseq = " + keySeq + ' ' + table.getSQLName() + ' ' + pcolumnName + " -> " + ftableName + ' ' + fcolumnName); List<List<String[]>> rel_items_list = relationInfo.get(relname); if (rel_items_list == null) { rel_items_list = new ArrayList<List<String[]>>(); relationInfo.put(relname, rel_items_list); rel_items_list.add(new ArrayList<String[]>()); } // rel_items_list is a list of items-lists, we are adding items to the last of this // list rel_items_list .get(rel_items_list.size() - 1) .add( new String[] { table.getSQLName(), pcolumnName, ftableName, fcolumnName, fkname }); } resultSet = Utils.closeResultSet(resultSet); resultSet = dbmd.getImportedKeys( server.getConfig().getCatalog(), server.getConfig().getSchema(), table.getSQLName()); int lastKeySeq = Integer.MAX_VALUE; List<List<String[]>> fk_rel_items_list = new ArrayList<List<String[]>>(); while (resultSet.next()) { String pcolumnName = resultSet.getString("PKCOLUMN_NAME"); String ptableName = resultSet.getString("PKTABLE_NAME"); String fcolumnName = resultSet.getString("FKCOLUMN_NAME"); int keySeq = resultSet.getInt("KEY_SEQ"); Debug.trace( "Found (import) rel: name: " + table.getSQLName() + "_to_" + ptableName + " keyseq = " + keySeq + ' ' + table.getSQLName() + ' ' + pcolumnName + " -> " + ptableName + ' ' + fcolumnName); // assume KEY_SEQ ascending ordered, do not assume 0 or 1 based (jdbc spec is not // clear on this). // when KEY_SEQ is not increasing, we have a separate constraint between the same // tables. if (fk_rel_items_list.size() == 0 || keySeq <= lastKeySeq) { fk_rel_items_list.add(new ArrayList<String[]>()); } lastKeySeq = keySeq; // add the item to the last list of rel_items_list fk_rel_items_list .get(fk_rel_items_list.size() - 1) .add( new String[] { table.getSQLName(), fcolumnName, ptableName, pcolumnName, null }); } // generate relation names for the inversed fk constraints for (List<String[]> rel_items_list : fk_rel_items_list) { String relationName = createInversedFKRelationName(table, rel_items_list); List<List<String[]>> rel_items = relationInfo.get(relationName); if (rel_items == null) { relationInfo.put(relationName, rel_items = new ArrayList<List<String[]>>()); } rel_items.add(rel_items_list); } resultSet = Utils.closeResultSet(resultSet); for (Map.Entry<String, List<List<String[]>>> entry : relationInfo.entrySet()) { String rname = entry.getKey(); List<List<String[]>> rel_items_list = entry.getValue(); // we may have multiple lists of items defined for the same relation name for (int l = 0; l < rel_items_list.size(); l++) { List<Column> primaryColumns = new ArrayList<Column>(); List<Column> foreignColumns = new ArrayList<Column>(); for (String[] element : rel_items_list.get(l)) { // String ptableName = element[0]; String pcolumnName = element[1]; String ftableName = element[2]; String fcolumnName = element[3]; // String fkname = element[4]; Table foreignTable = server.getTable(ftableName); if (foreignTable == null || foreignTable.isMarkedAsHiddenInDeveloper()) continue; Column primaryColumn = table.getColumn(pcolumnName); Column foreignColumn = foreignTable.getColumn(fcolumnName); if (primaryColumn == null || foreignColumn == null) continue; primaryColumns.add(primaryColumn); foreignColumns.add(foreignColumn); } if (primaryColumns.size() != 0) { // postfix the relation name when there are multiple String relationName = rname; if (rel_items_list.size() > 1) { relationName += "_" + (l + 1); } boolean defaultAdd = ServoyModelManager.getServoyModelManager() .getServoyModel() .getFlattenedSolution() .getRelation(relationName) == null; relations.add( new RelationData( relationName, table, primaryColumns, foreignColumns, defaultAdd)); } } } } catch (RepositoryException e) { ServoyLog.logError(e); } catch (SQLException e) { ServoyLog.logError(e); } finally { Utils.closeResultSet(resultSet); Utils.closeConnection(connection); } monitor.worked(1); } monitor.done(); } catch (RepositoryException ex) { ServoyLog.logError(ex); } return relations; }