package org.kie.eclipse.navigator.view.actions.organization; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.dialogs.ListDialog; import org.kie.eclipse.navigator.view.actions.KieNavigatorAction; import org.kie.eclipse.navigator.view.content.IContainerNode; import org.kie.eclipse.server.IKieOrganizationHandler; import org.kie.eclipse.server.IKieRepositoryHandler; import org.kie.eclipse.server.IKieServerHandler; import org.kie.eclipse.server.IKieServiceDelegate; public class AddRepositoryAction extends KieNavigatorAction { protected AddRepositoryAction(ISelectionProvider provider, String text) { super(provider, text); } public AddRepositoryAction(ISelectionProvider selectionProvider) { this(selectionProvider, "Add Repository..."); } public void run() { IContainerNode<?> container = getContainer(); if (container==null) return; IKieOrganizationHandler organization = (IKieOrganizationHandler) container.getHandler(); IKieServerHandler server = (IKieServerHandler) container.getRoot().getHandler(); IKieServiceDelegate delegate = getDelegate(); try { // get a list of all repositories List<IKieRepositoryHandler> allRepositories = delegate.getRepositories(server); // and remove the ones that are owned by an Organization for (IKieOrganizationHandler org : delegate.getOrganizations(server)) { for (IKieRepositoryHandler rep : org.getRepositories()) { for (IKieRepositoryHandler ar : allRepositories) { if (ar.getName().equals(rep.getName())) { allRepositories.remove(ar); break; } } } } // if there's anything left, allow the "Add Repository" operation if (allRepositories.isEmpty()) { MessageDialog.openInformation(getShell(), "No Repositories", "All known Repositories are already assigned to other Organizational Units."); } else { ListDialog dlg = new ListDialog(getShell()); dlg.setContentProvider(new IStructuredContentProvider() { @Override public void dispose() { } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } @Override public Object[] getElements(Object inputElement) { return ((List<IKieRepositoryHandler>)inputElement).toArray(); } }); dlg.setLabelProvider(new ILabelProvider() { @Override public void removeListener(ILabelProviderListener listener) { } @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void dispose() { } @Override public void addListener(ILabelProviderListener listener) { } @Override public String getText(Object element) { return ((IKieRepositoryHandler)element).getName(); } @Override public Image getImage(Object element) { return null; } }); dlg.setInput(allRepositories); dlg.setMessage("Select a Repository to add to Organizational Unit "+organization.getName()); dlg.setTitle("Add Repository to Organizationl Unit"); if (dlg.open()==Window.OK) { Object[] result = dlg.getResult(); if (result.length==1) { try { delegate.addRepository((IKieRepositoryHandler)result[0], organization); refreshViewer(container.getRoot()); } catch (Exception e) { handleException(e); } } } } } catch (Exception e) { handleException(e); } } }