You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by jc...@apache.org on 2011/05/20 15:24:36 UTC

svn commit: r1125374 - in /incubator/rave/trunk/rave-portal: ./ src/main/java/org/apache/rave/portal/model/ src/main/java/org/apache/rave/portal/web/api/ src/main/java/org/apache/rave/portal/web/model/ src/main/webapp/WEB-INF/

Author: jcian
Date: Fri May 20 13:24:35 2011
New Revision: 1125374

URL: http://svn.apache.org/viewvc?rev=1125374&view=rev
Log:
Checking in work in progress on RAVE-27 so Matt can get going with some work he's waiting to start.  In this commit: 
-- First bits of a restful Rave API based on Spring 3.0 MVC
-- Plumbing required for the Spring 3.0 MVC based web services
-- First bits of code for persisting RegionWidget user preferences

https://issues.apache.org/jira/browse/RAVE-27

Added:
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/RegionWidgetPreference.java
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/RegionWidgetApi.java
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/WidgetApi.java
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/model/
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/model/RegionWidgetPreferenceListWrapper.java
Modified:
    incubator/rave/trunk/rave-portal/pom.xml
    incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/RegionWidget.java
    incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/dispatcher-servlet.xml

Modified: incubator/rave/trunk/rave-portal/pom.xml
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/pom.xml?rev=1125374&r1=1125373&r2=1125374&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/pom.xml (original)
+++ incubator/rave/trunk/rave-portal/pom.xml Fri May 20 13:24:35 2011
@@ -98,11 +98,19 @@ if needed you can specify it on the comm
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-config</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-openid</artifactId>
             <version>${org.springframework.version}</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-oxm</artifactId>
+            <version>${org.springframework.version}</version>
+        </dependency>
+
         <dependency>
           <groupId>org.openid4java</groupId>
           <artifactId>openid4java-consumer</artifactId>
@@ -110,6 +118,13 @@ if needed you can specify it on the comm
           <type>pom</type>
         </dependency>
 
+		<!-- Jackson JSON Mapper -->
+		<dependency>
+			<groupId>org.codehaus.jackson</groupId>
+			<artifactId>jackson-mapper-asl</artifactId>
+			<version>1.8.1</version>
+		</dependency>
+
         <!--Persistence-->
         <dependency>
             <groupId>org.apache.openjpa</groupId>

Modified: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/RegionWidget.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/RegionWidget.java?rev=1125374&r1=1125373&r2=1125374&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/RegionWidget.java (original)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/RegionWidget.java Fri May 20 13:24:35 2011
@@ -19,6 +19,7 @@
 package org.apache.rave.portal.model;
 
 import javax.persistence.*;
+import java.util.Collection;
 
 /**
  * A widget within a region
@@ -41,6 +42,9 @@ public class RegionWidget {
     @Basic @Column(name="collapsed")
     private boolean collapsed;
 
+    @OneToMany(fetch = FetchType.EAGER)
+    @JoinColumn(name = "region_widget_id")
+    private Collection<RegionWidgetPreference> preferences;
 
     /**
      * Gets the persistence unique identifier
@@ -99,4 +103,17 @@ public class RegionWidget {
     public void setCollapsed(boolean collapsed) {
         this.collapsed = collapsed;
     }
+
+    /**
+     * Gets the collection of user defined preferences for this RegionWidget.
+     *
+     * @return The user defined preferences for this RegionWidget.
+     */
+    public Collection<RegionWidgetPreference> getPreferences() {
+        return preferences;
+    }
+
+    public void setPreferences(Collection<RegionWidgetPreference> preferences) {
+        this.preferences = preferences;
+    }
 }
\ No newline at end of file

Added: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/RegionWidgetPreference.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/RegionWidgetPreference.java?rev=1125374&view=auto
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/RegionWidgetPreference.java (added)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/model/RegionWidgetPreference.java Fri May 20 13:24:35 2011
@@ -0,0 +1,93 @@
+/*
+ * 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.rave.portal.model;
+
+import javax.persistence.*;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * A preference for a region widget.
+ */
+@Entity
+@Table(name = "region_widget_preference")
+@SequenceGenerator(name = "regionWidgetPrefIdSeq", sequenceName = "region_widget_pref_id_seq")
+@XmlRootElement
+public class RegionWidgetPreference {
+    @Id
+    @Column(name = "id")
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "regionWidgetPrefIdSeq")
+    private Long id;
+
+    @Basic
+    @Column(name = "name")
+    private String name;
+
+    @Basic
+    @Column(name = "value")
+    private String value;
+
+    /**
+     * Gets the persistence unique identifier
+     *
+     * @return id The ID of persisted object; null if not persisted
+     */
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**
+     * Gets the name of the preference
+     *
+     * @return The name of the preference
+     */
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * Gets the value of this preference
+     *
+     * @return The value of this preference
+     */
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public String toString() {
+        return "RegionWidgetPreference{" +
+                "id=" + id +
+                ", name='" + name + '\'' +
+                ", value='" + value + '\'' +
+                '}';
+    }
+}
\ No newline at end of file

Added: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/RegionWidgetApi.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/RegionWidgetApi.java?rev=1125374&view=auto
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/RegionWidgetApi.java (added)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/RegionWidgetApi.java Fri May 20 13:24:35 2011
@@ -0,0 +1,58 @@
+/*
+ * 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.rave.portal.web.api;
+
+import org.apache.rave.portal.model.RegionWidgetPreference;
+import org.apache.rave.portal.web.model.RegionWidgetPreferenceListWrapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Handler for all services exposed under the /api/regionWidgets path.
+ */
+@Controller
+@RequestMapping("/api/regionWidgets")
+public class RegionWidgetApi {
+    private static Logger logger = LoggerFactory.getLogger(RegionWidgetApi.class);
+
+    @ResponseBody
+    @RequestMapping(value = "/{regionWidgetId}/preferences", method = RequestMethod.PUT)
+    public RegionWidgetPreferenceListWrapper replaceAllRegionWidgetPreferences(@PathVariable String regionWidgetId,
+                                                                               @RequestBody RegionWidgetPreferenceListWrapper
+                                                                                       regionWidgetPreferences) {
+        logger.debug("PUT received to replace all preferences for regionWidget: " + regionWidgetId + " with data: " +
+                regionWidgetPreferences);
+
+        return regionWidgetPreferences;
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "/{regionWidgetId}/preferences/{regionWidgetPreferenceName}", method = RequestMethod.PUT)
+    public RegionWidgetPreference createOrReplaceRegionWidgetPreference(@PathVariable String regionWidgetId,
+                                                                        @PathVariable String regionWidgetPreferenceName,
+                                                                        @RequestBody RegionWidgetPreference regionWidgetPreference) {
+        logger.debug("PUT received to create or replace preference: " + regionWidgetPreferenceName + " for regionWidget: " +
+                regionWidgetId + " with data: " + regionWidgetPreference);
+
+        return regionWidgetPreference;
+    }
+}
\ No newline at end of file

Added: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/WidgetApi.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/WidgetApi.java?rev=1125374&view=auto
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/WidgetApi.java (added)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/api/WidgetApi.java Fri May 20 13:24:35 2011
@@ -0,0 +1,41 @@
+/*
+ * 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.rave.portal.web.api;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+/**
+ * Handler for all services exposed under the /api/widgets path.
+ */
+@Controller
+@RequestMapping("/api/widgets")
+public class WidgetApi {
+    private static Logger logger = LoggerFactory.getLogger(WidgetApi.class);
+
+    @RequestMapping(value = "/", method = RequestMethod.GET)
+    public void getAllWidgets() {
+        logger.debug("GET received for all widgets");
+        throw new UnsupportedOperationException("Not yet implemented");
+    }
+}
\ No newline at end of file

Added: incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/model/RegionWidgetPreferenceListWrapper.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/model/RegionWidgetPreferenceListWrapper.java?rev=1125374&view=auto
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/model/RegionWidgetPreferenceListWrapper.java (added)
+++ incubator/rave/trunk/rave-portal/src/main/java/org/apache/rave/portal/web/model/RegionWidgetPreferenceListWrapper.java Fri May 20 13:24:35 2011
@@ -0,0 +1,57 @@
+/*
+ * 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.rave.portal.web.model;
+
+import org.apache.rave.portal.model.RegionWidgetPreference;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.List;
+
+/**
+ * A simple wrapper class so that JAXB can properly marshall and unmarshall a list of RegionWidgetPreference.
+ */
+@XmlRootElement(name = "regionWidgetPreferences")
+public class RegionWidgetPreferenceListWrapper {
+    private List<RegionWidgetPreference> preferences;
+
+    public RegionWidgetPreferenceListWrapper() {
+    }
+
+    public RegionWidgetPreferenceListWrapper(List<RegionWidgetPreference> preferences) {
+        this.preferences = preferences;
+    }
+
+    @XmlElement(name = "regionWidgetPreference")
+    public List<RegionWidgetPreference> getPreferences() {
+        return preferences;
+    }
+
+    public void setPreferences(List<RegionWidgetPreference> preferences) {
+        this.preferences = preferences;
+    }
+
+    @Override
+    public String toString() {
+        return "RegionWidgetPreferenceListWrapper{" +
+                "preferences=" + preferences +
+                '}';
+    }
+}

Modified: incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/dispatcher-servlet.xml
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/dispatcher-servlet.xml?rev=1125374&r1=1125373&r2=1125374&view=diff
==============================================================================
--- incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/dispatcher-servlet.xml (original)
+++ incubator/rave/trunk/rave-portal/src/main/webapp/WEB-INF/dispatcher-servlet.xml Fri May 20 13:24:35 2011
@@ -20,12 +20,16 @@
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
+       xmlns:oxm="http://www.springframework.org/schema/oxm"
+       xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
-        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
+        http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd">
 
     <!-- Scans the classpath of this application for @Components to deploy as beans -->
     <context:component-scan base-package="org.apache.rave.portal.web.controller"/>
+    <context:component-scan base-package="org.apache.rave.portal.web.api"/>
 
     <!-- Configures the @Controller programming model -->
     <mvc:annotation-driven/>
@@ -38,5 +42,18 @@
         <property name="prefix" value="/WEB-INF/views/"/>
         <property name="suffix" value=".jsp"/>
     </bean>
-</beans>
 
+    <oxm:jaxb2-marshaller id="marshaller">
+        <oxm:class-to-be-bound name="org.apache.rave.portal.model.RegionWidgetPreference"/>
+        <oxm:class-to-be-bound name="org.apache.rave.portal.web.model.RegionWidgetPreferenceListWrapper"/>
+    </oxm:jaxb2-marshaller>
+
+    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
+        <property name="messageConverters">
+            <list>
+                <bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"
+                      p:marshaller-ref="marshaller" p:unmarshaller-ref="marshaller"/>
+            </list>
+        </property>
+    </bean>
+</beans>
\ No newline at end of file