return object.getClass().getName() + " with rank " + rank;
}
+ public static <K, T> boolean hasHigherRank(Map<K, RankedObject<T>> map, K key, Map<String, Object> properties) {
+ if (!map.containsKey(key))
+ return true;
+ RankedObject<T> rankedObject = new RankedObject<>(null, properties);
+ RankedObject<T> current = map.get(key);
+ return current.getRank() < rankedObject.getRank();
+ }
+
+ /**
+ * @return the {@link RankedObject}, or <code>null</code> if the current one was
+ * kept
+ */
public static <K, T> RankedObject<T> putIfHigherRank(Map<K, RankedObject<T>> map, K key, T object,
Map<String, Object> properties) {
RankedObject<T> rankedObject = new RankedObject<>(object, properties);
return rankedObject;
} else {
RankedObject<T> current = map.get(key);
- if (current.getRank() <= rankedObject.getRank()) {
+ if (current.getRank() < rankedObject.getRank()) {
map.put(key, rankedObject);
- if (log.isTraceEnabled())
- log.trace("Replaced " + key + " by " + object.getClass().getName() + " with rank "
+ if (log.isDebugEnabled())
+ log.debug("Replaced " + key + " by " + object.getClass().getName() + " with rank "
+ rankedObject.getRank());
return rankedObject;
+ } else if (current.getRank() == rankedObject.getRank()) {
+ log.error("Already " + key + " by " + current.get().getClass().getName() + " with rank "
+ + rankedObject.getRank() + ", ignoring " + rankedObject.getClass().getName());
+ return null;
} else {
- return current;
+ return null;
}
}
import static org.argeo.api.cms.ux.CmsView.CMS_VIEW_UID_PROPERTY;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
setState(ui, state != null ? state : defaultLayerPid);
}
} catch (Exception e) {
- CmsFeedback.show("Unexpected exception", e);
+ CmsFeedback.error("Unexpected exception", e);
}
}
}
}
} catch (Exception e) {
- CmsFeedback.show("Cannot handle event " + event, e);
+ CmsFeedback.error("Cannot handle event " + event, e);
// log.error("Cannot handle event " + event, e);
}
});
}
if (properties.containsKey(EntityConstants.TYPE)) {
List<String> types = LangUtils.toStringList(properties.get(EntityConstants.TYPE));
- for (String type : types)
+ for (String type : types) {
RankedObject.putIfHigherRank(uiProvidersByType, type, uiProvider, properties);
+ }
}
}
}
public void addLayer(SuiteLayer layer, Map<String, Object> properties) {
- if (properties.containsKey(Constants.SERVICE_PID)) {
- String pid = (String) properties.get(Constants.SERVICE_PID);
+ if (!properties.containsKey(Constants.SERVICE_PID))
+ throw new IllegalArgumentException("A layer must have an ID");
+ String pid = (String) properties.get(Constants.SERVICE_PID);
+ List<String> types = properties.containsKey(EntityConstants.TYPE)
+ ? LangUtils.toStringList(properties.get(EntityConstants.TYPE))
+ : new ArrayList<>();
+ if (types.isEmpty()) {
+ RankedObject.putIfHigherRank(layersByPid, pid, layer, properties);
+ } else {
+ if (layersByPid.containsKey(pid)) {
+ RankedObject<SuiteLayer> current = layersByPid.get(pid);
+ List<String> currentTypes = current.getProperties().containsKey(EntityConstants.TYPE)
+ ? LangUtils.toStringList(current.getProperties().get(EntityConstants.TYPE))
+ : new ArrayList<>();
+ if (!types.containsAll(currentTypes)) {
+ throw new IllegalArgumentException("Higher-ranked layer " + pid + " contains only types " + types
+ + ", while it must override all " + currentTypes);
+ }
+ }
RankedObject.putIfHigherRank(layersByPid, pid, layer, properties);
- }
- if (properties.containsKey(EntityConstants.TYPE)) {
- List<String> types = LangUtils.toStringList(properties.get(EntityConstants.TYPE));
for (String type : types)
RankedObject.putIfHigherRank(layersByType, type, layer, properties);
}
}
}
- Composite switchToLayer(SuiteLayer layer, Content context) {
+ void switchToLayer(SuiteLayer layer, Content context) {
// TODO make it more robust
for (String layerId : layers.keySet()) {
SuiteLayer l = layers.get(layerId);
if (layer == l) {
- return switchToLayer(layerId, context);
+ switchToLayer(layerId, context);
}
}
throw new IllegalArgumentException("Layer is not registered.");
import static org.argeo.eclipse.ui.EclipseUiUtils.isEmpty;
-import javax.jcr.Node;
-
import org.argeo.app.ui.SuiteMsg;
import org.argeo.app.ui.SuiteUiUtils;
+import org.argeo.cms.swt.dialogs.CmsFeedback;
+import org.argeo.cms.swt.widgets.SwtGuidedFormPage;
+import org.argeo.cms.ux.widgets.AbstractGuidedForm;
import org.argeo.eclipse.ui.EclipseUiUtils;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardPage;
+import org.argeo.util.directory.HierarchyUnit;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Text;
/** Ask first & last name. Update the passed node on finish */
-public class NewUserWizard extends Wizard {
+public class NewUserWizard extends AbstractGuidedForm {
// private final static Log log = LogFactory.getLog(NewPersonWizard.class);
// Context
- private Node person;
-
+// private Node person;
+ private HierarchyUnit hierarchyUnit;
// This page widgets
protected Text lastNameTxt;
protected Text firstNameTxt;
// private Button useDistinctDisplayNameBtn;
// private Text displayNameTxt;
- public NewUserWizard(Node person) {
- this.person = person;
+ public NewUserWizard(HierarchyUnit hierarchyUnit) {
+ this.hierarchyUnit = hierarchyUnit;
}
@Override
} catch (Exception e) {
throw new RuntimeException("Cannot add page to wizard", e);
}
- setWindowTitle(SuiteMsg.personWizardWindowTitle.lead());
+ setFormTitle(SuiteMsg.personWizardWindowTitle.lead());
}
/**
// String displayName = displayNameTxt.getText();
// boolean useDistinct = useDistinctDisplayNameBtn.getSelection();
if (EclipseUiUtils.isEmpty(lastName) && EclipseUiUtils.isEmpty(firstName)) {
- MessageDialog.openError(getShell(), "Non-valid information",
- "Please enter at least a name that is not empty.");
+// MessageDialog.openError(getShell(), "Non-valid information",
+// "Please enter at least a name that is not empty.");
+ CmsFeedback.show("Please enter at least a name that is not empty.");
return false;
} else {
// ConnectJcrUtils.setJcrProperty(person, PEOPLE_LAST_NAME, PropertyType.STRING, lastName);
return true;
}
- protected class MainInfoPage extends WizardPage {
- private static final long serialVersionUID = 1L;
+ protected class MainInfoPage extends SwtGuidedFormPage {
public MainInfoPage(String pageName) {
super(pageName);
@Override
public void modifyText(ModifyEvent event) {
- getContainer().updateButtons();
+ getView().updateButtons();
}
};
// displayNameTxt.addModifyListener(ml);
// Don't forget this.
- setControl(firstNameTxt);
+ // setControl(firstNameTxt);
firstNameTxt.setFocus();
}
}
}
}
} catch (Exception e) {
- CmsFeedback.show("Cannot import files to " + currFolderPath,e);
+ CmsFeedback.error("Cannot import files to " + currFolderPath,e);
}
return false;
}
import org.argeo.cms.swt.CmsSwtUtils;
import org.argeo.cms.swt.Selected;
import org.argeo.cms.swt.acr.SwtUiProvider;
+import org.argeo.cms.swt.widgets.SwtGuidedFormDialog;
import org.argeo.cms.swt.widgets.SwtTableView;
import org.argeo.cms.swt.widgets.SwtTreeView;
import org.argeo.cms.ui.CmsUiProvider;
import org.argeo.cms.ux.widgets.AbstractHierarchicalPart;
import org.argeo.cms.ux.widgets.Column;
import org.argeo.cms.ux.widgets.DefaultTabularPart;
+import org.argeo.cms.ux.widgets.GuidedForm;
import org.argeo.cms.ux.widgets.HierarchicalPart;
import org.argeo.osgi.useradmin.UserDirectory;
import org.argeo.util.directory.HierarchyUnit;
addItem.addSelectionListener((Selected) (e) -> {
// SuiteUtils.getOrCreateUserNode(adminSession, userDn);
- Wizard wizard = new NewUserWizard(null);
- CmsWizardDialog dialog = new CmsWizardDialog(parent.getShell(), wizard);
+ GuidedForm wizard = new NewUserWizard(null);
+ SwtGuidedFormDialog dialog = new SwtGuidedFormDialog(parent.getShell(), wizard);
// WizardDialog dialog = new WizardDialog(shell, wizard);
if (dialog.open() == Window.OK) {
// TODO create