+Require-Capability: cms.datamodel; filter:="(name=people)",\
+cms.datamodel; filter:="(name=documents)"
Import-Package:\
javax.jcr.nodetype,\
org.argeo.node,\
<artifactId>org.argeo.connect.people.core</artifactId>
<version>${version.argeo-connect}</version>
</dependency>
+ <dependency>
+ <groupId>org.argeo.connect</groupId>
+ <artifactId>org.argeo.connect.documents</artifactId>
+ <version>${version.argeo-connect}</version>
+ </dependency>
</dependencies>
</project>
--- /dev/null
+package org.argeo.suite;
+
+public interface SuiteConstants {
+
+}
--- /dev/null
+package org.argeo.suite.documents;
+
+public interface FsConstants {
+}
<!-- REFERENCES -->\r
<reference id="repository" interface="javax.jcr.Repository"\r
filter="(cn=home)" />\r
- <reference id="peopleService" interface="org.argeo.connect.people.PeopleService" />\r
- <reference id="peopleWorkbenchService"\r
- interface="org.argeo.connect.people.workbench.rap.PeopleWorkbenchService" />\r
<reference id="nodeFileSystemProvider" interface="java.nio.file.spi.FileSystemProvider"\r
filter="(service.pid=org.argeo.node.fsProvider)" />\r
+ <reference id="appWorkbenchService"\r
+ interface="org.argeo.connect.ui.workbench.AppWorkbenchService" />\r
\r
-\r
- <!-- Local beans to be cleaned -->\r
- <beans:bean id="fsAppService" class="org.argeo.suite.workbench.fs.FsAppService">\r
- </beans:bean>\r
+ <reference id="peopleService" interface="org.argeo.connect.people.PeopleService" />\r
+ <reference id="documentsService" interface="org.argeo.connect.documents.DocumentsService" />\r
\r
</beans:beans>\r
scope="prototype">
<property name="repository" ref="repository" />
<property name="nodeFileSystemProvider" ref="nodeFileSystemProvider" />
- <property name="fsAppService" ref="fsAppService" />
+ <property name="documentsService" ref="documentsService" />
+ <property name="appWorkbenchService" ref="appWorkbenchService" />
</bean>
scope="prototype">
<property name="repository" ref="repository" />
<property name="peopleService" ref="peopleService" />
- <property name="peopleWorkbenchService" ref="peopleWorkbenchService" />
+ <property name="appWorkbenchService" ref="appWorkbenchService" />
</bean>
</beans>
org.argeo.cms.ui.workbench,\
org.argeo.connect,\
org.argeo.connect.people.workbench.rap.views,\
-org.argeo.connect.ui,\
+org.argeo.connect.ui.workbench,\
org.argeo.eclipse.spring,\
org.argeo.node,\
org.argeo.util,\
package org.argeo.suite.workbench;
-import org.argeo.connect.people.workbench.rap.PeopleWorkbenchService;
-import org.argeo.connect.people.workbench.rap.PeopleWorkbenchServiceImpl;
+import java.util.List;
+
+import javax.jcr.Node;
+
+import org.argeo.connect.ui.workbench.AppWorkbenchService;
+import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.suite.workbench.parts.DefaultDashboardEditor;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.swt.graphics.Image;
/** Centralize workbench services from the various base apps */
-public class AsWorkbenchServiceImpl extends PeopleWorkbenchServiceImpl implements PeopleWorkbenchService {
+public class AsWorkbenchServiceImpl implements AppWorkbenchService {
+
+ // Injected known AppWorkbenchServices: order is important, first found
+ // result will be returned by the various methods.
+ private List<AppWorkbenchService> knownAppWbServices;
@Override
public String getDefaultEditorId() {
return DefaultDashboardEditor.ID;
}
-}
-// extends PeopleWorkbenchServiceImpl {
-//
-// public String getDefaultEditorId() {
-// return DefaultDashboardEditor.ID;
-// }
-//
-// //
-// // @Override
-// // public Image getIconForType(Node entity) {
-// // try {
-// // if (entity.isNodeType(AoTypes.OFFICE_ACCOUNT))
-// // return AoImages.ICON_ACCOUNT;
-// // else if (entity.isNodeType(TrackerTypes.TRACKER_ISSUE))
-// // return AoImages.ICON_ISSUE;
-// // else if (entity.isNodeType(TrackerTypes.TRACKER_PROJECT))
-// // return AoImages.ICON_PROJECT;
-// // else if (entity.isNodeType(AoTypes.OFFICE_PROSPECT))
-// // return AoImages.ICON_PROSPECT;
-// // else
-// // return super.getIconForType(entity);
-// // } catch (RepositoryException re) {
-// // throw new PeopleException("Unable to get image for node", re);
-// // }
-// // }
-// }
+ @Override
+ public String getOpenEntityEditorCmdId() {
+ String result = null;
+ for (AppWorkbenchService appWbService : knownAppWbServices) {
+ result = appWbService.getOpenEntityEditorCmdId();
+ if (EclipseUiUtils.notEmpty(result))
+ return result;
+ }
+ return null;
+ }
+
+ @Override
+ public String getOpenSearchEntityEditorCmdId() {
+ String result = null;
+ for (AppWorkbenchService appWbService : knownAppWbServices) {
+ result = appWbService.getOpenSearchEntityEditorCmdId();
+ if (EclipseUiUtils.notEmpty(result))
+ return result;
+ }
+ return null;
+ }
+
+ @Override
+ public String getEntityEditorId(Node entity) {
+ String result = null;
+ for (AppWorkbenchService appWbService : knownAppWbServices) {
+ result = appWbService.getEntityEditorId(entity);
+ if (EclipseUiUtils.notEmpty(result))
+ return result;
+ }
+ return null;
+ }
+
+ @Override
+ public String getSearchEntityEditorId(String nodeType) {
+ String result = null;
+ for (AppWorkbenchService appWbService : knownAppWbServices) {
+ result = appWbService.getSearchEntityEditorId(nodeType);
+ if (EclipseUiUtils.notEmpty(result))
+ return result;
+ }
+ return null;
+ }
+
+ @Override
+ public Image getIconForType(Node entity) {
+ Image result = null;
+ for (AppWorkbenchService appWbService : knownAppWbServices) {
+ result = appWbService.getIconForType(entity);
+ if (result != null)
+ return result;
+ }
+ return null;
+ }
+
+ @Override
+ public Wizard getCreationWizard(Node node) {
+ Wizard result = null;
+ for (AppWorkbenchService appWbService : knownAppWbServices) {
+ result = appWbService.getCreationWizard(node);
+ if (result != null)
+ return result;
+ }
+ return null;
+ }
+
+ @Override
+ public String getOpenFileCmdId() {
+ return null;
+ }
+
+ /* DEPENDENCY INJECTION */
+ public void setKnownAppWbServices(List<AppWorkbenchService> knownAppWbServices) {
+ this.knownAppWbServices = knownAppWbServices;
+ }
+}
+++ /dev/null
-package org.argeo.suite.workbench.fs;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.nio.file.FileSystem;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.spi.FileSystemProvider;
-import java.security.PrivilegedActionException;
-
-import javax.jcr.Session;
-
-import org.argeo.cms.auth.CurrentUser;
-import org.argeo.node.NodeUtils;
-import org.argeo.suite.SuiteException;
-
-public class FsAppService {
- private final static String NODE_PREFIX = "node://";
-
- private String getCurrentHomePath(Session session) {
- try {
- // Make in a do as if not from the workbench
- // Repository repo = session.getRepository();
- // session = CurrentUser.tryAs(() -> repo.login());
- String homepath = NodeUtils.getUserHome(session).getPath();
- return homepath;
- } catch (Exception e) {
- throw new SuiteException("Cannot retrieve Current User Home Path", e);
- // } finally {
- // JcrUtils.logoutQuietly(session);
- }
- }
-
- public Path[] getMyFilesPath(FileSystemProvider nodeFileSystemProvider, Session session) {
- // return Paths.get(System.getProperty("user.dir"));
- String currHomeUriStr = NODE_PREFIX + getCurrentHomePath(session);
- try {
- URI uri = new URI(currHomeUriStr);
- FileSystem fileSystem = nodeFileSystemProvider.getFileSystem(uri);
- if (fileSystem == null) {
- fileSystem = CurrentUser.tryAs(() -> nodeFileSystemProvider.newFileSystem(uri, null));
- // PrivilegedExceptionAction<FileSystem> pea = new
- // PrivilegedExceptionAction<FileSystem>() {
- // @Override
- // public FileSystem run() throws Exception {
- // return nodeFileSystemProvider.newFileSystem(uri, null);
- // }
- //
- // };
- // fileSystem = CurrentUser.tryAs(pea);
- }
- Path[] paths = { fileSystem.getPath(getCurrentHomePath(session)), fileSystem.getPath("/") };
- return paths;
- } catch (URISyntaxException | PrivilegedActionException e) {
- throw new RuntimeException("unable to initialise home file system for " + currHomeUriStr, e);
- }
- }
-
- public Path[] getMyGroupsFilesPath(FileSystemProvider nodeFileSystemProvider, Session session) {
- // TODO
- Path[] paths = { Paths.get(System.getProperty("user.dir")), Paths.get("/tmp") };
- return paths;
- }
-
- public Path[] getMyBookmarks(FileSystemProvider nodeFileSystemProvider, Session session) {
- // TODO
- Path[] paths = { Paths.get(System.getProperty("user.dir")), Paths.get("/tmp"), Paths.get("/opt") };
- return paths;
- }
-}
import org.argeo.cms.util.CmsUtils;
import org.argeo.connect.people.PeopleService;
import org.argeo.connect.people.workbench.rap.PeopleStyles;
-import org.argeo.connect.people.workbench.rap.PeopleWorkbenchService;
import org.argeo.connect.people.workbench.rap.editors.util.EntityEditorInput;
+import org.argeo.connect.ui.workbench.AppWorkbenchService;
import org.argeo.connect.util.ConnectJcrUtils;
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.jcr.JcrUtils;
// DEPENDENCY INJECTION
private Repository repository;
private PeopleService peopleService;
- private PeopleWorkbenchService peopleWorkbenchService;
+ private AppWorkbenchService appWorkbenchService;
private Session session;
return peopleService;
}
- protected PeopleWorkbenchService getPeopleWorkbenchService() {
- return peopleWorkbenchService;
+ protected AppWorkbenchService getAppWorkbenchService() {
+ return appWorkbenchService;
}
protected Session getSession() {
this.repository = repository;
}
- public void setPeopleWorkbenchService(PeopleWorkbenchService peopleWorkbenchService) {
- this.peopleWorkbenchService = peopleWorkbenchService;
+ public void setAppWorkbenchService(AppWorkbenchService appWorkbenchService) {
+ this.appWorkbenchService = appWorkbenchService;
}
public void setPeopleService(PeopleService peopleService) {
createGadgetTitleCmp(parent, "Contacts");
Composite bodyCmp = createGadgetBodyCmp(parent);
- PeopleRapUtils.createOpenSearchEditorLink(getPeopleWorkbenchService(), bodyCmp, "Persons",
+ PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Persons",
PeopleTypes.PEOPLE_PERSON, getPeopleService().getBasePath(PeopleTypes.PEOPLE_PERSON));
- PeopleRapUtils.createOpenSearchEditorLink(getPeopleWorkbenchService(), bodyCmp, "Organisations",
+ PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Organisations",
PeopleTypes.PEOPLE_ORG, getPeopleService().getBasePath(PeopleTypes.PEOPLE_ORG));
Node tagParent = getPeopleService().getResourceService().getTagLikeResourceParent(getSession(),
PeopleTypes.PEOPLE_MAILING_LIST);
- PeopleRapUtils.createOpenSearchEditorLink(getPeopleWorkbenchService(), bodyCmp, "Mailing lists",
+ PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Mailing lists",
PeopleTypes.PEOPLE_MAILING_LIST, ConnectJcrUtils.getPath(tagParent));
- PeopleRapUtils.createOpenSearchEditorLink(getPeopleWorkbenchService(), bodyCmp, "Tasks",
+ PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Tasks",
PeopleTypes.PEOPLE_TASK, getPeopleService().getBasePath(null));
tagParent = getPeopleService().getResourceService().getTagLikeResourceParent(getSession(),
PeopleConstants.RESOURCE_TAG);
- PeopleRapUtils.createOpenSearchEditorLink(getPeopleWorkbenchService(), bodyCmp, "Tags",
+ PeopleRapUtils.createOpenSearchEditorLink(getAppWorkbenchService(), bodyCmp, "Tags",
PeopleTypes.PEOPLE_TAG_INSTANCE, ConnectJcrUtils.getPath(tagParent));
}
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
-import javax.jcr.nodetype.NodeType;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import org.argeo.cms.util.CmsUtils;
import org.argeo.connect.ConnectConstants;
+import org.argeo.connect.documents.DocumentsService;
import org.argeo.connect.people.PeopleException;
import org.argeo.connect.people.workbench.rap.providers.BasicNodeListContentProvider;
import org.argeo.connect.ui.ConnectUiConstants;
import org.argeo.connect.ui.widgets.DelayedText;
+import org.argeo.connect.ui.workbench.AppWorkbenchService;
import org.argeo.connect.util.ConnectJcrUtils;
import org.argeo.connect.util.XPathUtils;
import org.argeo.eclipse.ui.EclipseUiUtils;
import org.argeo.eclipse.ui.fs.FsTableViewer;
import org.argeo.jcr.JcrUtils;
import org.argeo.suite.workbench.AsUiPlugin;
-import org.argeo.suite.workbench.fs.FsAppService;
import org.argeo.suite.workbench.fs.FsSingleColumnLabelProvider;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ColumnWeightData;
public class MyFilesView extends ViewPart implements IDoubleClickListener {
public final static String ID = AsUiPlugin.PLUGIN_ID + ".myFilesView";
- private FileSystemProvider nodeFileSystemProvider;
- private FsAppService fsAppService;
private Repository repository;
private Session session;
+ private AppWorkbenchService appWorkbenchService;
+ private FileSystemProvider nodeFileSystemProvider;
+ private DocumentsService documentsService;
private DelayedText filterTxt;
private TableViewer searchResultsViewer;
parent.setLayout(new GridLayout());
Composite tableComposite = new Composite(parent, SWT.NONE);
- GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_VERTICAL
- | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
- tableComposite.setLayoutData(gd);
+ tableComposite.setLayoutData(EclipseUiUtils.fillAll());
TableViewer v = new TableViewer(tableComposite);
v.setLabelProvider(labelProvider);
TableColumn singleColumn = new TableColumn(v.getTable(), SWT.V_SCROLL);
TableColumnLayout tableColumnLayout = new TableColumnLayout();
- tableColumnLayout.setColumnData(singleColumn, new ColumnWeightData(85));
+ tableColumnLayout.setColumnData(singleColumn, new ColumnWeightData(100));
tableComposite.setLayout(tableColumnLayout);
// Corresponding table & style
Table table = v.getTable();
- table.setLinesVisible(true);
+ table.setLinesVisible(false);
table.setHeaderVisible(false);
CmsUtils.markup(table);
CmsUtils.setItemHeight(table, 26);
protected int refreshFilteredList() {
try {
String filter = filterTxt.getText();
- // Prevents the query on the full repository
if (EclipseUiUtils.isEmpty(filter)) {
searchResultsViewer.setInput(null);
return 0;
}
- QueryManager queryManager = session.getWorkspace().getQueryManager();
-
// XPATH Query
// TODO manage cleanly jcr: prefix
// String xpathQueryStr = "//element(*, " + NodeType.NT_FILE + ")";
if (notEmpty(xpathFilter))
xpathQueryStr += "[" + xpathFilter + "]";
+ QueryManager queryManager = session.getWorkspace().getQueryManager();
Query xpathQuery = queryManager.createQuery(xpathQueryStr, ConnectConstants.QUERY_XPATH);
-
// xpathQuery.setLimit(TrackerUiConstants.SEARCH_DEFAULT_LIMIT);
QueryResult result = xpathQuery.execute();
-
NodeIterator nit = result.getNodes();
searchResultsViewer.setInput(JcrUtils.nodeIteratorToList(nit));
private void populateBookmarks(Composite parent) {
CmsUtils.clear(parent);
parent.setLayout(new GridLayout());
-
int bookmarkColWith = 200;
FsTableViewer homeViewer = new FsTableViewer(parent, SWT.SINGLE | SWT.NO_SCROLL);
gd.horizontalIndent = 10;
table.setLayoutData(gd);
homeViewer.addDoubleClickListener(this);
- homeViewer.setPathsInput(fsAppService.getMyFilesPath(nodeFileSystemProvider, session));
+ homeViewer.setPathsInput(documentsService.getMyDocumentsPath(nodeFileSystemProvider, session));
appendTitle(parent, "Shared files");
FsTableViewer groupsViewer = new FsTableViewer(parent, SWT.SINGLE | SWT.NO_SCROLL);
gd.horizontalIndent = 10;
table.setLayoutData(gd);
groupsViewer.addDoubleClickListener(this);
- groupsViewer.setPathsInput(fsAppService.getMyGroupsFilesPath(nodeFileSystemProvider, session));
+ groupsViewer.setPathsInput(documentsService.getMyGroupsFilesPath(nodeFileSystemProvider, session));
appendTitle(parent, "My bookmarks");
FsTableViewer bookmarksViewer = new FsTableViewer(parent, SWT.SINGLE | SWT.NO_SCROLL);
gd.horizontalIndent = 10;
table.setLayoutData(gd);
bookmarksViewer.addDoubleClickListener(this);
- bookmarksViewer.setPathsInput(fsAppService.getMyBookmarks(nodeFileSystemProvider, session));
+ bookmarksViewer.setPathsInput(documentsService.getMyBookmarks(nodeFileSystemProvider, session));
}
private Label appendTitle(Composite parent, String value) {
if (selection.isEmpty())
return;
else {
+
+ // currNode = ConnectJcrUtils.getNodeFromElement(obj, selectorName);
+ // if (currNode != null)
+ // CommandUtils
+ // .callCommand(peopleWorkbenchService
+ // .getOpenEntityEditorCmdId(),
+ // OpenEntityEditor.PARAM_JCR_ID, currNode
+ // .getIdentifier());
System.out.println("Double clicked");
// TODO open corresponding editor
// Path newSelected = (Path) selection.getFirstElement();
this.repository = repository;
}
+ public void setAppWorkbenchService(AppWorkbenchService appWorkbenchService) {
+ this.appWorkbenchService = appWorkbenchService;
+ }
+
public void setNodeFileSystemProvider(FileSystemProvider nodeFileSystemProvider) {
this.nodeFileSystemProvider = nodeFileSystemProvider;
}
- public void setFsAppService(FsAppService fsAppService) {
- this.fsAppService = fsAppService;
+ public void setDocumentsService(DocumentsService documentsService) {
+ this.documentsService = documentsService;
}
}