You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2015/02/28 00:34:00 UTC
svn commit: r1662855 [1/12] - in
/portals/jetspeed-2/applications/j2-admin/trunk: ./
src/main/java/org/apache/jetspeed/jetapp/
src/main/java/org/apache/jetspeed/jetapp/dto/ src/main/webapp/WEB-INF/
src/main/webapp/jetapp/ src/main/webapp/jetapp/bower_c...
Author: taylor
Date: Fri Feb 27 23:33:58 2015
New Revision: 1662855
URL: http://svn.apache.org/r1662855
Log:
JS2-1316: implemented new J2-Admin Profiler portlet with AngularJS framework. This portlet currently requires a responsive decorator
Added:
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppAuthResult.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppCredentials.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppPortlet.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppPortletFilter.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppTokenPortlet.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/ProfilerAdminPortlet.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/RestAuthClient.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/DtoAdminBasePrefs.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/DtoError.java
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/wro.properties
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/wro.xml
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/app.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/angular-cookies.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/angular-route.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/angular.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/bootstrap.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/jquery.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/lodash.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/modernizr-2.8.3.min.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/moment.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/ng-grid-2.0.14.min.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/ng-grid-flexible-height.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/ui-bootstrap-tpls.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_licenses/
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_licenses/BOILERPLATE_LICENSE.md
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_licenses/BOOTSTRAP_LICENSE
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_licenses/JQUERY_MIT_LICENSE.txt
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_licenses/LODASH_LICENSE
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_licenses/MIT_LICENSE
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_licenses/MOMENT_LICENSE
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_licenses/NG_GRID_LICENSE.md
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/images/
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/j2-admin-skin.css
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/scripts/
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/scripts/PortletService.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/scripts/RestApiService.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/scripts/ServerService.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/scripts/TextMessages.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/scripts/controllers.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/scripts/directives.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/scripts/filters.js
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/styles/
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/styles/app.css
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/styles/default.css
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/styles/ng-grid.min.css
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/views/
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/views/modals/
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/views/modals/criteria-detail.html
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/views/modals/profile-detail.html
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/views/modals/profiles-delete.html
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/views/profiler-admin-edit.jsp
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/views/profiler-admin.jsp
Modified:
portals/jetspeed-2/applications/j2-admin/trunk/pom.xml
portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/portlet.xml
Modified: portals/jetspeed-2/applications/j2-admin/trunk/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/pom.xml?rev=1662855&r1=1662854&r2=1662855&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/pom.xml (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/pom.xml Fri Feb 27 23:33:58 2015
@@ -59,6 +59,7 @@
<velocity.version>1.6.4</velocity.version>
<xerces.version>2.8.1</xerces.version>
<wicket.version>1.4.17</wicket.version>
+ <jackson.version>2.2.3</jackson.version>
</properties>
<!-- Dependencies -->
@@ -199,6 +200,11 @@
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
</dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>${jackson.version}</version>
+ </dependency>
<!-- Runtime Dependencies -->
<dependency>
@@ -447,9 +453,37 @@
<skip>true</skip>
</configuration>
</plugin>
+ <plugin>
+ <groupId>ro.isdc.wro4j</groupId>
+ <artifactId>wro4j-maven-plugin</artifactId>
+ <version>1.6.3</version>
+ </plugin>
</plugins>
</pluginManagement>
-
+ <plugins>
+ <plugin>
+ <groupId>ro.isdc.wro4j</groupId>
+ <artifactId>wro4j-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>compile</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <targetGroups>J2_ADMIN_EXTERNAL_JS,J2_ADMIN_INTERNAL_JS</targetGroups>
+ <minimize>false</minimize>
+ <destinationFolder>${basedir}/target/${project.artifactId}-${project.version}/wro/</destinationFolder>
+ <!--<cssDestinationFolder>d:/static/css/</cssDestinationFolder>-->
+ <!--<jsDestinationFolder>d:/static/js/</jsDestinationFolder>-->
+ <contextFolder>${basedir}/src/main/webapp/</contextFolder>
+ <wroFile>${basedir}/src/main/webapp/WEB-INF/wro.xml</wroFile>
+ <ignoreMissingResources>false</ignoreMissingResources>
+ </configuration>
+ </plugin>
+ </plugins>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppAuthResult.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppAuthResult.java?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppAuthResult.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppAuthResult.java Fri Feb 27 23:33:58 2015
@@ -0,0 +1,46 @@
+/*
+ * 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.jetspeed.jetapp;
+
+/**
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class JetAppAuthResult {
+
+ private boolean success = true;
+ private String token = "42";
+
+ public JetAppAuthResult() {}
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public String getToken() {
+ return token;
+ }
+
+ public void setToken(String token) {
+ this.token = token;
+ }
+}
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppCredentials.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppCredentials.java?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppCredentials.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppCredentials.java Fri Feb 27 23:33:58 2015
@@ -0,0 +1,69 @@
+/*
+ * 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.jetspeed.jetapp;
+
+/**
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class JetAppCredentials {
+
+ private String username;
+ private String password;
+ private String endpoint;
+ private String appName;
+
+ public JetAppCredentials(String username, String password, String endpoint, String appName) {
+ this.username = username;
+ this.password = password;
+ this.endpoint = endpoint;
+ this.appName = appName;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getEndpoint() {
+ return endpoint;
+ }
+
+ public void setEndpoint(String endpoint) {
+ this.endpoint = endpoint;
+ }
+
+ public String getAppName() {
+ return appName;
+ }
+
+ public void setAppName(String appName) {
+ this.appName = appName;
+ }
+}
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppPortlet.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppPortlet.java?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppPortlet.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppPortlet.java Fri Feb 27 23:33:58 2015
@@ -0,0 +1,226 @@
+/*
+ * 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.jetspeed.jetapp;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.PortalReservedParameters;
+import org.apache.jetspeed.jetapp.dto.DtoError;
+import org.w3c.dom.Element;
+
+import javax.portlet.GenericPortlet;
+import javax.portlet.MimeResponse;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.lang.reflect.Method;
+
+/**
+ * Base Jet App portlet, providing a little help for managing Jet App CSS and JS resource by injecting
+ * web resources into portal header phase. Jetspeed handles duplicated resources by ID, ensuring only
+ * one resource is included. Recommended to use with a web resource optimizer.
+ * In J2-Admin, we employ WRO4J
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class JetAppPortlet extends GenericPortlet {
+
+ protected static Log log = LogFactory.getLog(JetAppPortlet.class);
+
+ // Web Resource IDs
+ protected static final String J2_ADMIN_CSS_ID = "j2admin_css";
+ protected static final String J2_ADMIN_EXTERNAL_SCRIPT_ID = "j2admin_ext_script";
+ protected static final String J2_ADMIN_INTERNAL_SCRIPT_ID = "j2admin_int_script";
+
+ // Web Resources
+ protected static String[][] PRODUCTION_STYLES = {
+ // {"/wro/J2_ADMIN_CSS.css", J2_ADMIN_CSS_ID},
+ {"/jetapp/j2-admin-skin.css", J2_ADMIN_CSS_ID}
+ };
+
+ protected static String[][] DEV_STYLES = {
+ {"/jetapp/j2-admin-skin.css", J2_ADMIN_CSS_ID}
+ };
+
+ protected static String[][] PRODUCTION_SCRIPTS = {
+ {"/wro/J2_ADMIN_EXTERNAL_JS.js", J2_ADMIN_EXTERNAL_SCRIPT_ID},
+ {"/wro/J2_ADMIN_INTERNAL_JS.js", J2_ADMIN_INTERNAL_SCRIPT_ID}
+ };
+
+ protected static String[][] DEV_SCRIPTS = {
+ { "/wro/J2_ADMIN_EXTERNAL_JS.js", J2_ADMIN_EXTERNAL_SCRIPT_ID},
+ { "/jetapp/scripts/TextMessages.js", "j2admin_text"},
+ { "/jetapp/scripts/ServerService.js", "j2admin_server"},
+ { "/jetapp/scripts/RestApiService.js", "j2admin_services"},
+ { "/jetapp/scripts/PortletService.js", "j2admin_portlet"},
+ { "/jetapp/app.js", "j2admin_app"},
+ { "/jetapp/scripts/controllers.js", "j2admin_controllers"},
+ { "/jetapp/scripts/directives.js", "j2admin_directives"},
+ { "/jetapp/scripts/filters.js", "j2admin_filters"}
+ };
+
+ protected final static String PREFS_VIEW = "View";
+ protected final static String PREFS_EDIT = "Edit";
+
+
+ // use merged and minified resources when releasing
+ public static final boolean DEV_MODE = true;
+
+ @Override
+ public void init(PortletConfig config) throws PortletException {
+ super.init(config);
+ }
+
+ @Override
+ protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
+
+ response.setContentType("text/html");
+ if (authenticate(request, response)) {
+ String url = request.getPreferences().getValue(PREFS_VIEW, "/jetapp/views/profiler-admin.jsp" );
+ PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher(url);
+ dispatcher.include(request, response);
+ }
+ }
+
+ protected boolean authenticate(RenderRequest request, RenderResponse response) throws PortletException, IOException {
+ return true;
+ }
+
+ private void addJavaScript(RenderResponse response, String scriptPath, String scriptId) {
+ Element headElem = response.createElement("script");
+ headElem.setAttribute("language", "javascript");
+ if (scriptId != null) {
+ headElem.setAttribute("id", scriptId);
+ }
+ headElem.setAttribute("src", scriptPath);
+ headElem.setAttribute("type", "text/javascript");
+ response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, headElem);
+ }
+
+ private void addStyleLink(RenderResponse response, String cssPath, String cssId) {
+ Element headElem = response.createElement("link");
+ headElem.setAttribute("rel", "stylesheet");
+ if (cssId != null) {
+ headElem.setAttribute("id", cssId);
+ }
+ headElem.setAttribute("href", cssPath);
+ headElem.setAttribute("type", "text/css");
+ response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, headElem);
+ }
+
+ @Override
+ protected void doHeaders(RenderRequest request, RenderResponse response) {
+ super.doHeaders(request, response);
+
+ if (alreadyContributedHeaders(request))
+ return;
+
+ String[][] styles = (DEV_MODE) ? DEV_STYLES : PRODUCTION_STYLES;
+ String[][] scripts = (DEV_MODE) ? DEV_SCRIPTS : PRODUCTION_SCRIPTS;
+
+ for (String[] pair : styles) {
+ addStyleLink(response, request.getContextPath() + pair[0], pair[1]);
+ }
+
+ for (String[] pair : scripts) {
+ addJavaScript(response, request.getContextPath() + pair[0], pair[1]);
+ }
+
+ }
+
+
+
+ public String createError(int httpCode, String message) throws IOException {
+ DtoError error = new DtoError(httpCode, message);
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
+ StringWriter writer = new StringWriter();
+ objectMapper.writeValue(writer, error);
+ return writer.toString();
+ }
+
+ protected static HttpServletRequest getServletRequest(RenderRequest request) {
+ Object context = request.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
+ if (context != null) {
+ try {
+ Method getRequest = context.getClass().getMethod("getRequest");
+ if (getRequest != null) {
+ return (HttpServletRequest)getRequest.invoke(context);
+ }
+ }
+ catch (Exception e2) {
+ log.error("Failed to retrieve portal servlet request: " + e2.getMessage(), e2);
+ return null;
+ }
+ }
+ return null;
+ }
+ // JBossAS7...
+ // try {
+ // return (HttpServletRequest) PolicyContext.getContext("javax.servlet.http.HttpServletRequest");
+ // }
+ // catch (Exception e) {
+ // log.error("Failed to retrieve portal servlet request: " + e.getMessage(), e);
+ // }
+
+
+ protected final static String GW_DASHBOARD_PORTLET_FLAG = "gw.dashboard.portlet.flag";
+
+ protected boolean alreadyContributedHeaders(RenderRequest renderRequest) {
+ HttpServletRequest request = getServletRequest(renderRequest);
+ if (request == null)
+ return false;
+ Boolean contributed = (Boolean)request.getAttribute(GW_DASHBOARD_PORTLET_FLAG);
+ if (contributed == null || contributed == false) {
+ request.setAttribute(GW_DASHBOARD_PORTLET_FLAG, Boolean.TRUE);
+ return false;
+ }
+ return true;
+ }
+
+ private static final int BLOCK_SIZE = 4096;
+
+ public static void drain(Reader r, Writer w) throws IOException {
+ char[] bytes = new char[BLOCK_SIZE];
+ try {
+ int length = r.read(bytes);
+ while (length != -1) {
+ if (length != 0) {
+ w.write(bytes, 0, length);
+ }
+ length = r.read(bytes);
+ }
+ } finally {
+ bytes = null;
+ }
+
+ }
+
+}
+
+
+
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppPortletFilter.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppPortletFilter.java?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppPortletFilter.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppPortletFilter.java Fri Feb 27 23:33:58 2015
@@ -0,0 +1,76 @@
+/*
+ * 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.jetspeed.jetapp;
+
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.filter.FilterChain;
+import javax.portlet.filter.FilterConfig;
+import javax.portlet.filter.RenderFilter;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+/**
+ * Injects a single angular initialization function, ensuring that only one angular bootstrap statement
+ * is included per rendered page of portlets
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class JetAppPortletFilter implements RenderFilter {
+
+ protected final static String JET_DASHBOARD_ANGULAR_FLAG = "jet.dashboard.angular.flag";
+
+
+ public void doFilter(RenderRequest request, RenderResponse response,
+ FilterChain filterChain) throws IOException, PortletException {
+ filterChain.doFilter(request, response);
+ includeAngular(request, response);
+ }
+
+ public void destroy() {
+ }
+
+ public void init(FilterConfig filterConfig) throws PortletException {
+ }
+
+ protected void includeAngular(RenderRequest request, RenderResponse response) throws PortletException, IOException {
+ String useAngular = request.getPreferences().getValue("jetapp", null);
+ if (useAngular != null && useAngular.equalsIgnoreCase("true")) {
+ if (!alreadyContributedAngular(request)) {
+ response.getWriter().println("<script>\n angular.element(document).ready(function() {\n" +
+ " angular.bootstrap(document, ['j2admin']);\n" +
+ " });\n</script>\n");
+ }
+ }
+ }
+
+ protected boolean alreadyContributedAngular(RenderRequest renderRequest) {
+ HttpServletRequest request = JetAppPortlet.getServletRequest(renderRequest);
+ if (request == null)
+ return false;
+ Boolean contributed = (Boolean) request.getAttribute(JET_DASHBOARD_ANGULAR_FLAG);
+ if (contributed == null || contributed == false) {
+ request.setAttribute(JET_DASHBOARD_ANGULAR_FLAG, Boolean.TRUE);
+ return false;
+ }
+ return true;
+ }
+
+
+}
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppTokenPortlet.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppTokenPortlet.java?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppTokenPortlet.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/JetAppTokenPortlet.java Fri Feb 27 23:33:58 2015
@@ -0,0 +1,78 @@
+/*
+ * 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.jetspeed.jetapp;
+
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.servlet.http.Cookie;
+import java.io.IOException;
+
+/**
+ * Extends JetApp Portlet, adding support for using API Tokens from server side
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class JetAppTokenPortlet extends JetAppPortlet {
+
+ protected final static String MSG_MISSING_REST_SERVICE_PARAM = "<b>Missing initialization parameter. Cannot connect to API Server - missing param: %s</b>";
+ protected static final String MISSING_INIT_PARAMETER = "Missing initialization parameter for app: ";
+
+ protected final static String SESSION_JETAPP_TOKEN = "JetAppToken";
+ protected final static String JET_APP_NAME = "j2-admin";
+
+ protected static final String COOKIE_JETAPP_TOKEN = "JetAppToken";
+ protected static final String COOKIE_JETAPP_REST_SERVICE = "JetAppRestService";
+ protected final static String MSG_FAILED_AUTHENTICATE = "<b>Failed to authenticate. Cannot connect to API Server</b>";
+
+ protected JetAppCredentials getCredentials() {
+ return new JetAppCredentials("user", "user", "http://localhost/services", JET_APP_NAME);
+ }
+ protected boolean authenticate(RenderRequest request, RenderResponse response) throws PortletException, IOException {
+ String token = (String)request.getPortletSession(true).getAttribute(SESSION_JETAPP_TOKEN);
+ if (token == null) {
+ JetAppCredentials credentials = getCredentials();
+ Cookie restCookie = new Cookie(COOKIE_JETAPP_REST_SERVICE, credentials.getEndpoint());
+ restCookie.setPath("/");
+ response.addProperty(restCookie);
+
+ try {
+ RestAuthClient client = new RestAuthClient(credentials);
+ JetAppAuthResult result = client.login();
+ if (result.isSuccess()) {
+ token = result.getToken();
+ Cookie tokenCookie = new Cookie(COOKIE_JETAPP_TOKEN, token);
+ tokenCookie.setPath("/");
+ response.addProperty(tokenCookie);
+ request.getPortletSession().setAttribute(SESSION_JETAPP_TOKEN, token);
+ return true;
+ }
+ log.error("Failed authentication in for app: " + JET_APP_NAME);
+ response.getWriter().println(MSG_FAILED_AUTHENTICATE);
+ return false;
+ }
+ catch (Exception e) {
+ log.error("Exception during authentication in Dashboard: " + e.getMessage(), e);
+ response.getWriter().println(MSG_FAILED_AUTHENTICATE);
+ return false;
+ }
+ }
+ return true;
+ }
+
+}
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/ProfilerAdminPortlet.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/ProfilerAdminPortlet.java?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/ProfilerAdminPortlet.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/ProfilerAdminPortlet.java Fri Feb 27 23:33:58 2015
@@ -0,0 +1,95 @@
+/*
+ * 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.jetspeed.jetapp;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.jetapp.dto.DtoAdminBasePrefs;
+
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.ResourceRequest;
+import javax.portlet.ResourceResponse;
+import java.io.IOException;
+import java.io.StringWriter;
+
+/**
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class ProfilerAdminPortlet extends JetAppPortlet {
+
+ protected static Log log = LogFactory.getLog(ProfilerAdminPortlet.class);
+
+ protected static final String PREFS_ROWS_PER_PAGE = "rowsPerPage";
+
+ @Override
+ public void init(PortletConfig config) throws PortletException {
+ super.init(config);
+ }
+
+ @Override
+ protected void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
+ super.doView(request, response);
+ }
+
+ @Override
+ protected void doEdit(RenderRequest request, RenderResponse response) throws PortletException, IOException {
+ response.setContentType("text/html");
+ if (authenticate(request, response)) {
+ PortletRequestDispatcher dispatcher = null;
+ String url = request.getPreferences().getValue(PREFS_EDIT, "/jetapp/views/profiler-admin-edit.jsp" );
+ dispatcher = getPortletContext().getRequestDispatcher(url);
+ dispatcher.include(request, response);
+ }
+ }
+
+ @Override
+ public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
+ String resourceID = request.getResourceID();
+ if (resourceID == null) {
+ response.addProperty(ResourceResponse.HTTP_STATUS_CODE, "400");
+ response.getWriter().println(createError(400, "invalid resource id"));
+ return;
+ }
+ if (resourceID.equals("writePrefs")) {
+ StringWriter writer = new StringWriter();
+ drain(request.getReader(), writer);
+ String json = writer.toString();
+ ObjectMapper writeMapper = new ObjectMapper();
+ DtoAdminBasePrefs update = writeMapper.readValue(json, DtoAdminBasePrefs.class);
+ request.getPreferences().setValue(PREFS_ROWS_PER_PAGE , Integer.toString(update.getRowsPerPage()));
+ request.getPreferences().store();
+ }
+ DtoAdminBasePrefs prefs = new DtoAdminBasePrefs();
+ prefs.setRowsPerPage(Integer.parseInt(request.getPreferences().getValue(PREFS_ROWS_PER_PAGE , "20")));
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
+ StringWriter writer = new StringWriter();
+ objectMapper.writeValue(writer, prefs);
+ response.getWriter().println(writer);
+ }
+
+
+
+}
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/RestAuthClient.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/RestAuthClient.java?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/RestAuthClient.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/RestAuthClient.java Fri Feb 27 23:33:58 2015
@@ -0,0 +1,32 @@
+/*
+ * 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.jetspeed.jetapp;
+
+/**
+ * Extends JetApp Portlet, adding support for using API Tokens from server side
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class RestAuthClient {
+
+ public RestAuthClient(JetAppCredentials credentials) {}
+
+ public JetAppAuthResult login() {
+ return new JetAppAuthResult();
+ }
+}
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/DtoAdminBasePrefs.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/DtoAdminBasePrefs.java?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/DtoAdminBasePrefs.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/DtoAdminBasePrefs.java Fri Feb 27 23:33:58 2015
@@ -0,0 +1,39 @@
+/*
+ * 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.jetspeed.jetapp.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+/**
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class DtoAdminBasePrefs {
+
+ private int rowsPerPage;
+
+ public int getRowsPerPage() {
+ return rowsPerPage;
+ }
+
+ public void setRowsPerPage(int rowsPerPage) {
+ this.rowsPerPage = rowsPerPage;
+ }
+
+}
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/DtoError.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/DtoError.java?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/DtoError.java (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/jetapp/dto/DtoError.java Fri Feb 27 23:33:58 2015
@@ -0,0 +1,49 @@
+/*
+ * 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.jetspeed.jetapp.dto;
+
+/**
+ *
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public class DtoError {
+
+ private int status;
+ private String message;
+
+ public DtoError(int status, String message) {
+ this.status = status;
+ this.message = message;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
Modified: portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/portlet.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/portlet.xml?rev=1662855&r1=1662854&r2=1662855&view=diff
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/portlet.xml (original)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/portlet.xml Fri Feb 27 23:33:58 2015
@@ -2719,7 +2719,43 @@
<keywords>clone,portlet,management,admin</keywords>
</portlet-info>
</portlet>
-
+
+ <portlet>
+ <description>Profiler Maintenance</description>
+ <portlet-name>ProfilerAdmin</portlet-name>
+ <display-name>Profiler Maintenance</display-name>
+ <portlet-class>org.apache.jetspeed.jetapp.ProfilerAdminPortlet</portlet-class>
+ <supports>
+ <mime-type>text/html</mime-type>
+ <portlet-mode>VIEW</portlet-mode>
+ <portlet-mode>EDIT</portlet-mode>
+ </supports>
+ <supported-locale>en</supported-locale>
+ <portlet-info>
+ <title>Profiler Admin</title>
+ <short-title>Profiler</short-title>
+ <keywords>admin,profiler</keywords>
+ </portlet-info>
+ <portlet-preferences>
+ <preference>
+ <name>View</name>
+ <value>/jetapp/views/profiler-admin.jsp</value>
+ </preference>
+ <preference>
+ <name>Edit</name>
+ <value>/jetapp/views/profiler-admin-edit.jsp</value>
+ </preference>
+ <preference>
+ <name>rowsPerPage</name>
+ <value>20</value>
+ </preference>
+ <preference>
+ <name>jetapp</name>
+ <value>true</value>
+ </preference>
+ </portlet-preferences>
+ </portlet>
+
<custom-portlet-mode>
<description>Custom About Mode</description>
<portlet-mode>about</portlet-mode>
@@ -2740,5 +2776,16 @@
<description>Custom Print Mode</description>
<portlet-mode>print</portlet-mode>
</custom-portlet-mode>
-
+
+ <filter>
+ <filter-name>JetAppPortletFilter</filter-name>
+ <filter-class>org.apache.jetspeed.jetapp.JetAppPortletFilter</filter-class>
+ <lifecycle>RENDER_PHASE</lifecycle>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>JetAppPortletFilter</filter-name>
+ <portlet-name>*</portlet-name>
+ </filter-mapping>
+
</portlet-app>
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/wro.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/wro.properties?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/wro.properties (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/wro.properties Fri Feb 27 23:33:58 2015
@@ -0,0 +1,51 @@
+#If true, it is DEVELOPMENT mode, by default this value is true
+debug=false
+# Integer value for specifying how often (in seconds) the resource changes should be checked.
+# When this value is 0, the cache is never refreshed. When a resource change is detected, the
+# cached group containing changed resource will be invalidated. This is useful during development,
+# when resources are changed often.
+# resourceChangeUpdateInterval=5
+
+# Default is true
+gzipEnabled=true
+jmxEnabled=false
+# MBean name to be used if JMX is enabled
+mbeanName=wro
+# Default is 0
+# cacheUpdatePeriod=7200
+cacheUpdatePeriod=0
+# Default is 0
+#modelUpdatePeriod=7200
+modelUpdatePeriod=0
+# Default is false.
+disableCache=false
+# Default is UTF-8
+encoding=UTF-8
+
+# The alias of the HashStrategy used to compute ETags & cache keys. Value can be CRC32/MD5/SHA-1.
+hashStrategy=MD5
+# The alias of the NamingStrategy used to rename bundles. Value can be noOp/timestamp/hashEncoder/folderHashEncoder.
+namingStrategy=folderHashEncoder
+# Connection timeout, for external resources (JS/CSS files from other sites)
+connectionTimeout=5000
+
+# When this flag is disabled (false), any missing resource will cause an exception. Default is true.
+ignoreMissingResources=true
+# When a group is empty and this flag is false, the processing will fail. Default is true.
+ignoreEmptyGroup=true
+# When this flag is true, any failure during processing will leave the content unchanged. Default is false.
+ignoreFailingProcessor=true
+
+cacheGzippedContent=true
+
+parallelPreprocessing=true
+managerFactoryClassName=ro.isdc.wro.manager.factory.ConfigurableWroManagerFactory
+#managerFactoryClassName=ro.isdc.wro.examples.manager.CustomWroManagerFactory
+#managerFactoryClassName=ro.isdc.wro.examples.manager.CustomExtensionsWroManagerFactory
+#preProcessors=fallbackCssDataUri,cssUrlRewriting,cssImport,semicolonAppender,yuiCssMin
+#,lessCss,coffeeScript
+#,cssMin,lessCss,coffeeScript,
+uriLocators=servletContext.DISPATCHER_FIRST,uri,classpath
+#servletContext.SERVLET_CONTEXT_FIRST
+#postProcessors=jsMin
+#header=Expires: Thu, 15 Apr 2020 20:00:00 GMT | cache-control:public
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/wro.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/wro.xml?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/wro.xml (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/WEB-INF/wro.xml Fri Feb 27 23:33:58 2015
@@ -0,0 +1,41 @@
+<groups xmlns="http://www.isdc.ro/wro">
+
+
+ <!--<group name="J2_ADMIN_CSS">-->
+ <!--<css>/jetapp/bower_components/html5-boilerplate/dist/css/normalize.css</css>-->
+ <!--<css>/jetapp/bower_components/html5-boilerplate/dist/css/main.css</css>-->
+ <!--<css>/jetapp/bower_components/bootstrap/dist/css/bootstrap.min.css</css>-->
+ <!--<css>/jetapp/bower_components/bootstrap/dist/css/bootstrap-theme.min.css</css>-->
+ <!--<css>/jetapp/styles/ng-grid.min.css</css>-->
+ <!--<css>/jetapp/styles/app.css</css>-->
+ <!--<css>/jetapp/styles/default.css</css>-->
+ <!--</group>-->
+
+
+ <group name="J2_ADMIN_EXTERNAL_JS">
+ <js minimize="false">/jetapp/bower_components/jquery.js</js>
+ <js minimize="false">/jetapp/bower_components/modernizr-2.8.3.min.js</js>
+ <js minimize="false">/jetapp/bower_components/bootstrap.js</js>
+ <js minimize="false">/jetapp/bower_components/lodash.js</js>
+ <js minimize="false">/jetapp/bower_components/moment.js</js>
+ <js minimize="false">/jetapp/bower_components/angular.js</js>
+ <js minimize="false">/jetapp/bower_components/angular-route.js</js>
+ <js minimize="false">/jetapp/bower_components/ui-bootstrap-tpls.js</js>
+ <js minimize="false">/jetapp/bower_components/angular-cookies.js</js>
+ <js minimize="false">/jetapp/bower_components/ng-grid-2.0.14.min.js</js>
+ <js minimize="false">/jetapp/bower_components/ng-grid-flexible-height.js</js>
+ </group>
+
+ <!-- TODO: minimize in production build -->
+ <group name="J2_ADMIN_INTERNAL_JS">
+ <js minimize="false">/jetapp/scripts/TextMessages.js</js>
+ <js minimize="false">/jetapp/scripts/ServerService.js</js>
+ <js minimize="false">/jetapp/scripts/RestApiService.js</js>
+ <js minimize="false">/jetapp/scripts/PortletService.js</js>
+ <js minimize="false">/jetapp/app.js</js>
+ <js minimize="false">/jetapp/scripts/controllers.js</js>
+ <js minimize="false">/jetapp/scripts/directives.js</js>
+ <js minimize="false">/jetapp/scripts/filters.js</js>
+ </group>
+
+</groups>
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/app.js
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/app.js?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/app.js (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/app.js Fri Feb 27 23:33:58 2015
@@ -0,0 +1,21 @@
+'use strict';
+
+// Declare app level module which depends on filters, and services
+angular.module('j2admin', [
+ 'ngRoute',
+ 'ngGrid',
+ 'ui.bootstrap',
+ 'ngCookies',
+ 'j2admin.filters',
+// 'j2admin.services',
+ 'j2admin.directives',
+ 'j2admin.controllers'
+])
+ .factory('ServerService', ['$cookies', ServerService])
+ .factory('TextMessages', [TextMessages])
+ .factory('DataService', ['$http', '$q', 'ServerService', RestService])
+ .factory('PortletService', ['$http', '$q', 'ServerService', PortletService])
+ .config(['$routeProvider', function ($routeProvider) {
+ $routeProvider.when('/monitor', {templateUrl: 'views/monitor.html'});
+ $routeProvider.otherwise({redirectTo: '/monitor'});
+ }]);
Added: portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/angular-cookies.js
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/angular-cookies.js?rev=1662855&view=auto
==============================================================================
--- portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/angular-cookies.js (added)
+++ portals/jetspeed-2/applications/j2-admin/trunk/src/main/webapp/jetapp/bower_components/angular-cookies.js Fri Feb 27 23:33:58 2015
@@ -0,0 +1,206 @@
+/**
+ * @license AngularJS v1.3.11
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/**
+ * @ngdoc module
+ * @name ngCookies
+ * @description
+ *
+ * # ngCookies
+ *
+ * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
+ *
+ *
+ * <div doc-module-components="ngCookies"></div>
+ *
+ * See {@link ngCookies.$cookies `$cookies`} and
+ * {@link ngCookies.$cookieStore `$cookieStore`} for usage.
+ */
+
+
+angular.module('ngCookies', ['ng']).
+ /**
+ * @ngdoc service
+ * @name $cookies
+ *
+ * @description
+ * Provides read/write access to browser's cookies.
+ *
+ * Only a simple Object is exposed and by adding or removing properties to/from this object, new
+ * cookies are created/deleted at the end of current $eval.
+ * The object's properties can only be strings.
+ *
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
+ *
+ * @example
+ *
+ * ```js
+ * angular.module('cookiesExample', ['ngCookies'])
+ * .controller('ExampleController', ['$cookies', function($cookies) {
+ * // Retrieving a cookie
+ * var favoriteCookie = $cookies.myFavorite;
+ * // Setting a cookie
+ * $cookies.myFavorite = 'oatmeal';
+ * }]);
+ * ```
+ */
+ factory('$cookies', ['$rootScope', '$browser', function($rootScope, $browser) {
+ var cookies = {},
+ lastCookies = {},
+ lastBrowserCookies,
+ runEval = false,
+ copy = angular.copy,
+ isUndefined = angular.isUndefined;
+
+ //creates a poller fn that copies all cookies from the $browser to service & inits the service
+ $browser.addPollFn(function() {
+ var currentCookies = $browser.cookies();
+ if (lastBrowserCookies != currentCookies) { //relies on browser.cookies() impl
+ lastBrowserCookies = currentCookies;
+ copy(currentCookies, lastCookies);
+ copy(currentCookies, cookies);
+ if (runEval) $rootScope.$apply();
+ }
+ })();
+
+ runEval = true;
+
+ //at the end of each eval, push cookies
+ //TODO: this should happen before the "delayed" watches fire, because if some cookies are not
+ // strings or browser refuses to store some cookies, we update the model in the push fn.
+ $rootScope.$watch(push);
+
+ return cookies;
+
+
+ /**
+ * Pushes all the cookies from the service to the browser and verifies if all cookies were
+ * stored.
+ */
+ function push() {
+ var name,
+ value,
+ browserCookies,
+ updated;
+
+ //delete any cookies deleted in $cookies
+ for (name in lastCookies) {
+ if (isUndefined(cookies[name])) {
+ $browser.cookies(name, undefined);
+ }
+ }
+
+ //update all cookies updated in $cookies
+ for (name in cookies) {
+ value = cookies[name];
+ if (!angular.isString(value)) {
+ value = '' + value;
+ cookies[name] = value;
+ }
+ if (value !== lastCookies[name]) {
+ $browser.cookies(name, value);
+ updated = true;
+ }
+ }
+
+ //verify what was actually stored
+ if (updated) {
+ updated = false;
+ browserCookies = $browser.cookies();
+
+ for (name in cookies) {
+ if (cookies[name] !== browserCookies[name]) {
+ //delete or reset all cookies that the browser dropped from $cookies
+ if (isUndefined(browserCookies[name])) {
+ delete cookies[name];
+ } else {
+ cookies[name] = browserCookies[name];
+ }
+ updated = true;
+ }
+ }
+ }
+ }
+ }]).
+
+
+ /**
+ * @ngdoc service
+ * @name $cookieStore
+ * @requires $cookies
+ *
+ * @description
+ * Provides a key-value (string-object) storage, that is backed by session cookies.
+ * Objects put or retrieved from this storage are automatically serialized or
+ * deserialized by angular's toJson/fromJson.
+ *
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
+ *
+ * @example
+ *
+ * ```js
+ * angular.module('cookieStoreExample', ['ngCookies'])
+ * .controller('ExampleController', ['$cookieStore', function($cookieStore) {
+ * // Put cookie
+ * $cookieStore.put('myFavorite','oatmeal');
+ * // Get cookie
+ * var favoriteCookie = $cookieStore.get('myFavorite');
+ * // Removing a cookie
+ * $cookieStore.remove('myFavorite');
+ * }]);
+ * ```
+ */
+ factory('$cookieStore', ['$cookies', function($cookies) {
+
+ return {
+ /**
+ * @ngdoc method
+ * @name $cookieStore#get
+ *
+ * @description
+ * Returns the value of given cookie key
+ *
+ * @param {string} key Id to use for lookup.
+ * @returns {Object} Deserialized cookie value.
+ */
+ get: function(key) {
+ var value = $cookies[key];
+ return value ? angular.fromJson(value) : value;
+ },
+
+ /**
+ * @ngdoc method
+ * @name $cookieStore#put
+ *
+ * @description
+ * Sets a value for given cookie key
+ *
+ * @param {string} key Id for the `value`.
+ * @param {Object} value Value to be stored.
+ */
+ put: function(key, value) {
+ $cookies[key] = angular.toJson(value);
+ },
+
+ /**
+ * @ngdoc method
+ * @name $cookieStore#remove
+ *
+ * @description
+ * Remove given cookie
+ *
+ * @param {string} key Id of the key-value pair to delete.
+ */
+ remove: function(key) {
+ delete $cookies[key];
+ }
+ };
+
+ }]);
+
+
+})(window, window.angular);
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org