Author: bleny Date: 2010-12-02 14:39:21 +0000 (Thu, 02 Dec 2010) New Revision: 818 Log: starting putting obsProgram everywhere in Wao Added: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ObsProgram.java trunk/wao-business/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserRole.java trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java trunk/wao-business/src/main/xmi/wao.zargo trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2010-11-30 11:11:13 UTC (rev 817) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2010-12-02 14:39:21 UTC (rev 818) @@ -25,7 +25,9 @@ package fr.ifremer.wao; import fr.ifremer.wao.bean.ContactState; +import fr.ifremer.wao.bean.ObsProgram; import fr.ifremer.wao.bean.SynthesisId; +import fr.ifremer.wao.bean.UserRole; import org.hibernate.SQLQuery; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; @@ -33,6 +35,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; @@ -578,4 +581,76 @@ protected void removeCodeDCF5columnFromProfession_1_6(List<String> queries) { queries.add("ALTER TABLE Profession DROP COLUMN codedcf5;"); } + + @Override + protected void addColumnsForObsProgram_1_7(List<String> queries) { + queries.add("ALTER TABLE Contact ADD obsProgramOrdinal SMALLINT;"); + queries.add("ALTER TABLE SampleRow ADD obsProgramOrdinal SMALLINT;"); + + queries.add(String.format("UPDATE Contact SET obsProgramOrdinal = %d", ObsProgram.OBSMER.ordinal())); + queries.add(String.format("UPDATE SampleRow SET obsProgramOrdinal = %d", ObsProgram.OBSMER.ordinal())); + + queries.add("ALTER TABLE Contact ALTER COLUMN obsProgramOrdinal SET NOT NULL;"); + queries.add("ALTER TABLE SampleRow ALTER COLUMN obsProgramOrdinal SET NOT NULL;"); + } + + @Override + protected void createTableUserProfile_1_7(List<String> queries) { + queries.add("CREATE TABLE UserProfile (" + + "topiaId CHARACTER VARYING(255) PRIMARY KEY," + + "topiaVersion BIGINT NOT NULL," + + "topiaCreateDate TIMESTAMP WITHOUT TIME ZONE NOT NULL," + + "waoUser character varying(255) NOT NULL," + + "obsProgramOrdinal SMALLINT NOT NULL," + + "userRoleOrdinal SMALLINT NOT NULL," + + "canWrite BOOLEAN NOT NULL," + + "CONSTRAINT waoUser_fkey FOREIGN KEY (waoUser) " + + "REFERENCES WaoUser (topiaid) MATCH SIMPLE " + + "ON UPDATE NO ACTION ON DELETE NO ACTION);"); + } + + @Override + protected void migrateFromUserRoleToUserProfile_1_7(TopiaContextImplementor tx, List<String> queries) throws TopiaException { + + SQLQuery query = tx.getHibernate(). + createSQLQuery("SELECT topiaId, role, roleReadOnly FROM WaoUser;"); + + List<Object[]> results = query.list(); + + String topiaIdPrefix = "fr.ifremer.wao.entities.UserProfile#1291132115000#933387724"; + int count = 0; + + int topiaVersion = 0; + String topiaCreateDateValue = "DATE '2010-11-09'"; + + for (Object[] row : results) { + String waoUserTopiaId = (String) row[0]; + short role = (Short) row[1]; + short roleReadOnly = (Short) row[1]; + + List<UserRole> readOnlyRoles = Arrays.asList(UserRole.toUserRoles(roleReadOnly)); + for (UserRole userRole : UserRole.toUserRoles(role)) { + boolean canWrite = ! readOnlyRoles.contains(userRole); + + String sql = String.format("INSERT INTO UserProfile (topiaId, topiaVersion, topiaCreateDate, waoUser, obsProgramOrdinal, userRoleOrdinal, canWrite) " + + "VALUES ('%s', %s, %s, '%s', %s, %s, %s);", + topiaIdPrefix + count++, + topiaVersion, + topiaCreateDateValue, + waoUserTopiaId, + ObsProgram.OBSMER.ordinal(), + userRole.ordinal(), + canWrite); + + queries.add(sql); + } + + } + } + + @Override + protected void removeUserRolesColumns_1_7(List<String> queries) { + queries.add("ALTER TABLE WaoUser DROP COLUMN role;"); + queries.add("ALTER TABLE WaoUser DROP COLUMN roleReadOnly;"); + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2010-11-30 11:11:13 UTC (rev 817) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/WaoMigrationCallBack.java 2010-12-02 14:39:21 UTC (rev 818) @@ -35,6 +35,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; @@ -103,6 +104,14 @@ protected abstract void removeCodeDCF5columnFromProfession_1_6(List<String> queries); + protected abstract void addColumnsForObsProgram_1_7(List<String> queries); + + protected abstract void createTableUserProfile_1_7(List<String> queries); + + protected abstract void migrateFromUserRoleToUserProfile_1_7(TopiaContextImplementor tx, List<String> queries) throws TopiaException; + + protected abstract void removeUserRolesColumns_1_7(List<String> queries); + protected static final Version[] VERSIONS = new Version[] { VersionUtil.valueOf("1.0"), VersionUtil.valueOf("1.1"), @@ -110,7 +119,8 @@ VersionUtil.valueOf("1.3"), VersionUtil.valueOf("1.4"), VersionUtil.valueOf("1.5"), - VersionUtil.valueOf("1.6") + VersionUtil.valueOf("1.6"), + VersionUtil.valueOf("1.7") }; @Override @@ -358,4 +368,22 @@ return result; } + public void migrateTo_1_7(TopiaContextImplementor tx, + boolean showSql, + boolean showProgression) throws TopiaException { + + List<String> queries = new LinkedList<String>(); + + addColumnsForObsProgram_1_7(queries); + + createTableUserProfile_1_7(queries); + + migrateFromUserRoleToUserProfile_1_7(tx, queries); + + removeUserRolesColumns_1_7(queries); + + String[] strings = queries.toArray(new String[queries.size()]); + executeSQL(tx, true, true, strings); + } + } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java 2010-11-30 11:11:13 UTC (rev 817) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ConnectedUserImpl.java 2010-12-02 14:39:21 UTC (rev 818) @@ -34,36 +34,36 @@ @Override public boolean isAdmin() { - return role.equals(UserRole.ADMIN); + return getProfile().isAdmin(); } @Override - public boolean isGuest() { - return role.equals(UserRole.GUEST); + public boolean isCoordinator() { + return getProfile().isCoordinator(); } @Override - public boolean isCoordinator() { - return role.equals(UserRole.COORDINATOR); + public boolean isObserver() { + return getProfile().isObserver(); } @Override - public boolean isObserver() { - return role.equals(UserRole.OBSERVER); + public boolean isGuest() { + return getProfile().isGuest(); } @Override public boolean isReadOnly() { - return user.isReadOnly(role); + return getProfile().isReadOnly(); } @Override public String getFullName() { - return user.getFullName(); + return getUser().getFullName(); } @Override public String getLogin() { - return user.getLogin(); + return getUser().getLogin(); } @Override Added: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ObsProgram.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ObsProgram.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ObsProgram.java 2010-12-02 14:39:21 UTC (rev 818) @@ -0,0 +1,16 @@ +package fr.ifremer.wao.bean; + +public enum ObsProgram { + + OBSMER, + OBSVENTE; + + public static ObsProgram valueOf(int obsProgramOrdinal) { + for (ObsProgram obsProgram : values()) { + if (obsProgram.ordinal() == obsProgramOrdinal) { + return obsProgram; + } + } + return null; + } +} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserRole.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserRole.java 2010-11-30 11:11:13 UTC (rev 817) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/UserRole.java 2010-12-02 14:39:21 UTC (rev 818) @@ -124,4 +124,13 @@ } return result.toArray(new UserRole[result.size()]); } + + public static UserRole valueOf(int userRoleOrdinal) { + for (UserRole userRole : values()) { + if (userRole.ordinal() == userRoleOrdinal) { + return userRole; + } + } + return null; + } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java 2010-11-30 11:11:13 UTC (rev 817) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/SampleRowImpl.java 2010-12-02 14:39:21 UTC (rev 818) @@ -25,6 +25,7 @@ package fr.ifremer.wao.entity; import fr.ifremer.wao.WaoUtils; +import fr.ifremer.wao.bean.ObsProgram; import fr.ifremer.wao.service.ServiceSampling; import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; @@ -421,4 +422,13 @@ setDCF5Code(dcfFives); } + @Override + public ObsProgram getObsProgram() { + return ObsProgram.valueOf(getObsProgramOrdinal()); + } + + @Override + public void setObsProgram(ObsProgram obsProgram) { + setObsProgramOrdinal(obsProgram.ordinal()); + } } Added: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/UserProfileImpl.java 2010-12-02 14:39:21 UTC (rev 818) @@ -0,0 +1,62 @@ +package fr.ifremer.wao.entity; + +import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.bean.UserRole; + +public class UserProfileImpl extends UserProfileAbstract { + + @Override + public UserRole getUserRole() { + return UserRole.valueOf(getUserRoleOrdinal()); + } + + @Override + public void setUserRole(UserRole userRole) { + setUserRoleOrdinal(userRole.ordinal()); + } + + @Override + public ObsProgram getObsProgram() { + return ObsProgram.valueOf(getObsProgramOrdinal()); + } + + @Override + public void setObsProgram(ObsProgram obsProgram) { + setObsProgramOrdinal(obsProgram.ordinal()); + } + + @Override + public boolean isAdmin() { + return getUserRole() == UserRole.ADMIN; + } + + @Override + public boolean isCoordinator() { + return getUserRole() == UserRole.COORDINATOR; + } + + @Override + public boolean isObserver() { + return getUserRole() == UserRole.OBSERVER; + } + + @Override + public boolean isGuest() { + return getUserRole() == UserRole.GUEST; + } + + @Override + public boolean isReadOnly() { + return ! getCanWrite(); + } + + @Override + public boolean isObsMer() { + return getObsProgram() == ObsProgram.OBSMER; + } + + @Override + public boolean isObsVente() { + return getObsProgram() == ObsProgram.OBSVENTE; + } +} \ No newline at end of file Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java 2010-11-30 11:11:13 UTC (rev 817) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/entity/WaoUserImpl.java 2010-12-02 14:39:21 UTC (rev 818) @@ -25,13 +25,10 @@ package fr.ifremer.wao.entity; import fr.ifremer.wao.WaoUtils; -import fr.ifremer.wao.bean.UserRole; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; -import java.util.Arrays; -import java.util.List; /** * UserImpl @@ -78,84 +75,4 @@ public boolean isPasswordChanged() { return this.passwordChanged; } - - @Override - public List<UserRole> getUserRoles() { - UserRole[] roles = UserRole.toUserRoles(getRole()); -// List<UserRole> results = new ArrayList<UserRole>(); -// if (roles.length > 0) { -// results = Arrays.asList(roles); -// } -// return results; - return Arrays.asList(roles); - } - - @Override - public boolean hasUserRole(UserRole role) { - boolean result = getUserRoles().contains(role); - return result; - } - - @Override - public boolean addUserRole(UserRole role, boolean readOnly) { - boolean added = false; - if (!hasUserRole(role)) { - if (logger.isDebugEnabled()) { - logger.debug("Add role : " + role + - " _ ordinal=" + role.ordinal() + - " _ code=" + role.toInt() + - " _ readOnly=" + readOnly); - } - // Just apply an addition to add the role - int newCode = getRole() + role.toInt(); - - if (logger.isDebugEnabled()) { - logger.debug("New code for role : " + newCode); - } - - setRole(newCode); - added = true; - } - - updateReadOnly(role, readOnly); - - return added; - } - - protected void updateReadOnly(UserRole role, boolean readOnly) { - - boolean previousReadOnly = isReadOnly(role); - - // Update readOnly true from false : add value with code calcul - if (readOnly && !previousReadOnly) { - int newReadOnly = getRoleReadOnly() + role.toInt(); - setRoleReadOnly(newReadOnly); - - // Update readOnly false from true : remove value with code calcul - } else if (!readOnly && previousReadOnly) { - int newReadOnly = getRoleReadOnly() - role.toInt(); - setRoleReadOnly(newReadOnly); - } - } - - @Override - public boolean removeUserRole(UserRole role) { - for (UserRole current : getUserRoles()) { - if (current.equals(role)) { - // Just apply a soustraction to remove the role - int newCode = getRole() - role.toInt(); - setRole(newCode); - // Update the readOnly to false (will check if operation is needed) - updateReadOnly(role, false); - return true; - } - } - return false; - } - - @Override - public boolean isReadOnly(UserRole role) { - boolean result = role.isSelected(getRoleReadOnly()); - return result; - } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java 2010-11-30 11:11:13 UTC (rev 817) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceUserImpl.java 2010-12-02 14:39:21 UTC (rev 818) @@ -30,8 +30,10 @@ import fr.ifremer.wao.WaoDAOHelper; import fr.ifremer.wao.WaoException; import fr.ifremer.wao.WaoProperty; +import fr.ifremer.wao.WaoQueryHelper; import fr.ifremer.wao.bean.ConnectedUser; import fr.ifremer.wao.bean.ConnectedUserImpl; +import fr.ifremer.wao.bean.ObsProgram; import fr.ifremer.wao.bean.UserRole; import fr.ifremer.wao.entity.Company; import fr.ifremer.wao.entity.CompanyDAO; @@ -39,6 +41,8 @@ import fr.ifremer.wao.entity.ContactDAO; import fr.ifremer.wao.entity.SampleRowLog; import fr.ifremer.wao.entity.SampleRowLogDAO; +import fr.ifremer.wao.entity.UserProfile; +import fr.ifremer.wao.entity.UserProfileImpl; import fr.ifremer.wao.entity.WaoUser; import fr.ifremer.wao.entity.WaoUserDAO; import fr.ifremer.wao.entity.WaoUserImpl; @@ -50,6 +54,8 @@ import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedList; import java.util.List; /** @@ -381,10 +387,16 @@ Integer[] matchCodes = UserRole.getMatchCodes(UserRole.OBSERVER, UserRole.COORDINATOR); - TopiaQuery query = dao.createQuery(). - addEquals(WaoUser.PROPERTY_ROLE, (Object[])matchCodes). - addOrder(WaoUser.PROPERTY_FIRST_NAME, WaoUser.PROPERTY_LAST_NAME); + WaoQueryHelper.UserProfileProperty userProfileProperty = + WaoQueryHelper.newUserProfileProperty(); + WaoQueryHelper.WaoUserProperty waoUserProperty = + WaoQueryHelper.newWaoUserProperty(); + TopiaQuery query = dao.createQuery() + .addJoin(waoUserProperty.userProfile(), userProfileProperty.$alias(), false) + .addEquals(userProfileProperty.userRoleOrdinal(), UserRole.OBSERVER.ordinal(), UserRole.COORDINATOR.ordinal()) + .addOrder(WaoUser.PROPERTY_FIRST_NAME, WaoUser.PROPERTY_LAST_NAME); + if (company != null) { query.addEquals(WaoUser.PROPERTY_COMPANY, company); } @@ -434,7 +446,6 @@ String password = context.encodeString("password"); WaoUser user = dao.create( - WaoUser.PROPERTY_ROLE, UserRole.ADMIN.toInt(), WaoUser.PROPERTY_ACTIVE, true, WaoUser.PROPERTY_LOGIN, "admin", WaoUser.PROPERTY_PASSWORD, password, @@ -442,6 +453,18 @@ WaoUser.PROPERTY_LAST_NAME, "Admin"); user.setCompany(company); + // this account will be admin on every programs + + Collection<UserProfile> profiles = new LinkedList<UserProfile>(); + for (ObsProgram obsProgram : ObsProgram.values()) { + UserProfile adminProfile = new UserProfileImpl(); + adminProfile.setUserRole(UserRole.ADMIN); + adminProfile.setObsProgram(obsProgram); + adminProfile.setCanWrite(true); + profiles.add(adminProfile); + } + user.setUserProfile(profiles); + transaction.commitTransaction(); } } Modified: trunk/wao-business/src/main/xmi/wao.zargo =================================================================== (Binary files differ) Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java 2010-11-30 11:11:13 UTC (rev 817) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Connexion.java 2010-12-02 14:39:21 UTC (rev 818) @@ -26,7 +26,8 @@ import fr.ifremer.wao.WaoException; import fr.ifremer.wao.bean.ConnectedUser; import fr.ifremer.wao.bean.UserRole; -import fr.ifremer.wao.entity.WaoUser; +import fr.ifremer.wao.entity.*; +import fr.ifremer.wao.entity.UserProfile; import fr.ifremer.wao.service.ServiceUser; import fr.ifremer.wao.ui.components.FeedBack; import fr.ifremer.wao.ui.data.TapestryUtil; @@ -170,7 +171,7 @@ */ @Log Object onSuccessFromConnexionForm() throws WaoException { - if (serviceAuthentication.getConnectedUser().getRole() == null) { + if (serviceAuthentication.getConnectedUser().getProfile() == null) { if (logger.isDebugEnabled()) { logger.debug("Not only one role, window will be open to select the role"); } @@ -261,8 +262,8 @@ } List<OptionModel> options = new ArrayList<OptionModel>(); - for (UserRole role : user.getUserRoles()) { - OptionModel option = new OptionModelImpl(role.getLabel(), role); + for (UserProfile profile : user.getUserProfile()) { + OptionModel option = new OptionModelImpl(profile.getUserRole().getLabel(), role); options.add(option); } roleSelectModel = new SelectModelImpl(null, options);