You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/12/20 16:42:21 UTC
[4/4] git commit: ISIS-638: ui hints and clipboard behaviour
ISIS-638: ui hints and clipboard behaviour
Now captures view selection/page number/sorting for tables
New stuff:
* UiHintContainer (implemented by EntityModel)
* overrides of the various AjaxPaging widgets to send UiSetHint to owning page
* broadcast of UiHintEvents to all children
* subscription of hint events by EntityIconAndTitlePanel
* ZipClipboardLink, copy href from EntityIconAndTitlePanel
Also updated the archetypes web.xmls
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/bb2d31e1
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/bb2d31e1
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/bb2d31e1
Branch: refs/heads/master
Commit: bb2d31e1d15cfba5fb7a220b916cc52696e42ecb
Parents: 9eae01f
Author: Dan Haywood <da...@apache.org>
Authored: Fri Dec 20 15:17:04 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Fri Dec 20 15:17:04 2013 +0000
----------------------------------------------------------------------
.../wicket/viewer/IsisWicketApplication.java | 20 +-
.../ComponentFactoryRegistryDefault.java | 2 +
.../wicket/model/hints/UiHintContainer.java | 42 ++
.../model/hints/UiHintPathSignificant.java | 21 +
.../model/hints/UiHintsBroadcastEvent.java | 17 +
.../wicket/model/hints/UiHintsSetEvent.java | 17 +
.../model/mementos/PageParameterNames.java | 12 +
.../viewer/wicket/model/models/EntityModel.java | 153 +++++-
.../wicket/ui/components/about/AboutPanel.java | 1 +
.../components/collection/CollectionPanel.java | 13 +-
.../CollectionContentsAsAjaxTablePanel.java | 75 ++-
.../ajaxtable/IsisAjaxFallbackDataTable.java | 25 +-
.../IsisAjaxFallbackHeadersToolbar.java | 49 +-
.../IsisAjaxFallbackOrderByBorder.java | 79 +++
.../ajaxtable/IsisAjaxHeadersToolbar.java | 14 +-
.../ajaxtable/IsisAjaxNavigationToolbar.java | 37 ++
.../ajaxtable/IsisAjaxPagingNavigation.java | 43 ++
.../IsisAjaxPagingNavigationIncrementLink.java | 51 ++
.../ajaxtable/IsisAjaxPagingNavigationLink.java | 52 ++
.../ajaxtable/IsisAjaxPagingNavigator.java | 52 ++
.../CollectionContentsLinksSelectorPanel.java | 7 +-
.../collections/EntityCollectionsPanel.java | 3 +-
.../icontitle/EntityIconAndTitlePanel.css | 17 +
.../icontitle/EntityIconAndTitlePanel.html | 2 +-
.../icontitle/EntityIconAndTitlePanel.java | 66 ++-
.../entity/properties/EntityPropertiesForm.java | 10 +-
.../links/EntityLinksSelectorPanel.java | 7 +
.../scalars/ScalarPanelTextFieldAbstract.java | 1 -
...UiHintPathSignificantWebMarkupContainer.java | 34 ++
.../FormComponentPanelAbstract.java | 22 +
.../components/widgets/zclip/ZeroClipboard.swf | Bin 0 -> 1071 bytes
.../widgets/zclip/ZeroClipboardLink.java | 112 ++++
.../ui/components/widgets/zclip/jquery.zclip.js | 507 +++++++++++++++++++
.../viewer/wicket/ui/pages/PageAbstract.css | 261 ++++++----
.../viewer/wicket/ui/pages/PageAbstract.html | 13 +-
.../viewer/wicket/ui/pages/PageAbstract.java | 46 +-
.../isis/viewer/wicket/ui/pages/copy-26.png | Bin 0 -> 476 bytes
.../wicket/ui/pages/entity/EntityPage.java | 8 +-
.../ui/pages/jquery.isis.wicket.viewer.js | 10 +
.../viewer/wicket/ui/panels/PanelAbstract.java | 10 +
.../links/LinksSelectorPanelAbstract.java | 57 ++-
.../isis/viewer/wicket/ui/util/Links.java | 26 +
core/pom.xml | 6 +-
.../dom/src/main/java/dom/todo/ToDoItems.java | 2 +-
.../webapp/src/main/webapp/WEB-INF/web.xml | 8 +
.../webapp/src/main/webapp/WEB-INF/web.xml | 8 +
46 files changed, 1801 insertions(+), 217 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index d164be3..b767159 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -19,6 +19,7 @@
package org.apache.isis.viewer.wicket.viewer;
+import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -42,6 +43,7 @@ import org.apache.wicket.ConverterLocator;
import org.apache.wicket.IConverterLocator;
import org.apache.wicket.Page;
import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.SharedResources;
import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
import org.apache.wicket.core.request.mapper.MountedMapper;
@@ -52,8 +54,10 @@ import org.apache.wicket.markup.html.IHeaderResponseDecorator;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Response;
+import org.apache.wicket.request.resource.ByteArrayResource;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.settings.IRequestCycleSettings.RenderStrategy;
+import org.apache.wicket.util.resource.IResourceStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -88,11 +92,14 @@ import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistrar;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
import org.apache.isis.viewer.wicket.ui.components.additionallinks.AdditionalLinksPanel;
+import org.apache.isis.viewer.wicket.ui.components.entity.icontitle.EntityIconAndTitlePanel;
import org.apache.isis.viewer.wicket.ui.components.entity.properties.EntityPropertiesForm;
import org.apache.isis.viewer.wicket.ui.components.scalars.string.MultiLineStringPanel;
import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItemPanel;
import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssSubMenuItemsPanel;
+import org.apache.isis.viewer.wicket.ui.components.widgets.zclip.ZeroClipboardLink;
import org.apache.isis.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
+import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
@@ -259,7 +266,11 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
// prettier URLs
mountPage("/entity/${objectOid}", PageType.ENTITY);
- mountPage("/action/${objectOid}/${actionOwningSpec}/${actionId}/${actionType}/#{actionArgs}", PageType.ACTION_PROMPT);
+ mountPage("/action/${objectOid}/${actionOwningSpec}/${actionId}/${actionType}/~{actionArgs}", PageType.ACTION_PROMPT);
+
+ SharedResources sharedResources = getSharedResources();
+ ZeroClipboardLink.addSharedResourceTo(sharedResources);
+
} catch(RuntimeException ex) {
List<MetaModelInvalidException> mmies = Lists.newArrayList(
@@ -309,7 +320,12 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
private void mountPage(final String mountPath, final PageType pageType) {
final Class<? extends Page> pageClass = this.pageClassRegistry.getPageClass(pageType);
- mount(new MountedMapper(mountPath, pageClass));
+ mount(new MountedMapper(mountPath, pageClass){
+ @Override
+ protected String getOptionalPlaceholder(String s) {
+ return getPlaceholder(s, '~');
+ }
+ });
}
private void buildCssBundle() {
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java
index e1d6058..41d89cf 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistryDefault.java
@@ -36,6 +36,7 @@ import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.model.IModel;
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
import org.apache.isis.viewer.wicket.ui.ComponentFactory;
import org.apache.isis.viewer.wicket.ui.ComponentFactory.ApplicationAdvice;
import org.apache.isis.viewer.wicket.ui.ComponentType;
@@ -100,6 +101,7 @@ public class ComponentFactoryRegistryDefault implements ComponentFactoryRegistry
// Public API
// ///////////////////////////////////////////////////////
+
@Override
public Component addOrReplaceComponent(final MarkupContainer markupContainer, final ComponentType componentType, final IModel<?> model) {
final Component component = createComponent(componentType, model);
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintContainer.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintContainer.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintContainer.java
new file mode 100644
index 0000000..4041891
--- /dev/null
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintContainer.java
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+package org.apache.isis.viewer.wicket.model.hints;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.model.IModel;
+
+public interface UiHintContainer {
+
+ String getHint(Component component, String key);
+
+ void setHint(Component component, String key, String value);
+
+ public static class Util {
+ private Util(){}
+ public static UiHintContainer hintContainerOf(Component component) {
+
+ if(component == null) {
+ return null;
+ }
+ IModel<?> model = component.getDefaultModel();
+ if(model instanceof UiHintContainer) {
+ return (UiHintContainer) model;
+ }
+ return hintContainerOf(component.getParent());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintPathSignificant.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintPathSignificant.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintPathSignificant.java
new file mode 100644
index 0000000..775ce99
--- /dev/null
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintPathSignificant.java
@@ -0,0 +1,21 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+package org.apache.isis.viewer.wicket.model.hints;
+
+public interface UiHintPathSignificant {
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintsBroadcastEvent.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintsBroadcastEvent.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintsBroadcastEvent.java
new file mode 100644
index 0000000..0aa05f3
--- /dev/null
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintsBroadcastEvent.java
@@ -0,0 +1,17 @@
+package org.apache.isis.viewer.wicket.model.hints;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+
+public class UiHintsBroadcastEvent
+{
+ private final AjaxRequestTarget target;
+
+ public UiHintsBroadcastEvent(AjaxRequestTarget target) {
+ this.target = target;
+ }
+
+ public AjaxRequestTarget getTarget() {
+ return target;
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintsSetEvent.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintsSetEvent.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintsSetEvent.java
new file mode 100644
index 0000000..fe51798
--- /dev/null
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintsSetEvent.java
@@ -0,0 +1,17 @@
+package org.apache.isis.viewer.wicket.model.hints;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+
+public class UiHintsSetEvent
+{
+ private final AjaxRequestTarget target;
+
+ public UiHintsSetEvent(AjaxRequestTarget target) {
+ this.target = target;
+ }
+
+ public AjaxRequestTarget getTarget() {
+ return target;
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/PageParameterNames.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/PageParameterNames.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/PageParameterNames.java
index 14ce811..f9c52af 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/PageParameterNames.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/PageParameterNames.java
@@ -41,6 +41,11 @@ public enum PageParameterNames {
OBJECT_OID,
/**
+ * Hints for the rendering of an entity.
+ */
+ HINTS,
+
+ /**
* Owning type of an action.
*
* <p>
@@ -125,6 +130,13 @@ public enum PageParameterNames {
addStringTo(pageParameters, someEnum.name());
}
+ /**
+ * @param pageParameters
+ */
+ public void removeFrom(PageParameters pageParameters) {
+ pageParameters.remove(this.toString());
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 8060c35..b503db2 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -21,13 +21,20 @@ package org.apache.isis.viewer.wicket.model.models;
import java.io.Serializable;
import java.util.Map;
+import java.util.Set;
+import com.google.common.base.Joiner;
import com.google.common.collect.Maps;
+import org.apache.wicket.Component;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.string.PrependingStringBuffer;
+import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.string.Strings;
import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.services.viewmodelsupport.ViewModelSupport.Memento;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
@@ -41,7 +48,10 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.ObjectSpecifications.MemberGroupLayoutHint;
import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.core.runtime.services.viewmodelsupport.ViewModelSupportDefault;
import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
+import org.apache.isis.viewer.wicket.model.hints.UiHintPathSignificant;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
@@ -53,7 +63,7 @@ import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
* So that the model is {@link Serializable}, the {@link ObjectAdapter} is
* stored as a {@link ObjectAdapterMemento}.
*/
-public class EntityModel extends BookmarkableModel<ObjectAdapter> {
+public class EntityModel extends BookmarkableModel<ObjectAdapter> implements UiHintContainer {
private static final long serialVersionUID = 1L;
@@ -79,8 +89,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
} else {
// don't do anything; instead the page should be redirected back to
// an EntityPage so that the underlying EntityModel that contains
- // the
- // memento for the transient ObjectAdapter can be accessed.
+ // the memento for the transient ObjectAdapter can be accessed.
}
return pageParameters;
}
@@ -139,6 +148,8 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
*/
private ConcurrencyException concurrencyException;
+ private final HintPageParameterSerializer hintPageParameterSerializer = new HintPageParameterSerializerDirect();
+
// //////////////////////////////////////////////////////////
// constructors
// //////////////////////////////////////////////////////////
@@ -149,8 +160,8 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
public EntityModel(final PageParameters pageParameters) {
this(ObjectAdapterMemento.createPersistent(rootOidFrom(pageParameters)));
+ hintPageParameterSerializer.pageParametersToHints(pageParameters, this.hints);
}
-
public EntityModel(final ObjectAdapter adapter) {
this(ObjectAdapterMemento.createOrNull(adapter));
setObject(adapter);
@@ -158,7 +169,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
public EntityModel(final ObjectAdapterMemento adapterMemento) {
this.adapterMemento = adapterMemento;
- pendingModel = new PendingModel(this);
+ this.pendingModel = new PendingModel(this);
}
private static String oidStr(final PageParameters pageParameters) {
@@ -174,10 +185,85 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
// BookmarkableModel
//////////////////////////////////////////////////
+
@Override
public PageParameters getPageParameters() {
- return createPageParameters(getObject());
+ PageParameters pageParameters = createPageParameters(getObject());
+ hintPageParameterSerializer.hintsToPageParameters(hints, pageParameters);
+ return pageParameters;
+ }
+
+
+ static interface HintPageParameterSerializer {
+ public void hintsToPageParameters(Map<String,String> hints, PageParameters pageParameters);
+ public void pageParametersToHints(final PageParameters pageParameters, Map<String,String> hints);
+ }
+
+ static class HintPageParameterSerializerDirect implements HintPageParameterSerializer, Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public void hintsToPageParameters(Map<String,String> hints, PageParameters pageParameters) {
+ Set<String> hintKeys = hints.keySet();
+ for (String key : hintKeys) {
+ String value = hints.get(key);
+ pageParameters.add("hint-" + key, value);
+ }
+ }
+
+ @Override
+ public void pageParametersToHints(final PageParameters pageParameters, Map<String,String> hints) {
+ Set<String> namedKeys = pageParameters.getNamedKeys();
+ for (String namedKey : namedKeys) {
+ if(namedKey.startsWith("hint-")) {
+ String value = pageParameters.get(namedKey).toString(null);
+ String key = namedKey.substring(5);
+ hints.put(key, value); // may replace
+ }
+ }
+ }
+ }
+
+ static class HintPageParameterSerializerUsingViewModelSupport implements HintPageParameterSerializer, Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public void hintsToPageParameters(Map<String,String> hints, PageParameters pageParameters) {
+ if(hints.isEmpty()) {
+ return;
+ }
+ ViewModelSupportDefault vms = new ViewModelSupportDefault();
+ Memento memento = vms.create();
+ Set<String> hintKeys = hints.keySet();
+ for (String key : hintKeys) {
+ String safeKey = key.replace(':', '_');
+ Serializable value = hints.get(key);
+ memento.set(safeKey, value);
+ }
+ String serializedHints = memento.asString();
+ PageParameterNames.HINTS.addStringTo(pageParameters, serializedHints);
+ }
+
+ public void pageParametersToHints(final PageParameters pageParameters, Map<String,String> hints) {
+ String hintsStr = PageParameterNames.HINTS.getStringFrom(pageParameters);
+ if(hintsStr != null) {
+ try {
+ Memento memento = new ViewModelSupportDefault().parse(hintsStr);
+ Set<String> keys = memento.keySet();
+ for (String safeKey : keys) {
+ String value = memento.get(safeKey, String.class);
+ String key = safeKey.replace('_', ':');
+ hints.put(key, value);
+ }
+ } catch(RuntimeException ex) {
+ // fail gracefully, ie ignore.
+ System.err.println(ex);
+ }
+ }
+ }
}
+
+
+
@Override
public String getTitle() {
@@ -386,6 +472,60 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
}
+
+ // //////////////////////////////////////////////////////////
+ // Hint support
+ // //////////////////////////////////////////////////////////
+
+ private final Map<String, String> hints = Maps.newTreeMap();
+
+ public String getHint(final Component component, final String key) {
+ if(component == null) {
+ return null;
+ }
+ String hintKey = hintKey(component, key);
+ String value = hints.get(hintKey);
+ System.err.println("GET " + hintKey + "=" + value) ;
+ return value;
+ }
+
+ @Override
+ public void setHint(Component component, String key, String value) {
+ if(component == null) {
+ return;
+ }
+ String hintKey = hintKey(component, key);
+ System.err.println("PUT " + hintKey + "=" + value) ;
+ hints.put(hintKey, value);
+ }
+
+
+ private static String hintKey(Component component, String key) {
+ return hintPathFor(component) + "-" + key;
+ }
+
+ private static String hintPathFor(Component component)
+ {
+ return Strings.afterFirstPathComponent(fullHintPathFor(component), Component.PATH_SEPARATOR);
+ }
+
+ private static String fullHintPathFor(Component component)
+ {
+ final PrependingStringBuffer buffer = new PrependingStringBuffer(32);
+ for (Component c = component; c != null; c = c.getParent())
+ {
+ if(c instanceof UiHintPathSignificant) {
+ if (buffer.length() > 0)
+ {
+ buffer.prepend(Component.PATH_SEPARATOR);
+ }
+ buffer.prepend(c.getId());
+ }
+ }
+ return buffer.toString();
+ }
+
+
// //////////////////////////////////////////////////////////
// concurrency exceptions
// //////////////////////////////////////////////////////////
@@ -565,4 +705,5 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
index 04ae1c8..9d3ac09 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/about/AboutPanel.java
@@ -61,4 +61,5 @@ public class AboutPanel extends PanelAbstract<AboutModel> {
add(new JarManifestPanel(ID_MANIFEST_ATTRIBUTES, jarManifestModel));
}
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
index fc0e893..c65cbed 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
@@ -23,7 +23,6 @@ import java.util.List;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
@@ -37,7 +36,6 @@ import org.apache.isis.viewer.wicket.ui.ComponentType;
import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow;
import org.apache.isis.viewer.wicket.ui.components.additionallinks.EntityActionUtil;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
-import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
/**
@@ -46,13 +44,14 @@ import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
*/
public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implements ActionPromptProvider {
+
private static final long serialVersionUID = 1L;
private static final String ID_COLLECTION = "collection";
private static final String ID_FEEDBACK = "feedback";
private static final String ID_ACTION_PROMPT_MODAL_WINDOW = "actionPromptModalWindow";
- private final Component collectionContents;
+ private Component collectionContents;
private String collectionName;
private Label label;
@@ -77,7 +76,15 @@ public class CollectionPanel extends PanelAbstract<EntityCollectionModel> implem
List<LinkAndLabel> entityActions = EntityActionUtil.entityActions(entityModel, otma, this);
collectionModel.addEntityActions(entityActions);
+ }
+
+ @Override
+ protected void onInitialize() {
+ super.onInitialize();
+ buildGui();
+ }
+ private void buildGui() {
final WebMarkupContainer markupContainer = new WebMarkupContainer(ID_COLLECTION);
collectionContents = getComponentFactoryRegistry().addOrReplaceComponent(markupContainer, ComponentType.COLLECTION_CONTENTS, getModel());
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index ce34577..03e3a96 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -29,7 +29,6 @@ import com.google.inject.Inject;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
@@ -51,6 +50,8 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.viewer.wicket.model.common.SelectionHandler;
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
+import org.apache.isis.viewer.wicket.model.hints.UiHintPathSignificant;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
@@ -61,8 +62,8 @@ import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.
import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterPropertyColumn;
import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterTitleColumn;
import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterToggleboxColumn;
-import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuBuilder;
import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.ActionLinkFactory;
+import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuBuilder;
import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
@@ -70,9 +71,7 @@ import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
* {@link PanelAbstract Panel} that represents a {@link EntityCollectionModel
* collection of entity}s rendered using {@link AjaxFallbackDefaultDataTable}.
*/
-public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityCollectionModel> implements CollectionCountProvider, ActionPromptProvider {
-
- private static final Predicate<ObjectAction> BULK = Filters.asPredicate(ObjectAction.Filters.bulk());
+public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityCollectionModel> implements CollectionCountProvider, ActionPromptProvider, UiHintPathSignificant {
private static final long serialVersionUID = 1L;
@@ -80,11 +79,17 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl
private static final String ID_ENTITY_ACTIONS = "entityActions";
private static final String ID_ACTION_PROMPT_MODAL_WINDOW = "actionPromptModalWindow";
+ private static final Predicate<ObjectAction> BULK = Filters.asPredicate(ObjectAction.Filters.bulk());
+
private DataTable<ObjectAdapter,String> dataTable;
public CollectionContentsAsAjaxTablePanel(final String id, final EntityCollectionModel model) {
super(id, model);
+ }
+ @Override
+ protected void onInitialize() {
+ super.onInitialize();
buildGui();
}
@@ -101,13 +106,32 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl
final SortableDataProvider<ObjectAdapter,String> dataProvider = new CollectionContentsSortableDataProvider(model);
dataTable = new IsisAjaxFallbackDataTable<ObjectAdapter,String>(ID_TABLE, columns, dataProvider, model.getPageSize());
-
+
addActionPromptModalWindow();
buildEntityActionsGui(bulkActions, this);
addOrReplace(dataTable);
+ configureHintsFor(dataTable);
}
-
+
+ private void configureHintsFor(DataTable<ObjectAdapter, String> dataTable) {
+ UiHintContainer uiHintContainer = getUiHintContainer();
+ if(uiHintContainer == null) {
+ return;
+ }
+ final String pageNumber = uiHintContainer.getHint(dataTable, "pageNumber");
+ if(pageNumber != null) {
+ try {
+ long parseLong = Long.parseLong(pageNumber);
+ dataTable.setCurrentPage(parseLong);
+ } catch(Exception ex) {
+ // ignore.
+ }
+ }
+ final long currentPage = dataTable.getCurrentPage();
+ uiHintContainer.setHint(dataTable, "pageNumber", ""+currentPage);
+ }
+
private void addToggleboxColumnIfRequired(final List<IColumn<ObjectAdapter,String>> columns, List<ObjectAction> bulkActions) {
final EntityCollectionModel entityCollectionModel = getModel();
if(bulkActions.isEmpty() || entityCollectionModel.isParented()) {
@@ -193,23 +217,6 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl
}
- public boolean isExploring() {
- return IsisContext.getDeploymentType().isExploring();
- }
- public boolean isPrototyping() {
- return IsisContext.getDeploymentType().isPrototyping();
- }
-
- /**
- * Protected so can be overridden in testing if required.
- */
- protected boolean isDebugMode() {
- // TODO: need to figure out how to switch into debug mode;
- // probably call a Debug toggle page, and stuff into
- // Session.getMetaData()
- return true;
- }
-
private void addTitleColumn(final List<IColumn<ObjectAdapter,String>> columns, ObjectAdapterMemento parentAdapterMementoIfAny, int maxTitleParented, int maxTitleStandalone) {
int maxTitleLength = getModel().isParented()? maxTitleParented: maxTitleStandalone;
@@ -290,6 +297,26 @@ public class CollectionContentsAsAjaxTablePanel extends PanelAbstract<EntityColl
// //////////////////////////////////////
+
+ public boolean isExploring() {
+ return IsisContext.getDeploymentType().isExploring();
+ }
+ public boolean isPrototyping() {
+ return IsisContext.getDeploymentType().isPrototyping();
+ }
+
+ /**
+ * Protected so can be overridden in testing if required.
+ */
+ protected boolean isDebugMode() {
+ // TODO: need to figure out how to switch into debug mode;
+ // probably call a Debug toggle page, and stuff into
+ // Session.getMetaData()
+ return true;
+ }
+
+
+ // //////////////////////////////////////
@Inject
private WicketViewerSettings settings;
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
index ceab997..ef9b869 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
@@ -35,24 +35,35 @@ import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.lang.Generics;
-public class IsisAjaxFallbackDataTable<T, S> extends DataTable<T, S>
-{
+import org.apache.isis.viewer.wicket.model.hints.UiHintPathSignificant;
+
+public class IsisAjaxFallbackDataTable<T, S> extends DataTable<T, S> implements UiHintPathSignificant {
private static final long serialVersionUID = 1L;
+ private final ISortableDataProvider<T, S> dataProvider;
public IsisAjaxFallbackDataTable(final String id, final List<? extends IColumn<T, S>> columns,
final ISortableDataProvider<T, S> dataProvider, final int rowsPerPage)
{
super(id, columns, dataProvider, rowsPerPage);
+ this.dataProvider = dataProvider;
setOutputMarkupId(true);
setVersioned(false);
- addTopToolbar(new IsisAjaxFallbackHeadersToolbar<S>(this, dataProvider));
- addBottomToolbar(new AjaxNavigationToolbar(this));
- addBottomToolbar(new NoRecordsToolbar(this));
- //setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
setItemReuseStrategy(new PreserveModelReuseStrategy());
}
@Override
+ protected void onInitialize() {
+ super.onInitialize();
+ buildGui();
+ }
+
+ private void buildGui() {
+ addTopToolbar(new IsisAjaxFallbackHeadersToolbar<S>(this, this.dataProvider));
+ addBottomToolbar(new IsisAjaxNavigationToolbar(this));
+ addBottomToolbar(new NoRecordsToolbar(this));
+ }
+
+ @Override
protected Item<T> newRowItem(final String id, final int index, final IModel<T> model)
{
return new OddEvenItem<T>(id, index, model);
@@ -122,4 +133,6 @@ public class IsisAjaxFallbackDataTable<T, S> extends DataTable<T, S>
}
}
+
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackHeadersToolbar.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackHeadersToolbar.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackHeadersToolbar.java
index daabcd5..7d4464b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackHeadersToolbar.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackHeadersToolbar.java
@@ -16,14 +16,17 @@
*/
package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable;
-import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.IAjaxCallListener;
-import org.apache.wicket.extensions.ajax.markup.html.repeater.data.sort.AjaxFallbackOrderByBorder;
+import org.apache.wicket.event.Broadcast;
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackHeadersToolbar;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortStateLocator;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
+import org.apache.isis.viewer.wicket.model.hints.UiHintsSetEvent;
+
/**
* Adapted from Wicket's own {@link AjaxFallbackHeadersToolbar}.
@@ -31,34 +34,42 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
public class IsisAjaxFallbackHeadersToolbar<S> extends IsisAjaxHeadersToolbar<S>
{
private static final long serialVersionUID = 1L;
+ private final ISortStateLocator<S> stateLocator;
public IsisAjaxFallbackHeadersToolbar(final DataTable<?, S> table, final ISortStateLocator<S> stateLocator)
{
super(table, stateLocator);
table.setOutputMarkupId(true);
+ this.stateLocator = stateLocator;
+ }
+
+ @Override
+ protected void onInitialize() {
+ super.onInitialize();
+ final UiHintContainer uiHintContainer = getUiHintContainer();
+ if(uiHintContainer != null) {
+ for (SortOrder sortOrder : SortOrder.values()) {
+ String property = uiHintContainer.getHint(getTable(), sortOrder.name());
+ if(property != null) {
+ // bit hacky... how know this is safe?
+ S propertyS = (S) property;
+ stateLocator.getSortState().setPropertySortOrder(propertyS, sortOrder);
+ }
+ }
+ }
+ }
+
+ public UiHintContainer getUiHintContainer() {
+ return UiHintContainer.Util.hintContainerOf(getTable());
}
+
+
@Override
protected WebMarkupContainer newSortableHeader(final String borderId, final S property,
final ISortStateLocator<S> locator)
{
- return new AjaxFallbackOrderByBorder<S>(borderId, property, locator, getAjaxCallListener())
- {
- private static final long serialVersionUID = 1L;
-
- @Override
- protected void onAjaxClick(final AjaxRequestTarget target)
- {
- target.add(getTable());
- }
-
- @Override
- protected void onSortChanged()
- {
- super.onSortChanged();
- getTable().setCurrentPage(0);
- }
- };
+ return new IsisAjaxFallbackOrderByBorder<S>(borderId, getTable(), property, locator, getAjaxCallListener());
}
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackOrderByBorder.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackOrderByBorder.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackOrderByBorder.java
new file mode 100644
index 0000000..0f9f476
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackOrderByBorder.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.IAjaxCallListener;
+import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.extensions.ajax.markup.html.repeater.data.sort.AjaxFallbackOrderByBorder;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortStateLocator;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
+
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
+import org.apache.isis.viewer.wicket.model.hints.UiHintsSetEvent;
+
+public class IsisAjaxFallbackOrderByBorder<T> extends AjaxFallbackOrderByBorder<T> {
+
+ private static final long serialVersionUID = 1L;
+
+ private final T sortProperty;
+ private final DataTable<?, ?> dataTable;
+
+ private final ISortStateLocator<T> stateLocator;
+
+ public IsisAjaxFallbackOrderByBorder(String id, DataTable<?, ?> dataTable, T sortProperty, ISortStateLocator<T> stateLocator, IAjaxCallListener ajaxCallListener) {
+ super(id, sortProperty, stateLocator, ajaxCallListener);
+ this.dataTable = dataTable;
+ this.stateLocator = stateLocator;
+ this.sortProperty = sortProperty;
+ }
+
+ @Override
+ protected void onAjaxClick(final AjaxRequestTarget target)
+ {
+ target.add(dataTable);
+
+ final UiHintContainer uiHintContainer = getUiHintContainer();
+ if(uiHintContainer != null) {
+ String hintKey = sortOrderName();
+ uiHintContainer.setHint(dataTable, hintKey, sortProperty.toString());
+ send(getPage(), Broadcast.EXACT, new UiHintsSetEvent(target));
+ }
+ }
+
+ private String sortOrderName() {
+ final ISortState<T> state = stateLocator.getSortState();
+ final SortOrder order = state.getPropertySortOrder(sortProperty);
+ return order.name();
+ }
+
+ @Override
+ protected void onSortChanged()
+ {
+ super.onSortChanged();
+ dataTable.setCurrentPage(0);
+
+ }
+
+ public UiHintContainer getUiHintContainer() {
+ return UiHintContainer.Util.hintContainerOf(dataTable);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxHeadersToolbar.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxHeadersToolbar.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxHeadersToolbar.java
index 05c9aa6..de6821c 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxHeadersToolbar.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxHeadersToolbar.java
@@ -131,20 +131,10 @@ public class IsisAjaxHeadersToolbar<S> extends AbstractToolbar
item.add(header);
item.setRenderBodyOnly(true);
+ Component label = new Label("label");
- Component label;
- //Component checkBox;
- //if(column instanceof ObjectAdapterToggleboxColumn) {
- label = new Label("label");
- // checkBox = column.getHeader("checkbox");
- // label.setVisible(false);
- //} else {
- label = column.getHeader("label");
- // checkBox = new CheckBox("checkbox");
- // checkBox.setVisible(false);
- // }
+ label = column.getHeader("label");
header.add(label);
- //header.add(checkBox);
}
};
add(headers);
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxNavigationToolbar.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxNavigationToolbar.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxNavigationToolbar.java
new file mode 100644
index 0000000..ddf893c
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxNavigationToolbar.java
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable;
+
+import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxNavigationToolbar;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
+import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
+
+
+public class IsisAjaxNavigationToolbar extends AjaxNavigationToolbar {
+
+ private static final long serialVersionUID = 1L;
+
+ public IsisAjaxNavigationToolbar(DataTable<?, ?> table) {
+ super(table);
+ }
+
+ @Override
+ protected PagingNavigator newPagingNavigator(String navigatorId, DataTable<?, ?> table) {
+ return new IsisAjaxPagingNavigator(navigatorId, table);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigation.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigation.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigation.java
new file mode 100644
index 0000000..8ce5919
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigation.java
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable;
+
+import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigation;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.markup.html.navigation.paging.IPageable;
+import org.apache.wicket.markup.html.navigation.paging.IPagingLabelProvider;
+
+
+public class IsisAjaxPagingNavigation extends AjaxPagingNavigation {
+
+ private static final long serialVersionUID = 1L;
+
+ public IsisAjaxPagingNavigation(String id, IPageable pageable, IPagingLabelProvider labelProvider) {
+ super(id, pageable, labelProvider);
+ }
+
+ public IsisAjaxPagingNavigation(String id, IPageable pageable) {
+ super(id, pageable);
+ }
+
+ @Override
+ protected Link<?> newPagingNavigationLink(String id, IPageable pageable, long pageIndex) {
+ return new IsisAjaxPagingNavigationLink(id, pageable, pageIndex);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigationIncrementLink.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigationIncrementLink.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigationIncrementLink.java
new file mode 100644
index 0000000..019dfd4
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigationIncrementLink.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigationIncrementLink;
+import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.markup.html.navigation.paging.IPageable;
+
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
+import org.apache.isis.viewer.wicket.model.hints.UiHintsSetEvent;
+
+public class IsisAjaxPagingNavigationIncrementLink extends AjaxPagingNavigationIncrementLink {
+
+ private static final long serialVersionUID = 1L;
+ private final Component component;
+
+ public IsisAjaxPagingNavigationIncrementLink(String id, IPageable pageable, int increment) {
+ super(id, pageable, increment);
+ component = pageable instanceof Component ? (Component) pageable : null;
+ }
+
+ @Override
+ public void onClick(AjaxRequestTarget target) {
+ super.onClick(target);
+ final UiHintContainer uiHintContainer = getUiHintContainer();
+ if(uiHintContainer != null) {
+ uiHintContainer.setHint(component, "pageNumber", ""+pageable.getCurrentPage());
+ send(getPage(), Broadcast.EXACT, new UiHintsSetEvent(target));
+ }
+ }
+
+ public UiHintContainer getUiHintContainer() {
+ return UiHintContainer.Util.hintContainerOf(component);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigationLink.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigationLink.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigationLink.java
new file mode 100644
index 0000000..62776f5
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigationLink.java
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigationLink;
+import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.markup.html.navigation.paging.IPageable;
+
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
+import org.apache.isis.viewer.wicket.model.hints.UiHintsSetEvent;
+
+public class IsisAjaxPagingNavigationLink extends AjaxPagingNavigationLink {
+
+ private static final long serialVersionUID = 1L;
+ private final Component component;
+
+ public IsisAjaxPagingNavigationLink(String id, IPageable pageable, long pageNumber) {
+ super(id, pageable, pageNumber);
+ component = pageable instanceof Component ? (Component) pageable : null;
+ }
+
+ @Override
+ public void onClick(AjaxRequestTarget target) {
+ super.onClick(target);
+ final UiHintContainer uiHintContainer = getUiHintContainer();
+ if(uiHintContainer != null) {
+ uiHintContainer.setHint(component, "pageNumber", ""+pageable.getCurrentPage());
+ send(getPage(), Broadcast.EXACT, new UiHintsSetEvent(target));
+ }
+ }
+
+ public UiHintContainer getUiHintContainer() {
+ return UiHintContainer.Util.hintContainerOf(component);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigator.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigator.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigator.java
new file mode 100644
index 0000000..c20f8d7
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxPagingNavigator.java
@@ -0,0 +1,52 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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.
+ */
+package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable;
+
+import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
+import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.markup.html.navigation.paging.IPageable;
+import org.apache.wicket.markup.html.navigation.paging.IPagingLabelProvider;
+import org.apache.wicket.markup.html.navigation.paging.PagingNavigation;
+
+
+public class IsisAjaxPagingNavigator extends AjaxPagingNavigator {
+
+ private static final long serialVersionUID = 1L;
+
+ public IsisAjaxPagingNavigator(String id, IPageable pageable, IPagingLabelProvider labelProvider) {
+ super(id, pageable, labelProvider);
+ }
+
+ public IsisAjaxPagingNavigator(String id, IPageable pageable) {
+ super(id, pageable);
+ }
+
+ @Override
+ protected AbstractLink newPagingNavigationLink(String id, IPageable pageable, int pageNumber) {
+ return new IsisAjaxPagingNavigationLink(id, pageable, pageNumber);
+ }
+
+ @Override
+ protected AbstractLink newPagingNavigationIncrementLink(String id, IPageable pageable, int increment) {
+ return new IsisAjaxPagingNavigationIncrementLink(id, pageable, increment);
+ }
+
+ @Override
+ protected PagingNavigation newNavigation(String id, IPageable pageable, IPagingLabelProvider labelProvider) {
+ return new IsisAjaxPagingNavigation(id, pageable, labelProvider);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanel.java
index 2546b6c..d3b9cb5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/selector/links/CollectionContentsLinksSelectorPanel.java
@@ -30,6 +30,7 @@ import org.apache.wicket.model.IModel;
import org.apache.isis.applib.annotation.Render.Type;
import org.apache.isis.core.metamodel.facets.members.resolve.RenderFacet;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
import org.apache.isis.viewer.wicket.ui.ComponentFactory;
import org.apache.isis.viewer.wicket.ui.ComponentType;
@@ -37,7 +38,6 @@ import org.apache.isis.viewer.wicket.ui.components.collection.CollectionCountPro
import org.apache.isis.viewer.wicket.ui.components.collection.CollectionPanel;
import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.CollectionContentsAsAjaxTablePanelFactory;
import org.apache.isis.viewer.wicket.ui.components.collectioncontents.unresolved.CollectionContentsAsUnresolvedPanelFactory;
-import org.apache.isis.viewer.wicket.ui.components.entity.collections.EntityCollectionsPanel;
import org.apache.isis.viewer.wicket.ui.selector.links.LinksSelectorPanelAbstract;
/**
@@ -62,6 +62,7 @@ public class CollectionContentsLinksSelectorPanel extends LinksSelectorPanelAbst
return model.asDummy();
}
+
/**
* return the index of {@link CollectionContentsAsUnresolvedPanelFactory unresolved panel} if present and not eager loading;
* else the index of {@link CollectionContentsAsAjaxTablePanelFactory ajax table} if present,
@@ -133,6 +134,10 @@ public class CollectionContentsLinksSelectorPanel extends LinksSelectorPanelAbst
* Yeah, agreed, it's a little bit hacky doing it this way, because it bakes
* in knowledge that this component is created, somehow, by a parent {@link CollectionPanel}.
* Perhaps it could be refactored to use a more general purpose observer pattern?
+ *
+ * <p>
+ * In fact, I've since discovered that Wicket has an event bus, which is used by the
+ * {@link UiHintContainer hinting mechanism}. So this ought to be relatively easy to do.
*/
protected void onSelect(AjaxRequestTarget target) {
super.onSelect(target);
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
index 8cd73b3..6a162f9 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
@@ -38,6 +38,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.ui.components.collection.CollectionPanel;
+import org.apache.isis.viewer.wicket.ui.components.widgets.containers.UiHintPathSignificantWebMarkupContainer;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -89,7 +90,7 @@ public class EntityCollectionsPanel extends PanelAbstract<EntityModel> {
for (final ObjectAssociation association : associations) {
- final WebMarkupContainer collectionRvContainer = new WebMarkupContainer(collectionRv.newChildId());
+ final WebMarkupContainer collectionRvContainer = new UiHintPathSignificantWebMarkupContainer(collectionRv.newChildId());
collectionRv.add(collectionRvContainer);
addCollectionToForm(entityModel, association, collectionRvContainer);
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.css
index 9f1612a..aff2cf5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.css
@@ -17,3 +17,20 @@
* under the License.
*/
+.entityIconAndTitlePanel a.zclip-copy {
+ background-image: url("../org.apache.isis.viewer.wicket.ui.components.entity.icontitle.EntityIconAndTitlePanel/copy-26.png");
+ background-position: right;
+ background-repeat: no-repeat;
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+.entityIconAndTitlePanel a.zclip-copy:hover,
+.entityIconAndTitlePanel a.zclip-copy.hover {
+ cursor: pointer;
+}
+
+.entityIconAndTitlePanel a.zclip-copy:active,
+.entityIconAndTitlePanel a.zclip-copy.active {
+ /* not required */
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.html
index df8cae4..bb9d9ed 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.html
@@ -21,7 +21,7 @@
<body>
<wicket:panel>
<span wicket:id="entityLinkWrapper" class="entityIconAndTitlePanel entityIconAndTitleComponentType">
- <a href="#" wicket:id="entityLink">
+ <a href="#" wicket:id="entityLink" class="entityUrlSource">
<img wicket:id="entityImage" class="entityImage"/>
<span wicket:id="entityTitle" class="entityTitle">[title]</span>
</a>
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index ec7e2b8..c230924 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -19,28 +19,48 @@
package org.apache.isis.viewer.wicket.ui.components.entity.icontitle;
+import java.net.ResponseCache;
+
+import com.google.common.base.Strings;
import com.google.inject.Inject;
import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.Component;
import org.apache.wicket.Page;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.event.IEvent;
+import org.apache.wicket.markup.head.JavaScriptContentHeaderItem;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.wicket.model.hints.UiHintsBroadcastEvent;
+import org.apache.isis.viewer.wicket.model.hints.UiHintsSetEvent;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
+import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
import org.apache.isis.viewer.wicket.model.models.PageType;
import org.apache.isis.viewer.wicket.ui.components.entity.EntityActionLinkFactory;
+import org.apache.isis.viewer.wicket.ui.components.widgets.zclip.ZeroClipboardLink;
+import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.Components;
import org.apache.isis.viewer.wicket.ui.util.Links;
/**
@@ -49,7 +69,6 @@ import org.apache.isis.viewer.wicket.ui.util.Links;
*/
public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
-
private static final long serialVersionUID = 1L;
private static final String ID_ENTITY_LINK_WRAPPER = "entityLinkWrapper";
@@ -57,8 +76,9 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
private static final String ID_ENTITY_TITLE = "entityTitle";
private static final String ID_ENTITY_ICON = "entityImage";
-
+ @SuppressWarnings("unused")
private Label label;
+ @SuppressWarnings("unused")
private Image image;
public EntityIconAndTitlePanel(final String id, final EntityModel entityModel) {
@@ -80,6 +100,7 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
private void buildGui() {
addOrReplaceLinkWrapper();
+ setOutputMarkupId(true);
}
private void addOrReplaceLinkWrapper() {
@@ -90,23 +111,25 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
private WebMarkupContainer addOrReplaceLinkWrapper(final EntityModel entityModel) {
final ObjectAdapter adapter = entityModel.getObject();
- final PageParameters pageParameters = EntityModel.createPageParameters(adapter);
- final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ENTITY);
-
- final AbstractLink link = newLink(ID_ENTITY_LINK, pageClass, pageParameters);
-
- link.addOrReplace(this.label = newLabel(ID_ENTITY_TITLE));
- link.addOrReplace(this.image = newImage(ID_ENTITY_ICON, adapter));
+ final PageParameters pageParameters = entityModel.getPageParameters();
- link.add(new AttributeModifier("title", adapter.getSpecification().getSingularName()));
+ final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ENTITY);
final WebMarkupContainer entityLinkWrapper = new WebMarkupContainer(ID_ENTITY_LINK_WRAPPER);
+ final AbstractLink link = createIconAndTitle(adapter, pageParameters, pageClass);
entityLinkWrapper.addOrReplace(link);
+
return entityLinkWrapper;
}
- protected AbstractLink newLink(final String linkId, final Class<? extends Page> pageClass, final PageParameters pageParameters) {
- return Links.newBookmarkablePageLink(linkId, pageParameters, pageClass);
+ private AbstractLink createIconAndTitle(final ObjectAdapter adapter, final PageParameters pageParameters, final Class<? extends Page> pageClass) {
+ final AbstractLink link = Links.newBookmarkablePageLinkWithHints(ID_ENTITY_LINK, pageParameters, pageClass);
+
+ link.addOrReplace(this.label = newLabel(ID_ENTITY_TITLE));
+ link.addOrReplace(this.image = newImage(ID_ENTITY_ICON, adapter));
+
+ link.add(new AttributeModifier("title", adapter.getSpecification().getSingularName()));
+ return link;
}
protected Label newLabel(final String id) {
@@ -137,10 +160,9 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
}
protected Image newImage(final String id, final ObjectAdapter adapter) {
- Image image;
final ResourceReference imageResource = imageCache.resourceReferenceFor(adapter);
- image = new Image(id, imageResource) {
+ final Image image = new Image(id, imageResource) {
private static final long serialVersionUID = 1L;
@Override
protected boolean shouldAddAntiCacheParameter() {
@@ -166,6 +188,22 @@ public class EntityIconAndTitlePanel extends PanelAbstract<EntityModel> {
// ///////////////////////////////////////////////////////////////////
+ // UI Hints
+ // ///////////////////////////////////////////////////////////////////
+
+ /* (non-Javadoc)
+ * @see org.apache.wicket.Component#onEvent(org.apache.wicket.event.IEvent)
+ */
+ @Override
+ public void onEvent(IEvent<?> event) {
+ if(event.getPayload() instanceof UiHintsBroadcastEvent) {
+ UiHintsBroadcastEvent ev = (UiHintsBroadcastEvent) event.getPayload();
+ buildGui();
+ ev.getTarget().add(this);
+ }
+ }
+
+ // ///////////////////////////////////////////////////////////////////
// Convenience
// ///////////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
index 54ca1a8..d13dc50 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
@@ -23,11 +23,15 @@ import java.util.Map;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.RestartResponseException;
import org.apache.wicket.Session;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
import org.apache.wicket.ajax.attributes.IAjaxCallListener;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler;
+import org.apache.wicket.core.request.handler.PageProvider;
+import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
@@ -37,6 +41,9 @@ import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.Model;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.http.handler.RedirectRequestHandler;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
@@ -65,6 +72,7 @@ import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.components.widgets.containers.UiHintPathSignificantWebMarkupContainer;
import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.CancelHintRequired;
import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour;
import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
@@ -217,7 +225,7 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
@SuppressWarnings("unused")
Component component;
for (final ObjectAssociation association : associationsInGroup) {
- final WebMarkupContainer propertyRvContainer = new WebMarkupContainer(propertyRv.newChildId());
+ final WebMarkupContainer propertyRvContainer = new UiHintPathSignificantWebMarkupContainer(propertyRv.newChildId());
propertyRv.add(propertyRvContainer);
addPropertyToForm(entityModel, association, propertyRvContainer);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanel.java
index 36c8d2c..378f277 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanel.java
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.wicket.model.IModel;
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.ui.ComponentFactory;
import org.apache.isis.viewer.wicket.ui.ComponentType;
@@ -54,4 +55,10 @@ public class EntityLinksSelectorPanel extends LinksSelectorPanelAbstract<EntityM
return 0;
}
+ @Override
+ public UiHintContainer getUiHintContainer() {
+ // disables hinting by this component
+ return null;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/bb2d31e1/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 0d7c34e..2021994 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -32,7 +32,6 @@ import org.apache.wicket.model.Model;
import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
import org.apache.isis.core.metamodel.facets.maxlen.MaxLengthFacet;
-import org.apache.isis.core.metamodel.facets.multiline.MultiLineFacet;
import org.apache.isis.core.metamodel.facets.typicallen.TypicalLengthFacet;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;