]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/editors/WkspCategoryBaseListPage.java
Clarify SLC project structure.
[gpl/argeo-slc.git] / org.argeo.slc.client.ui.dist / src / org / argeo / slc / client / ui / dist / editors / WkspCategoryBaseListPage.java
diff --git a/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/editors/WkspCategoryBaseListPage.java b/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/editors/WkspCategoryBaseListPage.java
deleted file mode 100644 (file)
index a482e9d..0000000
+++ /dev/null
@@ -1,492 +0,0 @@
-package org.argeo.slc.client.ui.dist.editors;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.observation.Event;
-import javax.jcr.query.QueryManager;
-import javax.jcr.query.QueryResult;
-import javax.jcr.query.qom.Constraint;
-import javax.jcr.query.qom.DynamicOperand;
-import javax.jcr.query.qom.QueryObjectModel;
-import javax.jcr.query.qom.QueryObjectModelFactory;
-import javax.jcr.query.qom.Selector;
-import javax.jcr.query.qom.StaticOperand;
-
-import org.argeo.cms.ui.workbench.util.CommandUtils;
-import org.argeo.eclipse.ui.jcr.AsyncUiEventListener;
-import org.argeo.jcr.JcrUtils;
-import org.argeo.slc.SlcException;
-import org.argeo.slc.SlcNames;
-import org.argeo.slc.SlcTypes;
-import org.argeo.slc.client.ui.dist.DistConstants;
-import org.argeo.slc.client.ui.dist.DistImages;
-import org.argeo.slc.client.ui.dist.DistPlugin;
-import org.argeo.slc.client.ui.dist.commands.OpenGenerateBinariesWizard;
-import org.argeo.slc.client.ui.dist.commands.OpenModuleEditor;
-import org.argeo.slc.client.ui.dist.utils.DistNodeViewerComparator;
-import org.argeo.slc.repo.RepoConstants;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TableViewerColumn;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.forms.IManagedForm;
-import org.eclipse.ui.forms.editor.FormEditor;
-import org.eclipse.ui.forms.editor.FormPage;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.ScrolledForm;
-
-/**
- * Show all category base (currently only Aether group base) contained in a
- * given workspace as filter-able table. Enable to definition of which of them
- * should be managed as modular distribution
- */
-public class WkspCategoryBaseListPage extends FormPage implements SlcNames {
-
-       final static String PAGE_ID = "WkspCategoryBaseListPage";
-
-       // Business Objects
-       private Session session;
-
-       // This page widgets
-       private DistNodeViewerComparator comparator;
-       private TableViewer viewer;
-       private FormToolkit tk;
-       private Text filterTxt;
-       private final static String FILTER_HELP_MSG = "Enter filter criterion separated by a space";
-
-       // Observes changes
-       // private final static String[] observedTypes = { SlcTypes.SLC_GROUP_BASE
-       // };
-       // private CategoryObserver categoriesObserver;
-
-       public WkspCategoryBaseListPage(FormEditor formEditor, String title,
-                       Session session) {
-               super(formEditor, PAGE_ID, title);
-               this.session = session;
-       }
-
-       @Override
-       protected void createFormContent(IManagedForm managedForm) {
-               ScrolledForm form = managedForm.getForm();
-               tk = managedForm.getToolkit();
-
-               form.setText("Define Relevant Categories");
-               form.setMessage("Choose in the below list "
-                               + "the categories that can be used as base for "
-                               + "modular distributions maintained via the current workspace",
-                               IMessageProvider.NONE);
-
-               // Main Layout
-               GridLayout layout = new GridLayout(1, false);
-               Composite body = form.getBody();
-               body.setLayout(layout);
-
-               // filter section
-               Composite header = tk.createComposite(body);
-               header.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
-               createFilterPart(header);
-
-               // the table
-               Composite tableCmp = tk.createComposite(body);
-               tableCmp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-               createTableViewer(tableCmp);
-
-               // categoriesObserver = new CategoryObserver(viewer.getTable()
-               // .getDisplay());
-               // try {
-               // ObservationManager observationManager = session.getWorkspace()
-               // .getObservationManager();
-               // // FIXME Will not be notified if empty result is deleted
-               // observationManager.addEventListener(categoriesObserver,
-               // Event.PROPERTY_CHANGED, "/", true, null, observedTypes,
-               // false);
-               // } catch (RepositoryException e) {
-               // throw new SlcException("Cannot register listeners", e);
-               // }
-
-               refresh();
-       }
-
-       private void refresh() {
-               final List<Node> result = JcrUtils.nodeIteratorToList(listGroupBase());
-               viewer.setInput(result);
-       }
-
-       /** Build repository request */
-       private NodeIterator listGroupBase() {
-               try {
-                       QueryManager queryManager = session.getWorkspace()
-                                       .getQueryManager();
-                       QueryObjectModelFactory factory = queryManager.getQOMFactory();
-
-                       Selector source = factory.selector(SlcTypes.SLC_GROUP_BASE,
-                                       SlcTypes.SLC_MODULE_COORDINATES);
-
-                       // Create a dynamic operand for each property on which we want to
-                       // filter
-                       DynamicOperand catDO = factory.propertyValue(
-                                       source.getSelectorName(), SlcNames.SLC_CATEGORY);
-                       DynamicOperand nameDO = factory.propertyValue(
-                                       source.getSelectorName(), SlcNames.SLC_NAME);
-
-                       String filter = filterTxt.getText();
-
-                       Constraint defaultC = null;
-                       // Build constraints based the textArea content
-                       if (filter != null && !"".equals(filter.trim())) {
-                               // Parse the String
-                               String[] strs = filter.trim().split(" ");
-                               for (String token : strs) {
-                                       token = token.replace('*', '%');
-                                       StaticOperand so = factory.literal(session
-                                                       .getValueFactory().createValue("%" + token + "%"));
-
-                                       Constraint currC = factory.comparison(catDO,
-                                                       QueryObjectModelFactory.JCR_OPERATOR_LIKE, so);
-                                       currC = factory.or(currC, factory.comparison(nameDO,
-                                                       QueryObjectModelFactory.JCR_OPERATOR_LIKE, so));
-
-                                       if (defaultC == null)
-                                               defaultC = currC;
-                                       else
-                                               defaultC = factory.and(defaultC, currC);
-                               }
-                       }
-
-                       QueryObjectModel query = factory.createQuery(source, defaultC,
-                                       null, null);
-                       QueryResult result = query.execute();
-                       return result.getNodes();
-               } catch (RepositoryException re) {
-                       throw new SlcException(
-                                       "Unable to refresh group list for workspace "
-                                                       + getEditorInput().getName(), re);
-               }
-       }
-
-       private void createFilterPart(Composite parent) {
-               GridLayout layout = new GridLayout(2, false);
-               layout.marginWidth = layout.marginHeight = layout.verticalSpacing = 0;
-               layout.horizontalSpacing = 5;
-               parent.setLayout(layout);
-
-               // Text Area to filter
-               filterTxt = tk.createText(parent, "", SWT.BORDER | SWT.SINGLE
-                               | SWT.SEARCH | SWT.CANCEL);
-               filterTxt.setMessage(FILTER_HELP_MSG);
-               filterTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
-               filterTxt.addModifyListener(new ModifyListener() {
-                       private static final long serialVersionUID = 8727389523069041623L;
-
-                       public void modifyText(ModifyEvent event) {
-                               refresh();
-                       }
-               });
-
-               Button resetBtn = tk.createButton(parent, null, SWT.PUSH);
-               resetBtn.setImage(DistImages.IMG_REPO_READONLY);
-               resetBtn.addSelectionListener(new SelectionAdapter() {
-                       private static final long serialVersionUID = -6523538838444581321L;
-
-                       public void widgetSelected(SelectionEvent e) {
-                               resetFilter();
-                       }
-               });
-       }
-
-       private void resetFilter() {
-               filterTxt.setText("");
-               filterTxt.setMessage(FILTER_HELP_MSG);
-       }
-
-       private void createTableViewer(Composite parent) {
-               parent.setLayout(new FillLayout());
-               // helpers to enable sorting by column
-               List<String> propertiesList = new ArrayList<String>();
-               List<Integer> propertyTypesList = new ArrayList<Integer>();
-
-               // Define the TableViewer
-               viewer = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL
-                               | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
-
-               TableViewerColumn col;
-               // Name
-               // TableViewerColumn col = new TableViewerColumn(viewer, SWT.NONE);
-               // col.getColumn().setWidth(220);
-               // col.getColumn().setText("Category");
-               // col.setLabelProvider(new ColumnLabelProvider() {
-               // @Override
-               // public String getText(Object element) {
-               // return JcrUtils.get((Node) element, SlcNames.SLC_CATEGORY);
-               // }
-               // });
-               // col.getColumn().addSelectionListener(getSelectionAdapter(0));
-               // propertiesList.add(SlcNames.SLC_CATEGORY);
-               // propertyTypesList.add(PropertyType.STRING);
-
-               // Group base name
-               col = new TableViewerColumn(viewer, SWT.NONE);
-               col.getColumn().setWidth(220);
-               col.getColumn().setText("Group Name");
-               col.setLabelProvider(new ColumnLabelProvider() {
-                       private static final long serialVersionUID = 6186787928630825293L;
-
-                       @Override
-                       public String getText(Object element) {
-                               return JcrUtils.get((Node) element, SLC_GROUP_BASE_ID);
-                       }
-               });
-               col.getColumn().addSelectionListener(getSelectionAdapter(0));
-               propertiesList.add(SLC_GROUP_BASE_ID);
-               propertyTypesList.add(PropertyType.STRING);
-
-               // Version
-               col = new TableViewerColumn(viewer, SWT.NONE);
-               col.getColumn().setWidth(80);
-               col.getColumn().setText("Has binaries");
-               col.setLabelProvider(new ColumnLabelProvider() {
-                       private static final long serialVersionUID = -2017377132642062464L;
-
-                       @Override
-                       public String getText(Object element) {
-                               try {
-                                       Node currNode = (Node) element;
-
-                                       return currNode.hasNode(RepoConstants.BINARIES_ARTIFACT_ID) ? "Yes"
-                                                       : "No";
-                               } catch (RepositoryException e) {
-                                       throw new SlcException("unable to check type of node "
-                                                       + element, e);
-                               }
-                       }
-               });
-               // col.getColumn().addSelectionListener(getSelectionAdapter(2));
-               // propertiesList.add(SLC_VERSION);
-               // propertyTypesList.add(PropertyType.STRING);
-
-               final Table table = viewer.getTable();
-               table.setHeaderVisible(true);
-               table.setLinesVisible(true);
-
-               viewer.setContentProvider(new DistributionsContentProvider());
-               getSite().setSelectionProvider(viewer);
-
-               comparator = new DistNodeViewerComparator(0,
-                               DistNodeViewerComparator.ASCENDING, propertiesList,
-                               propertyTypesList);
-               viewer.setComparator(comparator);
-
-               // Context Menu
-               MenuManager menuManager = new MenuManager();
-               Menu menu = menuManager.createContextMenu(viewer.getTable());
-               menuManager.addMenuListener(new IMenuListener() {
-                       private static final long serialVersionUID = 739004528695501335L;
-
-                       public void menuAboutToShow(IMenuManager manager) {
-                               contextMenuAboutToShow(manager);
-                       }
-               });
-               viewer.getTable().setMenu(menu);
-               getSite().registerContextMenu(menuManager, viewer);
-
-               // Double click
-               viewer.addDoubleClickListener(new DoubleClickListener());
-       }
-
-       @Override
-       public void setFocus() {
-               viewer.getTable().setFocus();
-       }
-
-       /** Programmatically configure the context menu */
-       protected void contextMenuAboutToShow(IMenuManager menuManager) {
-               IWorkbenchWindow window = DistPlugin.getDefault().getWorkbench()
-                               .getActiveWorkbenchWindow();
-               // Build conditions
-               // Mark as category base
-               Object firstElement = ((IStructuredSelection) viewer.getSelection())
-                               .getFirstElement();
-               Node currSelected = (Node) firstElement;
-
-               DistWkspEditorInput input = (DistWkspEditorInput) getEditorInput();
-
-               Map<String, String> params = new HashMap<String, String>();
-               params.put(OpenGenerateBinariesWizard.PARAM_REPO_NODE_PATH,
-                               input.getRepoNodePath());
-               try {
-                       params.put(OpenGenerateBinariesWizard.PARAM_MODULE_PATH,
-                                       currSelected.getPath());
-               } catch (RepositoryException e) {
-                       throw new SlcException("Unable to get path for " + currSelected, e);
-               }
-               params.put(OpenGenerateBinariesWizard.PARAM_WORKSPACE_NAME,
-                               input.getWorkspaceName());
-
-               CommandUtils.refreshParameterizedCommand(menuManager, window,
-                               OpenGenerateBinariesWizard.ID,
-                               OpenGenerateBinariesWizard.DEFAULT_LABEL,
-                               OpenGenerateBinariesWizard.DEFAULT_ICON, true, params);
-
-               // boolean isRelevant = false;
-               // try {
-               // isRelevant = currSelected.isNodeType(SlcTypes.SLC_CATEGORY);
-               // boolean canEdit = currSelected.canAddMixin(SlcTypes.SLC_CATEGORY);
-               //
-               // } catch (RepositoryException e) {
-               // throw new SlcException("unable to check type of node "
-               // + firstElement, e);
-               // }
-               // // Add
-               // if (isRelevant) {// Remove
-               // CommandUtils.refreshCommand(menuManager, window,
-               // MarkAsRelevantCategory.ID,
-               // MarkAsRelevantCategory.DEFAULT_REMOVE_LABEL,
-               // MarkAsRelevantCategory.DEFAULT_REMOVE_ICON, true);
-               // } else {
-               // CommandUtils.refreshCommand(menuManager, window,
-               // MarkAsRelevantCategory.ID,
-               // MarkAsRelevantCategory.DEFAULT_LABEL,
-               // MarkAsRelevantCategory.DEFAULT_ICON, true);
-               // }
-       }
-
-       private SelectionAdapter getSelectionAdapter(final int index) {
-               SelectionAdapter selectionAdapter = new SelectionAdapter() {
-                       private static final long serialVersionUID = -1723894288128081757L;
-
-                       @Override
-                       public void widgetSelected(SelectionEvent e) {
-                               Table table = viewer.getTable();
-                               comparator.setColumn(index);
-                               int dir = table.getSortDirection();
-                               if (table.getSortColumn() == table.getColumn(index)) {
-                                       dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
-                               } else {
-                                       dir = SWT.DOWN;
-                               }
-                               table.setSortDirection(dir);
-                               table.setSortColumn(table.getColumn(index));
-                               viewer.refresh();
-                       }
-               };
-               return selectionAdapter;
-       }
-
-       /* LOCAL CLASSES */
-       private class DistributionsContentProvider implements
-                       IStructuredContentProvider {
-               private static final long serialVersionUID = -5939763615620837492L;
-
-               // we keep a cache of the Nodes in the content provider to be able to
-               // manage long request
-               private List<Node> nodes;
-
-               public void dispose() {
-               }
-
-               // We expect a list of nodes as a new input
-               @SuppressWarnings("unchecked")
-               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-                       nodes = (List<Node>) newInput;
-               }
-
-               public Object[] getElements(Object arg0) {
-                       return nodes.toArray();
-               }
-       }
-
-       private class DoubleClickListener implements IDoubleClickListener {
-
-               public void doubleClick(DoubleClickEvent event) {
-                       Object obj = ((IStructuredSelection) event.getSelection())
-                                       .getFirstElement();
-                       if (obj instanceof Node) {
-                               Node node = (Node) obj;
-                               try {
-                                       if (node.isNodeType(SlcTypes.SLC_ARTIFACT)) {
-                                               DistWkspEditorInput dwip = (DistWkspEditorInput) getEditorInput();
-                                               Map<String, String> params = new HashMap<String, String>();
-                                               params.put(OpenModuleEditor.PARAM_REPO_NODE_PATH,
-                                                               dwip.getRepoNodePath());
-                                               params.put(OpenModuleEditor.PARAM_REPO_URI,
-                                                               dwip.getUri());
-                                               params.put(OpenModuleEditor.PARAM_WORKSPACE_NAME,
-                                                               dwip.getWorkspaceName());
-                                               String path = node.getPath();
-                                               params.put(OpenModuleEditor.PARAM_MODULE_PATH, path);
-                                               CommandUtils.callCommand(OpenModuleEditor.ID, params);
-                                       }
-                               } catch (RepositoryException re) {
-                                       throw new SlcException("Cannot get path for node " + node
-                                                       + " while setting parameters for "
-                                                       + "command OpenModuleEditor", re);
-                               }
-
-                       }
-               }
-       }
-
-       class CategoryObserver extends AsyncUiEventListener {
-
-               public CategoryObserver(Display display) {
-                       super(display);
-               }
-
-               @Override
-               protected Boolean willProcessInUiThread(List<Event> events)
-                               throws RepositoryException {
-                       for (Event event : events) {
-                               String path = event.getPath();
-                               if (JcrUtils.lastPathElement(path).equals(
-                                               DistConstants.JCR_MIXIN_TYPES))
-                                       return true;
-                       }
-                       return false;
-               }
-
-               protected void onEventInUiThread(List<Event> events)
-                               throws RepositoryException {
-                       if (getLog().isTraceEnabled())
-                               getLog().trace("Refresh table");
-                       viewer.refresh();
-               }
-       }
-
-       @Override
-       public void setActive(boolean active) {
-               super.setActive(active);
-               if (active) {
-               }
-       }
-}
\ No newline at end of file