One technique that I've found useful for making sure code ends up in the right 
layer is to think about what would be required to change out a given component 
-- and if copy/paste is involved I know I've got code in the wrong place.

For example -- to keep my web tier (controllers) clean I try to think about 
what I would need to do if I wanted to bolt on an entirely new front end (maybe 
an applet, a flash front end, a web service layer, ...) and if that means 
copy/paste of code from the controller into the new front end would be required 
then that's a good indicator that I likely have code in my controller that 
should really be pushed down to my service layer.

And I do the same for the repository layer -- thinking about if I were to 
replace a given repository implementation with another, what logic would I need 
to copy/paste -- and if I find any then that usually means it's a business rule 
that I need to push back up into the service layer.

>-----Original Message-----
>From: Marlon Pierce [mailto:[email protected]]
>Sent: Monday, July 11, 2011 12:58 PM
>To: [email protected]
>Subject: Re: svn commit: r1144091 - in /incubator/rave/trunk/rave-portal/src:
>main/java/org/apache/rave/portal/model/
>main/java/org/apache/rave/portal/repository/
>main/java/org/apache/rave/portal/repository/impl/
>main/java/org/apache/rave/portal/service/ main/j...
>
>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA1
>
>Yeah, Raminder also made this point offline.  I'm happy to reorganize the
>code, just wanted to commit things after I got it working.
>
>
>Marlon
>
>
>On 7/11/11 12:46 PM, Franklin, Matthew B. wrote:
>> On 7/7/11 7:08 PM, "[email protected]" <[email protected]> wrote:
>>
>>> Author: mpierce
>>> Date: Thu Jul  7 23:08:58 2011
>>> New Revision: 1144091
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1144091&view=rev
>>> Log:
>>> (RAVE-89) Creating a blank Page, Regions for newly registered user.
>>> Widgets can then be added from the widget store.
>>
>> In the controller, you are doing a lot to create the new page.  IMHO, this
>> is really a task for the pageService.  The controller should just be a
>> simple 'router' that delegates any model manipulation off to the model
>> (includes services).
>>
>>>
>>>
>>> Added:
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/impl/JpaPageLayoutRepository.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/PageLayoutService.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/RegionService.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultPageLayoutService.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultRegionService.java
>>> Removed:
>>>
>>> incubator/rave/trunk/rave-portal/src/main/webapp/WEB-
>INF/views/NewAccountR
>>> equestReceived.jsp
>>> Modified:
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/mode
>>> l/Page.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/mode
>>> l/PageLayout.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/PageLayoutRepository.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/impl/JpaPageRepository.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/PageService.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/UserService.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultPageService.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultUserService.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/web/
>>> controller/NewAccountController.java
>>>
>>> incubator/rave/trunk/rave-
>portal/src/test/java/org/apache/rave/portal/mode
>>> l/PageTest.java
>>>
>>> Modified:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/mode
>>> l/Page.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/model/Page.java?rev=1144091&r1=1144090&r2=11
>44091
>>> &view=diff
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/mode
>>> l/Page.java (original)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/mode
>>> l/Page.java Thu Jul  7 23:08:58 2011
>>> @@ -51,7 +51,7 @@ public class Page {
>>>     @JoinColumn(name="page_layout_id")
>>>     private PageLayout pageLayout;
>>>
>>> -    @OneToMany(fetch = FetchType.EAGER)
>>> +    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL,
>>> orphanRemoval = true)
>>>     @JoinColumn(name="page_id")
>>>     private List<Region> regions;
>>>
>>>
>>> Modified:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/mode
>>> l/PageLayout.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/model/PageLayout.java?rev=1144091&r1=1144090
>&r2=1
>>> 144091&view=diff
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/mode
>>> l/PageLayout.java (original)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/mode
>>> l/PageLayout.java Thu Jul  7 23:08:58 2011
>>> @@ -27,6 +27,10 @@ import javax.persistence.*;
>>> @Entity
>>> @Table(name="page_layout")
>>> @SequenceGenerator(name="pageLayoutIdSeq", sequenceName =
>>> "page_layout_id_seq")
>>> +@NamedQueries({
>>> +    @NamedQuery(name="PageLayout.getByLayoutCode", query =
>"select pl
>>>from PageLayout pl where pl.code = :code")
>>> +})
>>> +
>>> public class PageLayout {
>>>     @Id @Column(name="id")
>>>     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
>>> "pageLayoutIdSeq")
>>>
>>> Modified:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/PageLayoutRepository.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/repository/PageLayoutRepository.java?rev=114409
>1&
>>> r1=1144090&r2=1144091&view=diff
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/PageLayoutRepository.java (original)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/PageLayoutRepository.java Thu Jul  7 23:08:58 2011
>>> @@ -20,4 +20,6 @@ package org.apache.rave.portal.repositor
>>>
>>> import org.apache.rave.portal.model.PageLayout;
>>>
>>> -public interface PageLayoutRepository extends Repository<PageLayout> {
>}
>>> \ No newline at end of file
>>> +public interface PageLayoutRepository extends Repository<PageLayout>
>{
>>> +        PageLayout getByPageLayoutCode(String codename);
>>> +}
>>> \ No newline at end of file
>>>
>>> Added:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/impl/JpaPageLayoutRepository.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/repository/impl/JpaPageLayoutRepository.java?re
>v=
>>> 1144091&view=auto
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/impl/JpaPageLayoutRepository.java (added)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/impl/JpaPageLayoutRepository.java Thu Jul  7 23:08:58 2011
>>> @@ -0,0 +1,59 @@
>>> +/*
>>> + * 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.repository.impl;
>>> +
>>> +import org.apache.commons.lang.NotImplementedException;
>>> +import org.apache.rave.portal.model.PageLayout;
>>> +import org.apache.rave.portal.repository.PageLayoutRepository;
>>> +import org.springframework.stereotype.Repository;
>>> +import org.springframework.transaction.annotation.Transactional;
>>> +
>>> +import javax.persistence.EntityManager;
>>> +import javax.persistence.PersistenceContext;
>>> +import javax.persistence.TypedQuery;
>>> +
>>> +import static
>>> org.apache.rave.portal.repository.impl.util.JpaUtil.getSingleResult;
>>> +import static
>>> org.apache.rave.portal.repository.impl.util.JpaUtil.saveOrUpdate;
>>> +
>>> +/**
>>> + */
>>> +@Repository
>>> +public class JpaPageLayoutRepository implements PageLayoutRepository{
>>> +
>>> +    @PersistenceContext
>>> +    private EntityManager manager;
>>> +
>>> +    @Override
>>> +    public PageLayout get(long layoutId) {
>>> +        return manager.find(PageLayout.class, layoutId);
>>> +    }
>>> +
>>> +        @Override
>>> +        public PageLayout getByPageLayoutCode(String codename){
>>> +                 TypedQuery<PageLayout>query =
>>>
>manager.createNamedQuery("PageLayout.getByLayoutCode",PageLayout.cla
>ss);
>>> +                 query.setParameter("code",codename);
>>> +                 return getSingleResult(query.getResultList());
>>> +        }
>>> +
>>> +    @Override
>>> +    public PageLayout save(PageLayout pageLayout) {
>>> +                 return
>>> saveOrUpdate(pageLayout.getId(),manager,pageLayout);
>>> +    }
>>> +}
>>>
>>> Modified:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/impl/JpaPageRepository.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/repository/impl/JpaPageRepository.java?rev=1144
>09
>>> 1&r1=1144090&r2=1144091&view=diff
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/impl/JpaPageRepository.java (original)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/repo
>>> sitory/impl/JpaPageRepository.java Thu Jul  7 23:08:58 2011
>>> @@ -29,6 +29,8 @@ import javax.persistence.PersistenceCont
>>> import javax.persistence.TypedQuery;
>>> import java.util.List;
>>>
>>> +import static
>>> org.apache.rave.portal.repository.impl.util.JpaUtil.saveOrUpdate;
>>> +
>>> @Repository
>>> public class JpaPageRepository implements PageRepository {
>>>
>>> @@ -49,6 +51,7 @@ public class JpaPageRepository implement
>>>
>>>     @Override
>>>     public Page save(Page item) {
>>> -        throw new NotImplementedException("Save is not implemented for
>>> this repository");
>>> +                 return saveOrUpdate(item.getId(),manager,item);
>>> +                 //        throw new NotImplementedException("Save is
>>> not implemented for this repository");
>>>     }
>>> }
>>> \ No newline at end of file
>>>
>>> Added:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/PageLayoutService.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/service/PageLayoutService.java?rev=1144091&vie
>w=a
>>> uto
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/PageLayoutService.java (added)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/PageLayoutService.java Thu Jul  7 23:08:58 2011
>>> @@ -0,0 +1,25 @@
>>> +/*
>>> + * 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.service;
>>> +
>>> +import org.apache.rave.portal.model.PageLayout;
>>> +
>>> +public interface PageLayoutService {
>>> +        public PageLayout getPageLayoutByCode(String code);
>>> +}
>>> \ No newline at end of file
>>>
>>> Modified:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/PageService.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/service/PageService.java?rev=1144091&r1=114409
>0&r
>>> 2=1144091&view=diff
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/PageService.java (original)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/PageService.java Thu Jul  7 23:08:58 2011
>>> @@ -60,4 +60,10 @@ public interface PageService {
>>>          * @return the updated Region. //TODO need to make sure this is
>>> the right return.
>>>          */
>>>         Region removeWidgetFromPage(long regionWidgetId, long regionId);
>>> +
>>> +        /**
>>> +         * Registers a new page.
>>> +         * @param page the page object to register with the data
>>> management system.
>>> +         */
>>> +        void registerNewPage(Page page);
>>> }
>>> \ No newline at end of file
>>>
>>> Added:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/RegionService.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/service/RegionService.java?rev=1144091&view=au
>to
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/RegionService.java (added)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/RegionService.java Thu Jul  7 23:08:58 2011
>>> @@ -0,0 +1,31 @@
>>> +/*
>>> + * 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.service;
>>> +
>>> +import org.apache.rave.portal.model.Region;
>>> +
>>> +public interface RegionService {
>>> +
>>> +        /**
>>> +         * Register a new region
>>> +         * @param region the region object to register
>>> +         */
>>> +        void registerNewRegion(Region region);
>>> +
>>> +}
>>>
>>> Modified:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/UserService.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/service/UserService.java?rev=1144091&r1=114409
>0&r
>>> 2=1144091&view=diff
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/UserService.java (original)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/UserService.java Thu Jul  7 23:08:58 2011
>>> @@ -44,6 +44,17 @@ public interface UserService extends Use
>>>
>>>         /**
>>>          * Registers a new user object.
>>> +         * @param user the new user object to register with the data
>>> management system.
>>>          */
>>>         void registerNewUser(User user);
>>> +
>>> +        /**
>>> +         * Return the requested user object using the user's name.
>>> +         */
>>> +        User getUserByUsername(String userName);
>>> +
>>> +        /**
>>> +         * Return a user object by the user ID.
>>> +         */
>>> +        User getUserById(Long id);
>>> }
>>> \ No newline at end of file
>>>
>>> Added:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultPageLayoutService.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/service/impl/DefaultPageLayoutService.java?rev=1
>1
>>> 44091&view=auto
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultPageLayoutService.java (added)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultPageLayoutService.java Thu Jul  7 23:08:58 2011
>>> @@ -0,0 +1,42 @@
>>> +/*
>>> + * 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.service.impl;
>>> +
>>> +import org.apache.rave.portal.model.PageLayout;
>>> +import org.apache.rave.portal.service.PageLayoutService;
>>> +import org.apache.rave.portal.repository.PageLayoutRepository;
>>> +import org.springframework.beans.factory.annotation.Autowired;
>>> +import org.springframework.stereotype.Service;
>>> +
>>> +@Service
>>> +public class DefaultPageLayoutService implements PageLayoutService {
>>> +        private final PageLayoutRepository pageLayoutRepository;
>>> +
>>> +        @Autowired
>>> +        public DefaultPageLayoutService(PageLayoutRepository
>>> pageLayoutRepository) {
>>> +                 this.pageLayoutRepository=pageLayoutRepository;
>>> +        }
>>> +
>>> +        @Override
>>> +        public PageLayout getPageLayoutByCode(String code) {
>>> +                 return pageLayoutRepository.getByPageLayoutCode(code);
>>> +        }
>>> +}
>>> +
>>>
>>> Modified:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultPageService.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/service/impl/DefaultPageService.java?rev=114409
>1&
>>> r1=1144090&r2=1144091&view=diff
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultPageService.java (original)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultPageService.java Thu Jul  7 23:08:58 2011
>>> @@ -68,7 +68,6 @@ public class DefaultPageService implemen
>>>         @Override
>>>         @Transactional
>>>         public Region removeWidgetFromPage(long regionWidgetId, long
>>> regionId){
>>> -                 //TODO must implement.  Returns null for the time being.
>>>         Region region = getFromRepository(regionId, regionRepository);
>>>         return removeWidgetInstance(regionWidgetId, region);
>>>         }
>>> @@ -82,6 +81,12 @@ public class DefaultPageService implemen
>>>         return createWidgetInstance(widget, region, 0);
>>>     }
>>>
>>> +        @Override
>>> +        @Transactional
>>> +        public void registerNewPage(Page page) {
>>> +                 pageRepository.save(page);
>>> +        }
>>> +
>>>     private RegionWidget createWidgetInstance(Widget widget, Region
>>> region, int position) {
>>>         RegionWidget regionWidget = new RegionWidget();
>>>         regionWidget.setRenderOrder(position);
>>>
>>> Added:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultRegionService.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/service/impl/DefaultRegionService.java?rev=11440
>9
>>> 1&view=auto
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultRegionService.java (added)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultRegionService.java Thu Jul  7 23:08:58 2011
>>> @@ -0,0 +1,45 @@
>>> +/*
>>> + * 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.service.impl;
>>> +
>>> +import org.apache.rave.portal.model.Region;
>>> +import org.apache.rave.portal.service.RegionService;
>>> +import org.apache.rave.portal.repository.RegionRepository;
>>> +import org.springframework.beans.factory.annotation.Autowired;
>>> +import org.springframework.stereotype.Service;
>>> +import org.springframework.transaction.annotation.Transactional;
>>> +
>>> +@Service
>>> +public class DefaultRegionService implements RegionService {
>>> +
>>> +        private final RegionRepository regionRepository;
>>> +
>>> +        @Autowired
>>> +        public DefaultRegionService(RegionRepository regionRepository) {
>>> +                 this.regionRepository = regionRepository;
>>> +        }
>>> +
>>> +        @Override
>>> +        @Transactional
>>> +        public void registerNewRegion(Region region) {
>>> +                 regionRepository.save(region);
>>> +        }
>>> +
>>> +}
>>> \ No newline at end of file
>>>
>>> Modified:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultUserService.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/service/impl/DefaultUserService.java?rev=1144091
>&
>>> r1=1144090&r2=1144091&view=diff
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultUserService.java (original)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/serv
>>> ice/impl/DefaultUserService.java Thu Jul  7 23:08:58 2011
>>> @@ -113,4 +113,14 @@ public class DefaultUserService implemen
>>>         public void registerNewUser(User user) {
>>>                  userRepository.save(user);
>>>         }
>>> +
>>> +        @Override
>>> +        public User getUserById(Long id) {
>>> +                 return userRepository.get(id);
>>> +        }
>>> +
>>> +        @Override
>>> +        public User getUserByUsername(String userName){
>>> +                 return userRepository.getByUsername(userName);
>>> +        }
>>> }
>>> \ No newline at end of file
>>>
>>> Modified:
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/web/
>>> controller/NewAccountController.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/main/jav
>>>
>a/org/apache/rave/portal/web/controller/NewAccountController.java?rev=1
>144
>>> 091&r1=1144090&r2=1144091&view=diff
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/web/
>>> controller/NewAccountController.java (original)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/main/java/org/apache/rave/portal/web/
>>> controller/NewAccountController.java Thu Jul  7 23:08:58 2011
>>> @@ -20,9 +20,15 @@
>>> package org.apache.rave.portal.web.controller;
>>>
>>> import org.apache.rave.portal.service.UserService;
>>> +import org.apache.rave.portal.service.PageService;
>>> +import org.apache.rave.portal.service.PageLayoutService;
>>> +import org.apache.rave.portal.service.RegionService;
>>> import org.apache.rave.portal.web.util.ModelKeys;
>>> import org.apache.rave.portal.web.util.ViewNames;
>>> import org.apache.rave.portal.model.User;
>>> +import org.apache.rave.portal.model.Page;
>>> +import org.apache.rave.portal.model.PageLayout;
>>> +import org.apache.rave.portal.model.Region;
>>> import org.springframework.beans.factory.annotation.Autowired;
>>> import org.springframework.stereotype.Controller;
>>> import org.springframework.ui.Model;
>>> @@ -30,22 +36,31 @@ import org.springframework.web.bind.anno
>>> import org.springframework.web.bind.annotation.RequestMapping;
>>> import org.springframework.web.bind.annotation.RequestMethod;
>>> import org.springframework.web.bind.annotation.RequestParam;
>>> -
>>> +import java.util.List;
>>> +import java.util.ArrayList;
>>>
>>> @Controller
>>> @RequestMapping(value = { "/newaccount/*", "/newaccount" })
>>> public class NewAccountController {
>>>
>>>     private final UserService userService;
>>> -
>>> +        private final PageService pageService;
>>> +        private final PageLayoutService pageLayoutService;
>>> +        private final RegionService regionService;
>>> +
>>>     @Autowired
>>> -    public NewAccountController(UserService userService) {
>>> +    public NewAccountController(UserService userService, PageService
>>> pageService, PageLayoutService pageLayoutService, RegionService
>>> regionService) {
>>>         this.userService = userService;
>>> +                 this.pageService = pageService;
>>> +                 this.pageLayoutService = pageLayoutService;
>>> +                 this.regionService = regionService;
>>>     }
>>>
>>>     @RequestMapping(method = RequestMethod.POST)
>>>         //Needs to be specified by action.
>>> -    public String create(Model model, @RequestParam String userName,
>>> @RequestParam String password) {
>>> +        //TODO: have a more elegant way of adding a user
>>> +        public String create(Model model, @RequestParam String userName,
>>> @RequestParam String password) {
>>> +        //Create a new user object and register it.
>>>                  User user=new User();
>>>                  user.setUsername(userName);
>>>                  user.setPassword(password);
>>> @@ -53,9 +68,31 @@ public class NewAccountController {
>>>                  user.setLocked(false);
>>>                  user.setEnabled(true);
>>>                  userService.registerNewUser(user);
>>> -
>>> +
>>> +                 //Return the newly registered user
>>> +                 User
>>> registeredUser=userService.getUserByUsername(userName);
>>> +
>>> +                 //Create a PageLayout object.  We will default to
>>> +                 //the two-column layout
>>> +                 PageLayout
>>> pageLayout=pageLayoutService.getPageLayoutByCode("columns_2");
>>> +
>>> +                 //Create regions
>>> +                 List<Region> regions=new ArrayList<Region>();
>>> +                 Region region1=new Region();
>>> +                 Region region2=new Region();
>>> +                 regions.add(region1);
>>> +                 regions.add(region2);
>>> +
>>> +                 //Create a Page object and register it.
>>> +                 Page page=new Page();
>>> +                 page.setName("main");
>>> +                 page.setOwner(registeredUser);
>>> +                 page.setPageLayout(pageLayout);
>>> +                 page.setRenderSequence(1L);
>>> +
>>> page.setRegions(regions);
>>> +                 pageService.registerNewPage(page);
>>> +
>>>         return "redirect:/";
>>>     }
>>> -
>>>
>>> }
>>> \ No newline at end of file
>>>
>>> Modified:
>>> incubator/rave/trunk/rave-
>portal/src/test/java/org/apache/rave/portal/mode
>>> l/PageTest.java
>>> URL:
>>> http://svn.apache.org/viewvc/incubator/rave/trunk/rave-
>portal/src/test/jav
>>>
>a/org/apache/rave/portal/model/PageTest.java?rev=1144091&r1=1144090&r
>2=114
>>> 4091&view=diff
>>>
>===========================================================
>===============
>>> ====
>>> ---
>>> incubator/rave/trunk/rave-
>portal/src/test/java/org/apache/rave/portal/mode
>>> l/PageTest.java (original)
>>> +++
>>> incubator/rave/trunk/rave-
>portal/src/test/java/org/apache/rave/portal/mode
>>> l/PageTest.java Thu Jul  7 23:08:58 2011
>>> @@ -22,6 +22,7 @@ import org.junit.After;
>>> import org.junit.Before;
>>> import org.junit.Test;
>>>
>>> +
>>> import java.util.ArrayList;
>>> import java.util.List;
>>>
>>>
>>>
>>
>-----BEGIN PGP SIGNATURE-----
>Version: GnuPG/MacGPG2 v2.0.16 (Darwin)
>Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>
>iQEcBAEBAgAGBQJOGyueAAoJEEfVXEODPFIDLowH/3EeE1DCcu8z9XYG5C4QK
>Xhi
>oQKL7zK32Wdsgidht7sdPjRtDsN1MzODf/ERNKxMYZ3VMvnKEu4vdXZzDnCMC
>DpS
>+XTliiNbGWDkn4JHp5voeYSbrJAzajCF3alsMHqyP7SyItCoCQ7HPKrUQTXNKBag
>OAYkCa2Ja/C/RGQnTLDXQElbeJLuIG97cuBqNo//UmztGLn+UYN8sjGfha19Ek1
>Q
>2h6ZowHNmd2xQMV7TKBg3Bv32DYsYI6NG9E8IjT1vxZVoIBtk2CuBdFJaE2o86A
>d
>5Vns6pwLv21o3P3XMQ1hRXEaS1mP7kDQ7AaPOdLpFxJR9A0Nxub4kpa7z2jVX
>Ck=
>=Bs8x
>-----END PGP SIGNATURE-----

Reply via email to