git commit: Partial implementation of TAP5-2192 : a new Component Libraries tab was added to the T5Dashboard, presenting information and the list of components, pages and mixins from each one.
Repository: tapestry-5 Updated Branches: refs/heads/master 6843db06f -> c4d8d6c30 Partial implementation of TAP5-2192 : a new Component Libraries tab was added to the T5Dashboard, presenting information and the list of components, pages and mixins from each one. Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/c4d8d6c3 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/c4d8d6c3 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/c4d8d6c3 Branch: refs/heads/master Commit: c4d8d6c3035fa278276e85cb4f37d37c9f90171b Parents: 6843db0 Author: Thiago H. de Paula Figueiredo Authored: Sat Jul 5 15:08:12 2014 -0300 Committer: Thiago H. de Paula Figueiredo Committed: Sat Jul 5 15:08:12 2014 -0300 -- .../corelib/pages/ComponentLibraries.java | 77 +++- .../services/ComponentLibraryInfo.java | 15 .../corelib/pages/ComponentLibraries.tml| 24 +++--- .../ComponentLibrariesCatalogPageTests.groovy | 53 ++ 4 files changed, 157 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/c4d8d6c3/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java -- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java index 6e27f6c..362d5f7 100644 --- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java +++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java @@ -19,12 +19,16 @@ import java.util.List; import org.apache.tapestry5.Block; import org.apache.tapestry5.annotations.Cached; +import org.apache.tapestry5.annotations.OnEvent; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.annotations.UnknownActivationContextCheck; import org.apache.tapestry5.annotations.WhitelistAccessOnly; import org.apache.tapestry5.ioc.annotations.Inject; +import org.apache.tapestry5.json.JSONArray; +import org.apache.tapestry5.json.JSONObject; import org.apache.tapestry5.services.ComponentClassResolver; import org.apache.tapestry5.services.ComponentLibraryInfo; +import org.apache.tapestry5.util.TextStreamResponse; /** * Page used to describe the component libraries being used in the application. @@ -133,7 +137,12 @@ public class ComponentLibraries private String getClassName() { -final String className; +return getClassName(logicalName, type, componentClassResolver); +} + +private static String getClassName(String logicalName, Type type, ComponentClassResolver componentClassResolver) +{ +String className; switch (type) { case PAGE: className = componentClassResolver.resolvePageNameToClassName(logicalName); break; @@ -148,5 +157,71 @@ public class ComponentLibraries { return logicalName.replace("core/", ""); } + +@OnEvent("json") +Object generateJSONDescription(String libraryName) +{ +this.libraryName = libraryName; +JSONObject object = new JSONObject(); +object.put("libraryName", libraryName); +final ComponentLibraryInfo info = getInfo(); +if (info != null) +{ +JSONObject infoJsonObject = new JSONObject(); +putIfNotNull("description", info.getDescription(), infoJsonObject); +putIfNotNull("homepage", info.getHomepageUrl(), infoJsonObject); +putIfNotNull("documentationUrl", info.getDocumentationUrl(), infoJsonObject); +putIfNotNull("javadocUrl", info.getJavadocUrl(), infoJsonObject); +putIfNotNull("groupId", info.getGroupId(), infoJsonObject); +putIfNotNull("artifactId", info.getArtifactId(), infoJsonObject); +putIfNotNull("version", info.getVersion(), infoJsonObject); +putIfNotNull("sourceBrowseUrl", info.getSourceBrowseUrl(), infoJsonObject); +putIfNotNull("sourceRootUrl", info.getSourceRootUrl(), infoJsonObject); +putIfNotNull("issueTrackerUrl", info.getIssueTrackerUrl(), infoJsonObject); +putIfNotNull("dependencyInfoUrl", info.getDependencyManagementInfoUrl(), infoJsonObject); + +object.put("info", infoJsonObject); + +} + +addClasses("components", filter(componentClassResolver.getComponentNames()), Type.COMPONENT, info, object); +addClasses("pages", filter(componentClassResolver.getPageNames()), Type.PAGE, info, object); +addClasses("mixins", filter(componentClassResolver.getMixinNames()),
git commit: Partial implementation of TAP5-2192 : a new Component Libraries tab was added to the T5Dashboard, presenting information and the list of components, pages and mixins from each one.
Repository: tapestry-5 Updated Branches: refs/heads/master ee0220c64 -> 6843db06f Partial implementation of TAP5-2192 : a new Component Libraries tab was added to the T5Dashboard, presenting information and the list of components, pages and mixins from each one. Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/6843db06 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/6843db06 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/6843db06 Branch: refs/heads/master Commit: 6843db06f07427cdc00e2b556dcb1077269a134b Parents: ee0220c Author: Thiago H. de Paula Figueiredo Authored: Fri Jul 4 16:48:43 2014 -0300 Committer: Thiago H. de Paula Figueiredo Committed: Fri Jul 4 16:48:43 2014 -0300 -- .../corelib/pages/ComponentLibraries.java | 152 + .../tapestry5/corelib/pages/ServiceStatus.java | 2 +- .../services/ComponentClassResolverImpl.java| 34 ++ .../tapestry5/modules/DashboardModule.java | 3 +- .../tapestry5/modules/TapestryModule.java | 18 +- .../services/ComponentClassResolver.java| 24 +- .../services/ComponentLibraryInfo.java | 324 +++ .../tapestry5/services/LibraryMapping.java | 37 ++- .../org/apache/tapestry5/core.properties| 7 +- .../corelib/pages/ComponentLibraries.tml| 126 10 files changed, 717 insertions(+), 10 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/6843db06/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java -- diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java new file mode 100644 index 000..6e27f6c --- /dev/null +++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/ComponentLibraries.java @@ -0,0 +1,152 @@ +// Copyright 2014 The Apache Software Foundation +// +// Licensed 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.tapestry5.corelib.pages; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.tapestry5.Block; +import org.apache.tapestry5.annotations.Cached; +import org.apache.tapestry5.annotations.Property; +import org.apache.tapestry5.annotations.UnknownActivationContextCheck; +import org.apache.tapestry5.annotations.WhitelistAccessOnly; +import org.apache.tapestry5.ioc.annotations.Inject; +import org.apache.tapestry5.services.ComponentClassResolver; +import org.apache.tapestry5.services.ComponentLibraryInfo; + +/** + * Page used to describe the component libraries being used in the application. + * Notice: the implementation of this page was done to avoid creating components, so the + * Tapestry 5 Core Library didn't get polluted with internal-only components. + */ +@UnknownActivationContextCheck(false) +@WhitelistAccessOnly +public class ComponentLibraries +{ + +private static enum Type { PAGE, COMPONENT, MIXIN } + +@Inject +private ComponentClassResolver componentClassResolver; + +@Property +private String libraryName; + +@Property +private String logicalName; + +@Property +private List logicalNames; + +@Property +private String headerName; + +@Property +private List pages; + +@Property +private List components; + +@Property +private List mixins; + +private Type type; + +@Inject +private Block classesTable; + +@Cached(watch="libraryName") +public ComponentLibraryInfo getInfo() +{ +return componentClassResolver.getComponentLibraryInfo(libraryName); +} + +public List getLibraryNames() { +return componentClassResolver.getLibraryNames(); +} + +public String getLibraryClientId() +{ +return libraryName.replace("/", "-"); +} + +private List filter(final List allNames) +{ +List logicalNames = new ArrayList(); +for (String name : allNames) +{ + +if (name.startsWith(libraryName + "/") && !(libraryName.equals("core") && name.endsWith("Test"))) +{ +logicalNames.a