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.

2014-07-05 Thread thiagohp
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.

2014-07-04 Thread thiagohp
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