Author: glandais Date: 2008-01-21 18:44:16 +0000 (Mon, 21 Jan 2008) New Revision: 335 Added: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/AppModule.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/GroupValueEncoder.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteSecurityService.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteService.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteStorageService.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/UserValueEncoder.java Removed: trunk/simexplorer-is-web/deploy.sh trunk/simexplorer-is-web/redeploy.sh trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/beans/ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/errors/ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/ServiceFactory.java trunk/simexplorer-is-web/tomcatstart.sh trunk/simexplorer-is-web/tomcatstop.sh trunk/simexplorer-is-web/undeploy.sh Modified: trunk/simexplorer-is-security/pom.xml trunk/simexplorer-is-security/src/java/META-INF/orm.xml trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurity.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Group.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/User.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationService.java trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationServiceImpl.java trunk/simexplorer-is-security/src/java/h2-ds.xml trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/components/Layout.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/grid/ElementDataSource.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationImport.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupList.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Login.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/UserList.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/AdminPage.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/ProtectedPage.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/SuperAdminPage.java trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/UserPage.java trunk/simexplorer-is-web/src/main/webapp/GroupEdit.tml trunk/simexplorer-is-web/src/main/webapp/UserEdit.tml trunk/simexplorer-is-web/src/main/webapp/WEB-INF/web.xml trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/components/css/Layout.css trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.properties trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.properties Log: User/group edit Modified: trunk/simexplorer-is-security/pom.xml =================================================================== --- trunk/simexplorer-is-security/pom.xml 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-security/pom.xml 2008-01-21 18:44:16 UTC (rev 335) @@ -47,7 +47,7 @@ <groupId>jboss</groupId> <artifactId>jbossall-client</artifactId> <version>4.2.2.GA</version> - <scope>test</scope> + <scope>provided</scope> </dependency> </dependencies> </project> Modified: trunk/simexplorer-is-security/src/java/META-INF/orm.xml =================================================================== --- trunk/simexplorer-is-security/src/java/META-INF/orm.xml 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-security/src/java/META-INF/orm.xml 2008-01-21 18:44:16 UTC (rev 335) @@ -10,7 +10,9 @@ <package>fr.cemagref.simexplorer.is.security.entities</package> - <mapped-superclass class="Actor"> + <entity class="Actor"> + <table name="ACTORS" /> + <inheritance strategy="JOINED" /> <attributes> <id name="id"> <generated-value strategy="SEQUENCE" /> @@ -21,12 +23,14 @@ </cascade> </many-to-many> </attributes> - </mapped-superclass> + </entity> <entity class="Group"> <table name="GROUPS" /> <attributes> - <basic name="name"></basic> + <basic name="name"> + <column unique="true" /> + </basic> <one-to-one name="owner" fetch="EAGER" /> </attributes> </entity> @@ -34,7 +38,9 @@ <entity class="User"> <table name="USERS" /> <attributes> - <basic name="login"></basic> + <basic name="login"> + <column unique="true" /> + </basic> <basic name="mail"></basic> <basic name="passwordHash"></basic> <basic name="admin"></basic> Modified: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurity.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurity.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurity.java 2008-01-21 18:44:16 UTC (rev 335) @@ -22,6 +22,8 @@ public Group getGroup(Integer id); + public Group getGroup(String name); + public Group updateGroup(Group group); public void deleteGroup(Integer id); @@ -32,6 +34,8 @@ public void saveToken(LoginAction loginAction); + public void deleteToken(String token); + public List<Group> getGroups(); public List<Group> getGroupsOwnedBy(User user); @@ -42,4 +46,6 @@ public List<Group> getGroupsOfUser(User user); + public List<Group> getGroupsOfGroup(Group group); + } Modified: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java 2008-01-21 18:44:16 UTC (rev 335) @@ -34,6 +34,13 @@ return em.find(Group.class, id); } + public Group getGroup(String name) { + Group group = (Group) em.createQuery( + "select g from Group g where g.name=:name").setParameter( + "name", name).getSingleResult(); + return group; + } + public User getUser(Integer id) { return em.find(User.class, id); } @@ -78,6 +85,15 @@ em.persist(loginAction); } + public void deleteToken(String token) { + LoginAction loginAction = (LoginAction) em.createQuery( + "select la from LoginAction la where la.token=:token") + .setParameter("token", token).getSingleResult(); + if (loginAction != null) { + em.remove(loginAction); + } + } + public User getUser(String login) { User user = (User) em.createQuery( "select u from User u where u.login=:login").setParameter( @@ -111,4 +127,10 @@ .setParameter("user", user).getResultList(); } + public List<Group> getGroupsOfGroup(Group group) { + return em.createQuery( + "select distinct g.groups from Group g where g = :group") + .setParameter("group", group).getResultList(); + } + } Modified: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java 2008-01-21 18:44:16 UTC (rev 335) @@ -8,7 +8,7 @@ private static final long serialVersionUID = 813823268950750281L; - private Integer id; + protected Integer id; private List<Group> groups; Modified: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Group.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Group.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Group.java 2008-01-21 18:44:16 UTC (rev 335) @@ -22,4 +22,34 @@ this.owner = owner; } + @Override + public String toString() { + return name; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final Actor other = (Actor) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + } Modified: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/User.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/User.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/User.java 2008-01-21 18:44:16 UTC (rev 335) @@ -49,4 +49,34 @@ this.superAdmin = superAdmin; } + @Override + public String toString() { + return login; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final Actor other = (Actor) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + } Modified: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationService.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationService.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationService.java 2008-01-21 18:44:16 UTC (rev 335) @@ -15,7 +15,7 @@ public void resetPassword(String login); public void changePassword(String login, String password); - + public User getUser(Integer id); public User getUser(String login); @@ -23,29 +23,35 @@ public User updateUser(User user); public void deleteUser(Integer id); - + public User[] getUsers(); public User[] getUsersOfGroup(Group group); - + public void setUsersOfGroup(Group group, Integer[] usersInGroup); - + + public void setGroupsOfGroup(Group group, Integer[] groupsIds); + public Group[] getGroupsOfUser(User user); + public Group[] getGroupsOfGroup(Group group); + public void setGroupsOfUser(User user, Integer[] groupsIds); - + public Group saveGroup(String name, User owner); public Group getGroup(Integer id); + public Group getGroup(String name); + public Group updateGroup(Group group); public void deleteGroup(Integer id); public Group[] getGroups(); - + public Group[] getGroupsOwnedBy(User user); - + public String loginUser(String login, String password); public User getLoggedUser(String token); Modified: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationServiceImpl.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationServiceImpl.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/service/AuthenticationServiceImpl.java 2008-01-21 18:44:16 UTC (rev 335) @@ -3,13 +3,17 @@ import java.security.MessageDigest; import java.util.ArrayList; import java.util.Date; -import java.util.Iterator; import java.util.List; import java.util.UUID; +import javax.annotation.Resource; import javax.ejb.EJB; import javax.ejb.Remote; +import javax.ejb.SessionContext; import javax.ejb.Stateless; +import javax.ejb.Timeout; +import javax.ejb.Timer; +import javax.ejb.TimerService; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; @@ -29,6 +33,9 @@ @EJB private DaoSecurity dao; + @Resource + private SessionContext sessionContext; + private void sendMail(String login, String mail, String password) { /* javax.mail.Session mailSession = (javax.mail.Session) new InitialContext().lookup("java:/Mail"); @@ -88,6 +95,10 @@ return dao.getGroup(id); } + public Group getGroup(String name) { + return dao.getGroup(name); + } + public User getUser(Integer id) { return dao.getUser(id); } @@ -142,10 +153,19 @@ loginAction.setToken(UUID.randomUUID().toString()); dao.saveToken(loginAction); token = loginAction.getToken(); + // FIXME session length + TimerService timerService = sessionContext.getTimerService(); + //timerService.createTimer(10 * 60 * 1000, token); } return token; } + @Timeout + public void timeoutHandler(Timer timer) { + String token = (String) timer.getInfo(); + dao.deleteToken(token); + } + public User requestAccount(String login, String mail) { User user = new User(); user.setLogin(login); @@ -236,9 +256,9 @@ realUser.getGroups().clear(); for (int i = 0; i < groupsIds.length; i++) { Group group = dao.getGroup(groupsIds[i]); - realUser.getGroups().add(group); + realUser.getGroups().add(group); } - dao.updateUser(user); + dao.updateUser(realUser); } @@ -246,4 +266,19 @@ return dao.getGroupsOfUser(user).toArray(new Group[0]); } + public Group[] getGroupsOfGroup(Group group) { + return dao.getGroupsOfGroup(group).toArray(new Group[0]); + } + + public void setGroupsOfGroup(Group group, Integer[] groupsIds) { + Group realGroup = dao.getGroup(group.getId()); + realGroup.getGroups().clear(); + for (int i = 0; i < groupsIds.length; i++) { + Group groupOwned = dao.getGroup(groupsIds[i]); + realGroup.getGroups().add(groupOwned); + } + dao.updateGroup(realGroup); + } + + } Modified: trunk/simexplorer-is-security/src/java/h2-ds.xml =================================================================== --- trunk/simexplorer-is-security/src/java/h2-ds.xml 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-security/src/java/h2-ds.xml 2008-01-21 18:44:16 UTC (rev 335) @@ -16,7 +16,7 @@ <local-tx-datasource> <jndi-name>h2datasource</jndi-name> <connection-url> - jdbc:h2:/var/local/simexplorer/security/database + jdbc:h2:/var/local/simexplorer/h2/security </connection-url> <driver-class>org.h2.Driver</driver-class> <user-name></user-name> Deleted: trunk/simexplorer-is-web/deploy.sh =================================================================== --- trunk/simexplorer-is-web/deploy.sh 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/deploy.sh 2008-01-21 18:44:16 UTC (rev 335) @@ -1 +0,0 @@ -mvn war:inplace tomcat:inplace Deleted: trunk/simexplorer-is-web/redeploy.sh =================================================================== --- trunk/simexplorer-is-web/redeploy.sh 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/redeploy.sh 2008-01-21 18:44:16 UTC (rev 335) @@ -1 +0,0 @@ -mvn war:inplace tomcat:redeploy Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/components/Layout.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/components/Layout.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/components/Layout.java 2008-01-21 18:44:16 UTC (rev 335) @@ -32,7 +32,6 @@ import org.apache.tapestry.services.PersistentLocale; import fr.cemagref.simexplorer.is.ui.web.pages.ElementList; -import fr.cemagref.simexplorer.is.ui.web.pages.security.ProtectedPage; /** * AbstractPage.java @@ -123,19 +122,19 @@ } public String getLoginName() { - return ProtectedPage.getUserLogged(getToken()).getLogin(); + return elementList.getUserLogged().getLogin(); } public boolean getLogged() { - return ProtectedPage.isUserLogged(getToken()); + return elementList.isUserLogged(); } public boolean getAdministrator() { - return ProtectedPage.isUserAdmin(getToken()); + return elementList.isUserAdmin(); } public boolean getSuperAdministrator() { - return ProtectedPage.isUserSuperAdmin(getToken()); + return elementList.isUserSuperAdmin(); } public String getToken() { Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/grid/ElementDataSource.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/grid/ElementDataSource.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/grid/ElementDataSource.java 2008-01-21 18:44:16 UTC (rev 335) @@ -4,9 +4,10 @@ import org.apache.tapestry.beaneditor.PropertyModel; import org.apache.tapestry.grid.GridDataSource; +import org.apache.tapestry.ioc.annotations.Inject; import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; -import fr.cemagref.simexplorer.is.ui.web.services.ServiceFactory; +import fr.cemagref.simexplorer.is.ui.web.services.RemoteStorageService; public class ElementDataSource implements GridDataSource { @@ -28,11 +29,9 @@ int result = 0; try { if (query.equals("")) { - result = ServiceFactory.getStorageService() - .findApplicationsCount(false); + result = RemoteStorageService.getStorageService().findApplicationsCount(false); } else { - result = ServiceFactory.getStorageService().findFullTextCount( - query, false); + result = RemoteStorageService.getStorageService().findFullTextCount(query, false); } } catch (NamingException e) { // TODO Auto-generated catch block @@ -68,11 +67,11 @@ } if (query.equals("")) { - entities = ServiceFactory.getStorageService() + entities = RemoteStorageService.getStorageService() .findApplications(false, startIndex, 1 + endIndex - startIndex, dateOrder); } else { - entities = ServiceFactory.getStorageService().findFullText( + entities = RemoteStorageService.getStorageService().findFullText( query, false, startIndex, 1 + endIndex - startIndex, dateOrder); } Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationImport.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationImport.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationImport.java 2008-01-21 18:44:16 UTC (rev 335) @@ -1,12 +1,13 @@ package fr.cemagref.simexplorer.is.ui.web.pages; +import org.apache.tapestry.ioc.annotations.Inject; import org.apache.tapestry.upload.services.UploadedFile; import com.healthmarketscience.rmiio.RemoteInputStreamServer; import com.healthmarketscience.rmiio.SimpleRemoteInputStream; import fr.cemagref.simexplorer.is.ui.web.pages.security.UserPage; -import fr.cemagref.simexplorer.is.ui.web.services.ServiceFactory; +import fr.cemagref.simexplorer.is.ui.web.services.RemoteStorageService; public class ApplicationImport extends UserPage { @@ -33,7 +34,7 @@ if (fileEA != null) { RemoteInputStreamServer zipRemoteStream = new SimpleRemoteInputStream( fileEA.getStream()); - ServiceFactory.getStorageService().saveElement( + RemoteStorageService.getStorageService().saveElement( zipRemoteStream.export()); } } Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java 2008-01-21 18:44:16 UTC (rev 335) @@ -29,7 +29,7 @@ import fr.cemagref.simexplorer.is.entities.data.Structure; import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; import fr.cemagref.simexplorer.is.ui.web.pages.security.UserPage; -import fr.cemagref.simexplorer.is.ui.web.services.ServiceFactory; +import fr.cemagref.simexplorer.is.ui.web.services.RemoteStorageService; import fr.cemagref.simexplorer.is.ui.web.tools.XMLAttachment; public class ElementDetail extends UserPage { @@ -41,7 +41,7 @@ private LoggableElement element; public void setup(String uuid, String version) throws Exception { - element = ServiceFactory.getStorageService().getElement(uuid, version); + element = RemoteStorageService.getStorageService().getElement(uuid, version); } public List<String> getHeaders() { @@ -65,10 +65,10 @@ ByteArrayOutputStream bos = new ByteArrayOutputStream(); RemoteOutputStreamServer xmlRemoteOutputStream = new SimpleRemoteOutputStream( bos); - ServiceFactory.getStorageService().exportElement( + RemoteStorageService.getStorageService().exportElement( xmlRemoteOutputStream.export(), uuid, version); - MetaDataEntity mde = ServiceFactory.getStorageService().getMetadata( + MetaDataEntity mde = RemoteStorageService.getStorageService().getMetadata( uuid, version); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); response = new XMLAttachment(bis, mde.getType() + "." + mde.getUuid() Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.java 2008-01-21 18:44:16 UTC (rev 335) @@ -6,14 +6,16 @@ import javax.naming.NamingException; +import org.apache.tapestry.ValueEncoder; import org.apache.tapestry.annotations.InjectPage; import org.apache.tapestry.annotations.Persist; -import org.apache.tapestry.internal.services.StringValueEncoder; import fr.cemagref.simexplorer.is.security.entities.Group; import fr.cemagref.simexplorer.is.security.entities.User; import fr.cemagref.simexplorer.is.ui.web.pages.security.AdminPage; -import fr.cemagref.simexplorer.is.ui.web.services.ServiceFactory; +import fr.cemagref.simexplorer.is.ui.web.services.GroupValueEncoder; +import fr.cemagref.simexplorer.is.ui.web.services.RemoteSecurityService; +import fr.cemagref.simexplorer.is.ui.web.services.UserValueEncoder; public class GroupEdit extends AdminPage { @@ -23,56 +25,67 @@ @InjectPage private GroupList groupList; - private StringValueEncoder stringEncoder = new StringValueEncoder(); - @Persist - private List<String> usersInGroup; + private List<User> usersInGroup; @Persist - private List<String> groupsInGroup; + private List<Group> groupsInGroup; - void setup(int groupId) throws NamingException { - this.usersInGroup = new ArrayList<String>(); + private static final UserValueEncoder userEncoder = new UserValueEncoder(); + + private static final GroupValueEncoder groupEncoder = new GroupValueEncoder(); + + void setup(int groupId) throws Exception { + this.usersInGroup = new ArrayList<User>(); + this.groupsInGroup = new ArrayList<Group>(); if (groupId == -1) { this.group = new Group(); + this.group.setOwner(getUserLogged()); } else { - this.group = ServiceFactory.getSecurityService().getGroup(groupId); - User[] users = ServiceFactory.getSecurityService().getUsersOfGroup( - group); + this.group = RemoteSecurityService.getSecurityService().getGroup( + groupId); + + User[] users = RemoteSecurityService.getSecurityService() + .getUsersOfGroup(group); for (User user : users) { - this.usersInGroup.add(user.getId() + "/" + user.getLogin()); + this.usersInGroup.add(user); } + + Group[] groups = RemoteSecurityService.getSecurityService() + .getGroupsOfGroup(group); + for (Group group : groups) { + this.groupsInGroup.add(group); + } } } - public Object onSuccess() throws NamingException { + public Object onSuccess() throws Exception { if (group.getId() == null) { - ServiceFactory.getSecurityService().saveGroup(group.getName(), - getUserLogged(getToken())); + group = RemoteSecurityService.getSecurityService().saveGroup( + group.getName(), getUserLogged()); } else { - ServiceFactory.getSecurityService().updateGroup(group); + group = RemoteSecurityService.getSecurityService().updateGroup( + group); } - + Integer[] usersIds = new Integer[usersInGroup.size()]; int i = 0; - for (String user : usersInGroup) { - StringTokenizer st = new StringTokenizer(user, "/"); - usersIds[i] = new Integer(st.nextToken()); + for (User user : usersInGroup) { + usersIds[i] = new Integer(user.getId()); i++; } - ServiceFactory.getSecurityService().setUsersOfGroup(group, usersIds); + RemoteSecurityService.getSecurityService().setUsersOfGroup(group, + usersIds); - /* Integer[] groupsIds = new Integer[groupsInGroup.size()]; i = 0; - for (String group : groupsInGroup) { - StringTokenizer st = new StringTokenizer(group, "/"); - groupsIds[i] = new Integer(st.nextToken()); + for (Group group : groupsInGroup) { + groupsIds[i] = new Integer(group.getId()); i++; } - ServiceFactory.getSecurityService().setGroupsOfGroup(group, groupsIds); - */ - + RemoteSecurityService.getSecurityService().setGroupsOfGroup(group, + groupsIds); + return groupList; } @@ -80,20 +93,41 @@ return groupList; } - public List<String> getUsers() throws NamingException { - User[] users = ServiceFactory.getSecurityService().getUsers(); - List<String> result = new ArrayList<String>(); - for (int i = 0; i < users.length; i++) { - result.add(users[i].getId() + "/" + users[i].getLogin()); + public List<User> getUsers() throws Exception { + User[] users = RemoteSecurityService.getSecurityService().getUsers(); + List<User> result = new ArrayList<User>(); + for (User user : users) { + result.add(user); } return result; } - public List<String> getUsersInGroup() throws NamingException { + public List<Group> getGroups() throws Exception { + Group[] groups = RemoteSecurityService.getSecurityService().getGroups(); + List<Group> result = new ArrayList<Group>(); + for (Group group : groups) { + result.add(group); + } + return result; + } + + public ValueEncoder getUserEncoder() { + return userEncoder; + } + + public ValueEncoder getGroupEncoder() { + return groupEncoder; + } + + public boolean getSuperAdmin() { + return isUserSuperAdmin(); + } + + public List<User> getUsersInGroup() throws NamingException { return usersInGroup; } - public void setUsersInGroup(List<String> usersInGroup) + public void setUsersInGroup(List<User> usersInGroup) throws NamingException { this.usersInGroup = usersInGroup; } @@ -102,10 +136,6 @@ return group; } - public StringValueEncoder getStringEncoder() { - return stringEncoder; - } - public GroupList getGroupList() { return groupList; } @@ -114,4 +144,20 @@ this.groupList = groupList; } + public List<Group> getGroupsInGroup() { + return groupsInGroup; + } + + public void setGroupsInGroup(List<Group> groupsInGroup) { + this.groupsInGroup = groupsInGroup; + } + + public User getOwner() { + return this.group.getOwner(); + } + + public void setOwner(User owner) { + this.group.setOwner(owner); + } + } Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupList.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupList.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupList.java 2008-01-21 18:44:16 UTC (rev 335) @@ -3,8 +3,6 @@ import java.util.ArrayList; import java.util.List; -import javax.naming.NamingException; - import org.apache.tapestry.ComponentResources; import org.apache.tapestry.annotations.InjectPage; import org.apache.tapestry.annotations.Retain; @@ -12,10 +10,9 @@ import org.apache.tapestry.ioc.annotations.Inject; import org.apache.tapestry.services.BeanModelSource; -import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; import fr.cemagref.simexplorer.is.security.entities.Group; import fr.cemagref.simexplorer.is.ui.web.pages.security.AdminPage; -import fr.cemagref.simexplorer.is.ui.web.services.ServiceFactory; +import fr.cemagref.simexplorer.is.ui.web.services.RemoteSecurityService; public class GroupList extends AdminPage { @@ -23,7 +20,7 @@ private BeanModel model; private Group group; - + @Inject private BeanModelSource beanModelSource; @@ -32,7 +29,7 @@ @InjectPage private GroupEdit groupEdit; - + void pageLoaded() { model = beanModelSource.create(Group.class, true, resources); List<String> wantedProperties = new ArrayList<String>(); @@ -46,32 +43,33 @@ model.add("edit", null); model.add("delete", null); } - - public Group[] getGroups() throws NamingException { + + public Group[] getGroups() throws Exception { Group[] groups = null; - if (isUserSuperAdmin(getToken())) { - groups = ServiceFactory.getSecurityService().getGroups(); + if (isUserSuperAdmin()) { + groups = RemoteSecurityService.getSecurityService().getGroups(); } else { - groups = ServiceFactory.getSecurityService().getGroupsOwnedBy(getUserLogged(getToken())); - } + groups = RemoteSecurityService.getSecurityService() + .getGroupsOwnedBy(getUserLogged()); + } return groups; } public Object onActionFromDelete(Integer context) throws Exception { - ServiceFactory.getSecurityService().deleteGroup(context); + RemoteSecurityService.getSecurityService().deleteGroup(context); return null; } - + public Object onActionFromEdit(Integer context) throws Exception { groupEdit.setup(context); return groupEdit; } - + public Object onActionFromAdd() throws Exception { groupEdit.setup(-1); return groupEdit; } - + public Group getGroup() { return group; } @@ -91,5 +89,5 @@ public void setGroupEdit(GroupEdit groupEdit) { this.groupEdit = groupEdit; } - + } Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Login.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Login.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Login.java 2008-01-21 18:44:16 UTC (rev 335) @@ -1,12 +1,11 @@ package fr.cemagref.simexplorer.is.ui.web.pages; -import javax.naming.NamingException; - import org.apache.tapestry.annotations.ApplicationState; import org.apache.tapestry.annotations.InjectPage; import org.apache.tapestry.annotations.Persist; +import org.apache.tapestry.ioc.annotations.Inject; -import fr.cemagref.simexplorer.is.ui.web.services.ServiceFactory; +import fr.cemagref.simexplorer.is.ui.web.services.RemoteSecurityService; public class Login { @@ -19,10 +18,10 @@ @ApplicationState private String token; - - public Object onSuccess() throws NamingException { + + public Object onSuccess() throws Exception { Object result = null; - token = ServiceFactory.getSecurityService().loginUser(user, + token = RemoteSecurityService.getSecurityService().loginUser(user, password); if (token != null) { result = elementList; @@ -53,5 +52,5 @@ public String getWindowTitle() { return "Login"; } - + } Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.java 2008-01-21 18:44:16 UTC (rev 335) @@ -2,18 +2,16 @@ import java.util.ArrayList; import java.util.List; -import java.util.StringTokenizer; -import javax.naming.NamingException; - +import org.apache.tapestry.ValueEncoder; import org.apache.tapestry.annotations.InjectPage; import org.apache.tapestry.annotations.Persist; -import org.apache.tapestry.internal.services.StringValueEncoder; import fr.cemagref.simexplorer.is.security.entities.Group; import fr.cemagref.simexplorer.is.security.entities.User; import fr.cemagref.simexplorer.is.ui.web.pages.security.AdminPage; -import fr.cemagref.simexplorer.is.ui.web.services.ServiceFactory; +import fr.cemagref.simexplorer.is.ui.web.services.GroupValueEncoder; +import fr.cemagref.simexplorer.is.ui.web.services.RemoteSecurityService; public class UserEdit extends AdminPage { @@ -23,55 +21,64 @@ @InjectPage private UserList userList; - private StringValueEncoder stringEncoder = new StringValueEncoder(); - @Persist - private List<String> groupsOfUser; + private List<Group> groupsOfUser; - void setup(int groupId) throws NamingException { - this.groupsOfUser = new ArrayList<String>(); + private static final GroupValueEncoder groupEncoder = new GroupValueEncoder(); + + void setup(int groupId) throws Exception { + this.groupsOfUser = new ArrayList<Group>(); if (groupId == -1) { this.user = new User(); } else { - this.user = ServiceFactory.getSecurityService().getUser(groupId); - Group[] groups = ServiceFactory.getSecurityService() + this.user = RemoteSecurityService.getSecurityService().getUser( + groupId); + Group[] groups = RemoteSecurityService.getSecurityService() .getGroupsOfUser(this.user); for (Group group : groups) { - groupsOfUser.add(group.getId() + "/" + group.getName()); + groupsOfUser.add(group); } } } - public Object onSuccess() throws NamingException { + public Object onSuccess() throws Exception { if (user.getId() == null) { - ServiceFactory.getSecurityService().saveUser(user.getLogin(), - user.getMail()); + user = RemoteSecurityService.getSecurityService().saveUser( + user.getLogin(), user.getMail()); } else { - ServiceFactory.getSecurityService().updateUser(user); + user = RemoteSecurityService.getSecurityService().updateUser(user); } Integer[] groupsIds = new Integer[groupsOfUser.size()]; int i = 0; - for (String group : groupsOfUser) { - StringTokenizer st = new StringTokenizer(group, "/"); - groupsIds[i] = new Integer(st.nextToken()); + for (Group group : groupsOfUser) { + groupsIds[i] = group.getId(); i++; } - ServiceFactory.getSecurityService().setGroupsOfUser(user, groupsIds); + RemoteSecurityService.getSecurityService().setGroupsOfUser(user, + groupsIds); return userList; } - public List<String> getGroups() throws NamingException { - Group[] groups = ServiceFactory.getSecurityService().getGroups(); - List<String> result = new ArrayList<String>(); - for (int i = 0; i < groups.length; i++) { - result.add(groups[i].getId() + "/" + groups[i].getName()); + public List<Group> getGroups() throws Exception { + Group[] groups = RemoteSecurityService.getSecurityService().getGroups(); + List<Group> result = new ArrayList<Group>(); + for (Group group : groups) { + result.add(group); } return result; } + public ValueEncoder getGroupEncoder() { + return groupEncoder; + } + + public boolean getCreating() { + return (user.getId() == null); + } + public Object onActionFromCancel() { return userList; } @@ -88,16 +95,12 @@ return user; } - public List<String> getGroupsOfUser() { + public List<Group> getGroupsOfUser() { return groupsOfUser; } - public void setGroupsOfUser(List<String> groupsOfUser) { + public void setGroupsOfUser(List<Group> groupsOfUser) { this.groupsOfUser = groupsOfUser; } - public StringValueEncoder getStringEncoder() { - return stringEncoder; - } - } Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/UserList.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/UserList.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/UserList.java 2008-01-21 18:44:16 UTC (rev 335) @@ -3,8 +3,6 @@ import java.util.ArrayList; import java.util.List; -import javax.naming.NamingException; - import org.apache.tapestry.ComponentResources; import org.apache.tapestry.annotations.InjectPage; import org.apache.tapestry.annotations.Retain; @@ -14,7 +12,7 @@ import fr.cemagref.simexplorer.is.security.entities.User; import fr.cemagref.simexplorer.is.ui.web.pages.security.AdminPage; -import fr.cemagref.simexplorer.is.ui.web.services.ServiceFactory; +import fr.cemagref.simexplorer.is.ui.web.services.RemoteSecurityService; public class UserList extends AdminPage { @@ -50,14 +48,14 @@ model.add("delete", null); } - public User[] getUsers() throws NamingException { + public User[] getUsers() throws Exception { User[] users = null; - users = ServiceFactory.getSecurityService().getUsers(); + users = RemoteSecurityService.getSecurityService().getUsers(); return users; } public Object onActionFromDelete(Integer context) throws Exception { - ServiceFactory.getSecurityService().deleteUser(context); + RemoteSecurityService.getSecurityService().deleteUser(context); return null; } Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/AdminPage.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/AdminPage.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/AdminPage.java 2008-01-21 18:44:16 UTC (rev 335) @@ -3,7 +3,7 @@ public abstract class AdminPage extends ProtectedPage { public boolean hasAccessToPage() { - return isUserAdmin(getToken()); + return isUserAdmin(); } } Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/ProtectedPage.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/ProtectedPage.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/ProtectedPage.java 2008-01-21 18:44:16 UTC (rev 335) @@ -1,11 +1,10 @@ package fr.cemagref.simexplorer.is.ui.web.pages.security; -import javax.naming.NamingException; - import org.apache.tapestry.annotations.ApplicationState; +import org.apache.tapestry.ioc.annotations.Inject; import fr.cemagref.simexplorer.is.security.entities.User; -import fr.cemagref.simexplorer.is.ui.web.services.ServiceFactory; +import fr.cemagref.simexplorer.is.ui.web.services.RemoteSecurityService; public abstract class ProtectedPage { @@ -18,12 +17,12 @@ return null; } - public static User getUserLogged(String aToken) { + public User getUserLogged() { User loggedUser = null; - if (aToken != null) { + if (token != null) { try { - loggedUser = ServiceFactory.getSecurityService().getLoggedUser( - aToken); + loggedUser = RemoteSecurityService.getSecurityService().getLoggedUser( + token); } catch (Exception e) { // TODO: handle exception } @@ -31,10 +30,10 @@ return loggedUser; } - public static boolean isUserLogged(String aToken) { + public boolean isUserLogged() { boolean result = false; try { - if (getUserLogged(aToken) != null) { + if (getUserLogged() != null) { result = true; } } catch (Exception e) { @@ -43,10 +42,10 @@ return result; } - public static boolean isUserAdmin(String aToken) { + public boolean isUserAdmin() { boolean result = false; try { - User user = getUserLogged(aToken); + User user = getUserLogged(); if (user != null && user.isAdmin()) { result = true; } @@ -56,10 +55,10 @@ return result; } - public static boolean isUserSuperAdmin(String aToken) { + public boolean isUserSuperAdmin() { boolean result = false; try { - User user = getUserLogged(aToken); + User user = getUserLogged(); if (user != null && user.isSuperAdmin()) { result = true; } @@ -71,12 +70,4 @@ abstract boolean hasAccessToPage(); - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } - } \ No newline at end of file Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/SuperAdminPage.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/SuperAdminPage.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/SuperAdminPage.java 2008-01-21 18:44:16 UTC (rev 335) @@ -3,7 +3,7 @@ public abstract class SuperAdminPage extends ProtectedPage { public boolean hasAccessToPage() { - return isUserSuperAdmin(getToken()); + return isUserSuperAdmin(); } } Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/UserPage.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/UserPage.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/security/UserPage.java 2008-01-21 18:44:16 UTC (rev 335) @@ -3,7 +3,7 @@ public abstract class UserPage extends ProtectedPage { public boolean hasAccessToPage() { - return isUserLogged(getToken()); + return isUserLogged(); } } Added: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/AppModule.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/AppModule.java (rev 0) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/AppModule.java 2008-01-21 18:44:16 UTC (rev 335) @@ -0,0 +1,106 @@ +package fr.cemagref.simexplorer.is.ui.web.services; + +import java.io.IOException; + +import org.apache.tapestry.internal.services.GenericValueEncoderFactory; +import org.apache.tapestry.ioc.MappedConfiguration; +import org.apache.tapestry.ioc.OrderedConfiguration; +import org.apache.tapestry.ioc.ServiceBinder; +import org.apache.tapestry.ioc.annotations.InjectService; +import org.apache.tapestry.services.Request; +import org.apache.tapestry.services.RequestFilter; +import org.apache.tapestry.services.RequestHandler; +import org.apache.tapestry.services.Response; +import org.apache.tapestry.services.ValueEncoderFactory; +import org.slf4j.Logger; + +import fr.cemagref.simexplorer.is.security.entities.Group; +import fr.cemagref.simexplorer.is.security.entities.User; + +public class AppModule { + public static void bind(ServiceBinder binder) { + /* + binder.bind(RemoteStorageService.class, RemoteStorageServiceImpl.class); + binder.bind(RemoteSecurityService.class, RemoteSecurityServiceImpl.class); + */ + + // Make bind() calls on the binder object to define most IoC services. + // Use service builder methods (example below) when the implementation + // is provided inline, or requires more initialization than simply + // invoking the constructor. + } + + public static void contributeApplicationDefaults( + MappedConfiguration<String, String> configuration) { + configuration.add("tapestry.supported-locales", "en"); + configuration.add("tapestry.supported-locales", "fr"); + } + + public static void contributeValueEncoderSource( + MappedConfiguration<Class, ValueEncoderFactory> configuration) { + configuration.add(User.class, new GenericValueEncoderFactory<User>( + new UserValueEncoder())); + configuration.add(Group.class, new GenericValueEncoderFactory<Group>( + new GroupValueEncoder())); + } + + /** + * This is a service definition, the service will be named "TimingFilter". + * The interface, RequestFilter, is used within the RequestHandler service + * pipeline, which is built from the RequestHandler service configuration. + * Tapestry IoC is responsible for passing in an appropriate Log instance. + * Requests for static resources are handled at a higher level, so this + * filter will only be invoked for Tapestry related requests. + * + * <p> + * Service builder methods are useful when the implementation is inline as + * an inner class (as here) or require some other kind of special + * initialization. In most cases, use the static bind() method instead. + * + * <p> + * If this method was named "build", then the service id would be taken from + * the service interface and would be "RequestFilter". Since Tapestry + * already defines a service named "RequestFilter" we use an explicit + * service id that we can reference inside the contribution method. + */ + public RequestFilter buildTimingFilter(final Logger log) { + return new RequestFilter() { + public boolean service(Request request, Response response, + RequestHandler handler) throws IOException { + long startTime = System.currentTimeMillis(); + + try { + // The reponsibility of a filter is to invoke the + // corresponding method + // in the handler. When you chain multiple filters together, + // each filter + // received a handler that is a bridge to the next filter. + + return handler.service(request, response); + } finally { + long elapsed = System.currentTimeMillis() - startTime; + + log.info(String.format("Request time: %d ms", elapsed)); + } + } + }; + } + + /** + * This is a contribution to the RequestHandler service configuration. This + * is how we extend Tapestry using the timing filter. A common use for this + * kind of filter is transaction management or security. + */ + public void contributeRequestHandler( + OrderedConfiguration<RequestFilter> configuration, + @InjectService("TimingFilter") + RequestFilter filter) { + // Each contribution to an ordered configuration has a name, When + // necessary, you may + // set constraints to precisely control the invocation order of the + // contributed filter + // within the pipeline. + + configuration.add("Timing", filter); + } +} Added: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/GroupValueEncoder.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/GroupValueEncoder.java (rev 0) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/GroupValueEncoder.java 2008-01-21 18:44:16 UTC (rev 335) @@ -0,0 +1,23 @@ +package fr.cemagref.simexplorer.is.ui.web.services; + +import org.apache.tapestry.ValueEncoder; + +import fr.cemagref.simexplorer.is.security.entities.Group; + +public class GroupValueEncoder implements ValueEncoder<Group> { + + public String toClient(Group arg0) { + return Integer.toString(arg0.getId()); + } + + public Group toValue(String arg0) { + Group group = null; + try { + group = RemoteSecurityService.getSecurityService().getGroup(Integer.decode(arg0)); + } catch (Exception e) { + // TODO: handle exception + } + return group; + } + +} Added: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteSecurityService.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteSecurityService.java (rev 0) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteSecurityService.java 2008-01-21 18:44:16 UTC (rev 335) @@ -0,0 +1,10 @@ +package fr.cemagref.simexplorer.is.ui.web.services; + +import fr.cemagref.simexplorer.is.security.service.AuthenticationService; + +public class RemoteSecurityService extends RemoteService { + + public static AuthenticationService getSecurityService() throws Exception { + return (AuthenticationService) getService("AuthenticationService"); + } +} Added: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteService.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteService.java (rev 0) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteService.java 2008-01-21 18:44:16 UTC (rev 335) @@ -0,0 +1,31 @@ +package fr.cemagref.simexplorer.is.ui.web.services; + +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; + +public abstract class RemoteService { + + protected static Map<String, Object> services = new HashMap<String, Object>(); + + protected static Object getService(String serviceName) + throws NamingException { + if (services.get(serviceName) == null) { + Properties properties = (Properties) System.getProperties().clone(); + properties.put("java.naming.provider.url", "jnp://localhost:1099"); + properties.put("java.naming.factory.initial", + "org.jnp.interfaces.NamingContextFactory"); + properties + .put("java.naming.factory.url.pkgs", "org.jnp.interfaces"); + + Context context = new InitialContext(properties); + services.put(serviceName, context.lookup(serviceName)); + } + return services.get(serviceName); + } + +} Added: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteStorageService.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteStorageService.java (rev 0) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/RemoteStorageService.java 2008-01-21 18:44:16 UTC (rev 335) @@ -0,0 +1,10 @@ +package fr.cemagref.simexplorer.is.ui.web.services; + +import fr.cemagref.simexplorer.is.service.StorageService; + +public class RemoteStorageService extends RemoteService { + + public static StorageService getStorageService() throws Exception { + return (StorageService) getService("StorageService"); + } +} Deleted: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/ServiceFactory.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/ServiceFactory.java 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/ServiceFactory.java 2008-01-21 18:44:16 UTC (rev 335) @@ -1,42 +0,0 @@ -package fr.cemagref.simexplorer.is.ui.web.services; - -import java.util.Properties; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; - -import fr.cemagref.simexplorer.is.security.service.AuthenticationService; -import fr.cemagref.simexplorer.is.service.StorageService; - -public class ServiceFactory { - - private static StorageService serviceProjets = null; - private static AuthenticationService securityProjets = null; - - public static StorageService getStorageService() throws NamingException { - if (serviceProjets == null) { - serviceProjets = (StorageService) getService("StorageService"); - } - return serviceProjets; - } - - public static AuthenticationService getSecurityService() throws NamingException { - if (securityProjets == null) { - securityProjets = (AuthenticationService) getService("AuthenticationService"); - } - return securityProjets; - } - - private static Object getService(String serviceName) throws NamingException { - Properties properties = (Properties) System.getProperties().clone(); - properties.put("java.naming.provider.url", "jnp://localhost:1099"); - properties.put("java.naming.factory.initial", - "org.jnp.interfaces.NamingContextFactory"); - properties.put("java.naming.factory.url.pkgs", "org.jnp.interfaces"); - - Context context = new InitialContext(properties); - return context.lookup(serviceName); - } - -} Added: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/UserValueEncoder.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/UserValueEncoder.java (rev 0) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/services/UserValueEncoder.java 2008-01-21 18:44:16 UTC (rev 335) @@ -0,0 +1,24 @@ +package fr.cemagref.simexplorer.is.ui.web.services; + +import org.apache.tapestry.ValueEncoder; + +import fr.cemagref.simexplorer.is.security.entities.User; + +public class UserValueEncoder implements ValueEncoder<User> { + + public String toClient(User arg0) { + return Integer.toString(arg0.getId()); + } + + public User toValue(String arg0) { + User user = null; + try { + user = RemoteSecurityService.getSecurityService().getUser( + Integer.decode(arg0)); + } catch (Exception e) { + // TODO: handle exception + } + return user; + } + +} Modified: trunk/simexplorer-is-web/src/main/webapp/GroupEdit.tml =================================================================== --- trunk/simexplorer-is-web/src/main/webapp/GroupEdit.tml 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/main/webapp/GroupEdit.tml 2008-01-21 18:44:16 UTC (rev 335) @@ -4,20 +4,22 @@ <t:form> <t:errors /> - <t:errors/> - - <p>${message:name} : - <input t:type="TextField" t:id="name" t:validate="required,minlength=3" - t:value="group.name" size="30"/></p> + <t:errors /> - <p>${message:userMembers} : - <input t:type="Palette" model="users" selected="usersInGroup" encoder="stringEncoder"/> - </p> + <p>${message:name} : <input t:type="TextField" t:id="name" + t:validate="required,minlength=3" t:value="group.name" size="30" /></p> - <p>${message:groupMembers} : - <input t:type="Palette" model="groups" selected="groupsInGroup" encoder="stringEncoder"/> - </p> - + <t:if test="superAdmin"> + <p><t:label for="owner" /> : <input t:type="Select" t:id="owner" + t:value="owner" model="users" /></p> + </t:if> + + <p>${message:userMembers} : <input t:type="Palette" model="users" + selected="usersInGroup" encoder="userEncoder" /></p> + + <p>${message:groupMembers} : <input t:type="Palette" + model="groups" selected="groupsInGroup" encoder="groupEncoder" /></p> + <input t:type="Submit" t:value="message:submit" /> <a t:type="actionlink" t:id="cancel">${message:cancel}</a> Modified: trunk/simexplorer-is-web/src/main/webapp/UserEdit.tml =================================================================== --- trunk/simexplorer-is-web/src/main/webapp/UserEdit.tml 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/main/webapp/UserEdit.tml 2008-01-21 18:44:16 UTC (rev 335) @@ -4,7 +4,13 @@ <t:form> <t:errors /> - <p>${message:name} : ${user.login}</p> + <p>${message:name} : <t:if test="creating"> + <input t:type="TextField" t:id="login" + t:validate="required,minlength=4" t:value="user.login" size="40" /> + <t:parameter name="else"> + ${user.login} + </t:parameter> + </t:if></p> <p><t:label for="mail" />: <input t:type="TextField" t:id="mail" t:validate="required,minlength=4" t:value="user.mail" size="40" /></p> @@ -18,11 +24,10 @@ <p>${message:password} : <a t:type="ActionLink" t:id="resetPassword" t:context="user.id">${message:resetPassword}</a> </p> - - <p>${message:memberOf} : - <input t:type="Palette" model="groups" selected="groupsOfUser" encoder="stringEncoder"/> - </p> - + + <p>${message:memberOf} : <input t:type="Palette" model="groups" + selected="groupsOfUser" encoder="groupEncoder" /></p> + <input t:type="Submit" t:value="message:submit" /> <a t:type="actionlink" t:id="cancel">${message:cancel}</a> </t:form> Modified: trunk/simexplorer-is-web/src/main/webapp/WEB-INF/web.xml =================================================================== --- trunk/simexplorer-is-web/src/main/webapp/WEB-INF/web.xml 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/main/webapp/WEB-INF/web.xml 2008-01-21 18:44:16 UTC (rev 335) @@ -13,11 +13,12 @@ </context-param> <filter> - <filter-name>tapestryfilter</filter-name> + <filter-name>app</filter-name> <filter-class>org.apache.tapestry.TapestryFilter</filter-class> </filter> <filter-mapping> - <filter-name>tapestryfilter</filter-name> + <!-- do not change app as it uses for finding AppModule --> + <filter-name>app</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Modified: trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/components/css/Layout.css =================================================================== --- trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/components/css/Layout.css 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/components/css/Layout.css 2008-01-21 18:44:16 UTC (rev 335) @@ -166,6 +166,10 @@ font-family: verdana, arial, helvetica, sans-serif; } +menu.Menu>li>a.Link:Visited { + color: black; +} + .Hide { display: none; } Modified: trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.properties =================================================================== --- trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.properties 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.properties 2008-01-21 18:44:16 UTC (rev 335) @@ -1,3 +1,5 @@ name=Name +userMembers=User members +groupMembers=Group members cancel=Cancel submit=Submit \ No newline at end of file Modified: trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.properties =================================================================== --- trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.properties 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/src/resources/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.properties 2008-01-21 18:44:16 UTC (rev 335) @@ -7,4 +7,5 @@ submit=Submit cancel=Cancel password=Password -resetPassword=Reset password \ No newline at end of file +resetPassword=Reset password +memberOf=Member of \ No newline at end of file Deleted: trunk/simexplorer-is-web/tomcatstart.sh =================================================================== --- trunk/simexplorer-is-web/tomcatstart.sh 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/tomcatstart.sh 2008-01-21 18:44:16 UTC (rev 335) @@ -1,3 +0,0 @@ -export JPDA_TRANSPORT=dt_socket -export JPDA_ADDRESS=8786 -/opt/apache-tomcat-5.5.25/bin/catalina.sh jpda start Deleted: trunk/simexplorer-is-web/tomcatstop.sh =================================================================== --- trunk/simexplorer-is-web/tomcatstop.sh 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/tomcatstop.sh 2008-01-21 18:44:16 UTC (rev 335) @@ -1,4 +0,0 @@ -export JPDA_TRANSPORT=dt_socket -export JPDA_ADDRESS=8786 -/opt/apache-tomcat-5.5.25/bin/catalina.sh jpda stop - Deleted: trunk/simexplorer-is-web/undeploy.sh =================================================================== --- trunk/simexplorer-is-web/undeploy.sh 2008-01-21 09:35:17 UTC (rev 334) +++ trunk/simexplorer-is-web/undeploy.sh 2008-01-21 18:44:16 UTC (rev 335) @@ -1 +0,0 @@ -mvn tomcat:undeploy