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 2016/02/15 09:54:19 UTC
[2/2] isis git commit: ISIS-993: better derivation of default grid
from existing metadata when none is available.
ISIS-993: better derivation of default grid from existing metadata when none is available.
Also:
- allow actions to be associated in @MemberOrder#name with fieldset ids; wire up to first property within that fieldset
- associate the (framework-provided downloadLayoutXml and downloadJdoMetadata actions with "metadata" fieldset.
- some fixes for CSS for dropdowns
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/697bcdbc
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/697bcdbc
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/697bcdbc
Branch: refs/heads/ISIS-993
Commit: 697bcdbc59341a10f4bb6f645bb3c856ab6226fc
Parents: 2bde2a1
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Feb 15 08:54:05 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Feb 15 08:54:05 2016 +0000
----------------------------------------------------------------------
.../layout/Object_downloadLayoutXml.java | 5 +-
.../facets/object/grid/GridFacetDefault.java | 3 +-
.../bootstrap3/GridNormalizerServiceBS3.java | 73 +++++++++++++++-----
.../Persistable_downloadJdoMetadata.java | 5 +-
.../wicket/ui/pages/bootstrap-overrides.css | 9 +++
5 files changed, 72 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/697bcdbc/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_downloadLayoutXml.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_downloadLayoutXml.java b/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_downloadLayoutXml.java
index 3679e0a..eee95b0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_downloadLayoutXml.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_downloadLayoutXml.java
@@ -49,9 +49,10 @@ public class Object_downloadLayoutXml {
restrictTo = RestrictTo.PROTOTYPING
)
@ActionLayout(
- cssClassFa = "fa-download"
+ cssClassFa = "fa-download",
+ position = ActionLayout.Position.PANEL_DROPDOWN
)
- @MemberOrder(sequence = "550.1")
+ @MemberOrder(name = "Metadata", sequence = "550.1")
public Object $$(
@ParameterLayout(named = "File name")
final String fileName,
http://git-wip-us.apache.org/repos/asf/isis/blob/697bcdbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
index 9cdabb5..e02efde 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
@@ -150,8 +150,9 @@ public class GridFacetDefault
final List<String> leftMemberGroups = memberGroupNames;
for (String memberGroup : leftMemberGroups) {
final FieldSet fieldSet = new FieldSet();
- fieldSet.setId(memberGroup); // to bind to later via @MemberOrder#name()
fieldSet.setName(memberGroup);
+ // fieldSet's id will be derived from the name later
+ // during normalization phase.
if(unreferencedProperties && col.getFieldSets().isEmpty()) {
fieldSet.setUnreferencedProperties(true);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/697bcdbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridNormalizerServiceBS3.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridNormalizerServiceBS3.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridNormalizerServiceBS3.java
index 1cb65c9..d5aed0c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridNormalizerServiceBS3.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridNormalizerServiceBS3.java
@@ -26,11 +26,13 @@ import javax.annotation.Nullable;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
+import com.google.common.base.Strings;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.layout.component.ActionLayoutData;
@@ -71,7 +73,8 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
final Grid grid,
final Map<String, OneToOneAssociation> oneToOneAssociationById,
final Map<String, OneToManyAssociation> oneToManyAssociationById,
- final Map<String, ObjectAction> objectActionById, final ObjectSpecification objectSpec) {
+ final Map<String, ObjectAction> objectActionById,
+ final ObjectSpecification objectSpec) {
final BS3Grid bs3Grid = (BS3Grid) grid;
@@ -83,6 +86,7 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
// find all row and col ids
// ensure that all Ids are different
+ final List<String> gridIds = Lists.newArrayList();
final LinkedHashMap<String, BS3Row> rowIds = Maps.newLinkedHashMap();
final LinkedHashMap<String, BS3Col> colIds = Maps.newLinkedHashMap();
final LinkedHashMap<String, FieldSet> fieldSetIds = Maps.newLinkedHashMap();
@@ -96,12 +100,13 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
if(id == null) {
return;
}
- if(rowIds.containsKey(id) || colIds.containsKey(id)) {
- bs3Row.setMetadataError("There is another col with this id");
+ if(gridIds.contains(id)) {
+ bs3Row.setMetadataError("There is another element in the grid with this id");
duplicateIdDetected.set(true);
return;
}
rowIds.put(id, bs3Row);
+ gridIds.add(id);
}
@Override
@@ -110,26 +115,29 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
if(id == null) {
return;
}
- if(rowIds.containsKey(id) || colIds.containsKey(id)) {
- bs3Col.setMetadataError("There is another col with this id");
+ if(gridIds.contains(id)) {
+ bs3Col.setMetadataError("There is another element in the grid with this id");
duplicateIdDetected.set(true);
return;
}
colIds.put(id, bs3Col);
+ gridIds.add(id);
}
@Override
public void visit(final FieldSet fieldSet) {
- final String id = fieldSet.getId();
+ String id = fieldSet.getId();
if(id == null) {
- return;
+ final String name = fieldSet.getName();
+ fieldSet.setId(id = asId(name));
}
- if(rowIds.containsKey(id) || fieldSetIds.containsKey(id)) {
- fieldSet.setMetadataError("There is another fieldset with this id");
+ if(gridIds.contains(id)) {
+ fieldSet.setMetadataError("There is another element in the grid with this id");
duplicateIdDetected.set(true);
return;
}
fieldSetIds.put(id, fieldSet);
+ gridIds.add(id);
}
});
@@ -231,20 +239,19 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
propertyIds.get(surplusPropertyId).setMetadataError("No such property");
}
+ final Map<String, List<OneToOneAssociation>> boundAssociationsByFieldSetId = Maps.newHashMap();
if(!missingPropertyIds.isEmpty()) {
- final Map<String, List<OneToOneAssociation>> boundAssociationsByFieldSetId = Maps.newHashMap();
final List<String> unboundPropertyIds = Lists.newArrayList(missingPropertyIds);
for (String missingPropertyId : missingPropertyIds) {
final OneToOneAssociation otoa = oneToOneAssociationById.get(missingPropertyId);
final MemberOrderFacet memberOrderFacet = otoa.getFacet(MemberOrderFacet.class);
if(memberOrderFacet != null) {
- final String name = memberOrderFacet.name();
- if(fieldSetIds.containsKey(name)) {
- List<OneToOneAssociation> boundAssociations =
- boundAssociationsByFieldSetId.get(name);
+ final String id = asId(memberOrderFacet.name());
+ if(fieldSetIds.containsKey(id)) {
+ List<OneToOneAssociation> boundAssociations = boundAssociationsByFieldSetId.get(id);
if(boundAssociations == null) {
boundAssociations = Lists.newArrayList();
- boundAssociationsByFieldSetId.put(name, boundAssociations);
+ boundAssociationsByFieldSetId.put(id, boundAssociations);
}
boundAssociations.add(otoa);
unboundPropertyIds.remove(missingPropertyId);
@@ -316,7 +323,8 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
final List<String> missingActionIds =
FluentIterable.from(actionIdTuple.second)
.filter(new Predicate<String>() {
- @Override public boolean apply(@Nullable final String actionId) {
+ @Override
+ public boolean apply(final String actionId) {
final ObjectAction oa = objectActionById.get(actionId);
final MemberOrderFacet memberOrderFacet = oa.getFacet(MemberOrderFacet.class);
if(memberOrderFacet == null) {
@@ -326,8 +334,29 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
if (memberOrderName == null) {
return true;
}
- return !oneToOneAssociationById.containsKey(memberOrderName) &&
- !oneToManyAssociationById.containsKey(memberOrderName);
+ final String id = asId(memberOrderName);
+ if (oneToOneAssociationById.containsKey(id)) {
+ return false;
+ }
+ if (oneToManyAssociationById.containsKey(id)) {
+ return false;
+ }
+ // if the @MemberOrder references a field set, then don't mark it as missing, but
+ // instead explicitly add it to the list of actions of that fieldset.
+ // (note we only do this provided we already know that
+ // there is at least one property for said fieldset)
+ if(boundAssociationsByFieldSetId.containsKey(id)) {
+ final List<OneToOneAssociation> oneToOneAssociations =
+ boundAssociationsByFieldSetId.get(id);
+ if(!oneToOneAssociations.isEmpty()) {
+ final ActionLayoutData actionLayoutData = new ActionLayoutData(actionId);
+ actionLayoutData.setPosition(ActionLayout.Position.PANEL_DROPDOWN);
+ fieldSetIds.get(id).getActions().add(actionLayoutData);
+ }
+ return false;
+ }
+ // is missing after all.
+ return true;
}
})
.toList();
@@ -351,6 +380,14 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
return true;
}
+ static String asId(final String str) {
+ if(Strings.isNullOrEmpty(str)) {
+ return str;
+ }
+ final char c = str.charAt(0);
+ return Character.toLowerCase(c) + str.substring(1).replaceAll("\\s+", "");
+ }
+
private static Comparator<ObjectAssociation> byMemberOrderSequence() {
return new Comparator<ObjectAssociation>() {
private final DeweyOrderComparator deweyOrderComparator = new DeweyOrderComparator();
http://git-wip-us.apache.org/repos/asf/isis/blob/697bcdbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_downloadJdoMetadata.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_downloadJdoMetadata.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_downloadJdoMetadata.java
index ffa1368..d0b136f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_downloadJdoMetadata.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_downloadJdoMetadata.java
@@ -52,9 +52,10 @@ public class Persistable_downloadJdoMetadata {
restrictTo = RestrictTo.PROTOTYPING
)
@ActionLayout(
- cssClassFa = "fa-download"
+ cssClassFa = "fa-download",
+ position = ActionLayout.Position.PANEL_DROPDOWN
)
- @MemberOrder(sequence = "800.1")
+ @MemberOrder(name = "Metadata", sequence = "800.1")
public Clob $$(
@ParameterLayout(named = ".jdo file name")
final String fileName) throws JAXBException, IOException {
http://git-wip-us.apache.org/repos/asf/isis/blob/697bcdbc/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index 5df7fcb..83954d7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -365,6 +365,7 @@ div.entityHeaderPanel .iconAndTitle{
div.entityHeaderPanel .iconAndTitleLabel {
float: left;
+ margin-bottom: 10px;
}
div.entityHeaderPanel .entityActions .cssMenuPanel .cssMenuItems:first-child {
@@ -756,4 +757,12 @@ tr.headers th form input {
.tabbable {
padding-bottom: 10px;
+}
+
+.additionalLinkListDropDown ul.dropdown-menu li.additionalLinkItem {
+ width: 100%;
+}
+.additionalLinkListDropDown ul.dropdown-menu {
+ padding-top: 0%;
+ padding-bottom: 0%;
}
\ No newline at end of file