Index: addon-cms/src/main/java/org/onehippo/forge/relateddocs/editor/DocumentPickerDialog.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- addon-cms/src/main/java/org/onehippo/forge/relateddocs/editor/DocumentPickerDialog.java (revision 410427b6676d5b629eebd52860943364438f71eb) +++ addon-cms/src/main/java/org/onehippo/forge/relateddocs/editor/DocumentPickerDialog.java (date 1561454557000) @@ -31,7 +31,6 @@ import org.apache.wicket.util.value.ValueMap; import org.hippoecm.frontend.PluginRequestTarget; import org.hippoecm.frontend.dialog.AbstractDialog; -import org.hippoecm.frontend.editor.plugins.linkpicker.LinkPickerDialog; import org.hippoecm.frontend.model.IModelReference; import org.hippoecm.frontend.model.JcrNodeModel; import org.hippoecm.frontend.model.event.IObservable; @@ -53,19 +52,16 @@ * @author vijaykiran */ public class DocumentPickerDialog extends AbstractDialog { - private static final long serialVersionUID = 1L; - - private static final Logger log = LoggerFactory.getLogger(LinkPickerDialog.class); protected static final String CLUSTER_OPTIONS = "cluster.options"; - - private List nodetypes = new ArrayList(); - + private static final long serialVersionUID = 1L; + private static final Logger log = LoggerFactory.getLogger(DocumentPickerDialog.class); protected final IPluginContext context; protected final IPluginConfig config; + private final RelatedDocCollection collection; protected IRenderService dialogRenderer; + private List nodetypes = new ArrayList(); private IClusterControl control; private IModel selectedNode; - private final RelatedDocCollection collection; private String uuid; private IObserver selectionModelObserver; @@ -97,7 +93,7 @@ try { uuid = model.getObject().getIdentifier(); if (uuid != null && !"".equals(uuid)) { - selectedNode = new JcrNodeModel(((UserSession) Session.get()).getJcrSession().getNodeByIdentifier(uuid)); + selectedNode = new JcrNodeModel(((UserSession)Session.get()).getJcrSession().getNodeByIdentifier(uuid)); setOkEnabled(true); } } catch (RepositoryException ex) { @@ -122,7 +118,7 @@ } try { - Node targetNode = (Node) targetModel.getObject(); + Node targetNode = (Node)targetModel.getObject(); Node testNode = targetNode; if (targetNode.isNodeType(HippoNodeType.NT_HANDLE) && targetNode.hasNode(targetNode.getName())) { @@ -157,7 +153,14 @@ protected Component createContentPanel(String contentId) { IPluginConfigService pluginConfigService = context.getService(IPluginConfigService.class.getName(), IPluginConfigService.class); - IClusterConfig template = pluginConfigService.getCluster("cms-pickers/documents"); + String picker = "cms-pickers/documents"; + if (config.containsKey(CLUSTER_OPTIONS) && config.getPluginConfig(CLUSTER_OPTIONS) != null) { + final IPluginConfig clusterOptionConfig = config.getPluginConfig(CLUSTER_OPTIONS); + if (clusterOptionConfig.containsKey("cluster.name")) { + picker = clusterOptionConfig.getString("cluster.name"); + } + } + IClusterConfig template = pluginConfigService.getCluster(picker); //TODO: is this ok? IPluginConfig parameters = new JavaPluginConfig(config.getPluginConfig(CLUSTER_OPTIONS)); control = context.newCluster(template, null); @@ -175,7 +178,7 @@ } public void onEvent(Iterator events) { - setSelectedModel((JcrNodeModel) selectionModelReference.getModel()); + setSelectedModel((JcrNodeModel)selectionModelReference.getModel()); } }, IObserver.class.getName()); @@ -240,7 +243,7 @@ return; } - JcrNodeModel selectedNodeModel = (JcrNodeModel) selectedNode; + JcrNodeModel selectedNodeModel = (JcrNodeModel)selectedNode; try { if (uuid.equalsIgnoreCase(selectedNodeModel.getNode().getIdentifier())) { Index: addon-cms/src/main/java/org/onehippo/forge/relateddocs/editor/RelatedDocsPlugin.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- addon-cms/src/main/java/org/onehippo/forge/relateddocs/editor/RelatedDocsPlugin.java (revision 410427b6676d5b629eebd52860943364438f71eb) +++ addon-cms/src/main/java/org/onehippo/forge/relateddocs/editor/RelatedDocsPlugin.java (date 1561454557000) @@ -15,10 +15,13 @@ */ package org.onehippo.forge.relateddocs.editor; +import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import org.apache.commons.collections.IteratorUtils; +import org.apache.wicket.MarkupContainer; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.behavior.AttributeAppender; @@ -45,6 +48,7 @@ import org.hippoecm.frontend.skin.Icon; import org.onehippo.forge.relateddocs.RelatedDoc; import org.onehippo.forge.relateddocs.RelatedDocCollection; +import org.onehippo.forge.relateddocs.RelatedDocsNodeType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,7 +77,7 @@ IModelReference.class); if (baseRef != null) { JcrNodeModel baseDocument = (JcrNodeModel) baseRef.getModel(); - baseModel = new JcrNodeModel(baseDocument.getItemModel().getPath() + "/" + NT_RELATEDDOCS); + baseModel = new JcrNodeModel(baseDocument.getItemModel().getPath() + "/" + RelatedDocsNodeType.NT_RELATEDDOCS); } else { log.warn("no base model service available"); } @@ -139,7 +143,9 @@ } @Override + @SuppressWarnings("unchecked") protected void populateItem(Item item) { + List relatedDocs = IteratorUtils.toList(relatedDocCollection.iterator()); final RelatedDoc relatedDoc = (RelatedDoc) item.getModelObject(); AjaxLink link = new AjaxLink("link") { @@ -177,12 +183,51 @@ } }; - if (Mode.EDIT != mode) { - deleteLink.setVisible(false); - } - deleteLink.add(HippoIcon.fromSprite("deleteIcon", Icon.TIMES)); item.add(deleteLink); + MarkupContainer upLink = new AjaxLink("up") { + @Override + public void onClick(AjaxRequestTarget target) { + final int i = relatedDocs.indexOf(relatedDoc); + Collections.swap(relatedDocs, i, i - 1); + for (RelatedDoc relatedDoc : relatedDocs) { + relatedDocCollection.remove(relatedDoc); + } + for (RelatedDoc relatedDoc : relatedDocs) { + relatedDocCollection.add(relatedDoc); + } + } + }; + boolean isFirst = (item.getIndex() == 0); + upLink.setEnabled(!isFirst); + item.add(upLink); + final HippoIcon upIcon = HippoIcon.fromSprite("up-icon", Icon.ARROW_UP); + upLink.add(upIcon); + + MarkupContainer downLink = new AjaxLink("down") { + @Override + public void onClick(AjaxRequestTarget target) { + final int i = relatedDocs.indexOf(relatedDoc); + Collections.swap(relatedDocs, i, i + 1); + for (RelatedDoc relatedDoc : relatedDocs) { + relatedDocCollection.remove(relatedDoc); + } + for (RelatedDoc relatedDoc : relatedDocs) { + relatedDocCollection.add(relatedDoc); + } + } + }; + boolean isLast = (item.getIndex() == relatedDocs.size() - 1); + downLink.setEnabled(!isLast); + item.add(downLink); + final HippoIcon downIcon = HippoIcon.fromSprite("down-icon", Icon.ARROW_DOWN); + downLink.add(downIcon); + + if (Mode.EDIT != mode) { + deleteLink.setVisible(false); + upLink.setVisible(false); + downLink.setVisible(false); + } } }; } @@ -224,7 +269,9 @@ } @Override + @SuppressWarnings("unchecked") protected void populateItem(Item> item) { + List relatedDocs = IteratorUtils.toList(relatedDocCollection.iterator()); Change change = item.getModelObject(); final RelatedDoc relatedDoc = change.getValue(); @@ -271,6 +318,42 @@ deleteLink.setVisible(false); deleteLink.add(HippoIcon.fromSprite("deleteIcon", Icon.TIMES)); item.add(deleteLink); + + MarkupContainer upLink = new AjaxLink("up") { + @Override + public void onClick(AjaxRequestTarget target) { + final int i = relatedDocs.indexOf(relatedDoc); + Collections.swap(relatedDocs, i, i - 1); + for (RelatedDoc relatedDoc : relatedDocs) { + relatedDocCollection.remove(relatedDoc); + } + for (RelatedDoc relatedDoc : relatedDocs) { + relatedDocCollection.add(relatedDoc); + } + } + }; + upLink.setVisible(false); + final HippoIcon upIcon = HippoIcon.fromSprite("up-icon", Icon.ARROW_UP); + upLink.add(upIcon); + item.add(upLink); + + MarkupContainer downLink = new AjaxLink("down") { + @Override + public void onClick(AjaxRequestTarget target) { + final int i = relatedDocs.indexOf(relatedDoc); + Collections.swap(relatedDocs, i, i + 1); + for (RelatedDoc relatedDoc : relatedDocs) { + relatedDocCollection.remove(relatedDoc); + } + for (RelatedDoc relatedDoc : relatedDocs) { + relatedDocCollection.add(relatedDoc); + } + } + }; + downLink.setVisible(false); + final HippoIcon downIcon = HippoIcon.fromSprite("down-icon", Icon.ARROW_DOWN); + downLink.add(downIcon); + item.add(downLink); } }; } Index: addon-cms/src/main/java/org/onehippo/forge/relateddocs/editor/RelatedDocsPlugin.html IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- addon-cms/src/main/java/org/onehippo/forge/relateddocs/editor/RelatedDocsPlugin.html (revision 410427b6676d5b629eebd52860943364438f71eb) +++ addon-cms/src/main/java/org/onehippo/forge/relateddocs/editor/RelatedDocsPlugin.html (date 1561454489000) @@ -12,6 +12,7 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. + https://issues.onehippo.com/browse/HIPPLUG-1546 --> @@ -20,6 +21,8 @@
+ +