You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2013/09/18 17:33:16 UTC
svn commit: r1524459 - in /syncope/trunk:
common/src/main/java/org/apache/syncope/common/services/
common/src/main/java/org/apache/syncope/common/to/
common/src/main/java/org/apache/syncope/common/types/
console/src/main/java/org/apache/syncope/console...
Author: fmartelli
Date: Wed Sep 18 15:33:15 2013
New Revision: 1524459
URL: http://svn.apache.org/r1524459
Log:
SYNCOPE-407 fixed
Added:
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UnauthorizedException.java
- copied, changed from r1523973, syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UnauthorizedRoleException.java
Modified:
syncope/trunk/common/src/main/java/org/apache/syncope/common/services/UserRequestService.java
syncope/trunk/common/src/main/java/org/apache/syncope/common/to/UserRequestTO.java
syncope/trunk/common/src/main/java/org/apache/syncope/common/types/AuditElements.java
syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java
syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Todo.java
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java
syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/UserRequestRestClient.java
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.html
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.properties
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo_it.properties
syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo_pt_BR.properties
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/UserRequest.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/UserRequestDAO.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserRequestDAOImpl.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserRequestController.java
syncope/trunk/core/src/main/java/org/apache/syncope/core/services/UserRequestServiceImpl.java
syncope/trunk/core/src/main/resources/content.xml
syncope/trunk/core/src/main/resources/quartz/tables_sqlServer.sql
syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/EntitlementTest.java
syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserRequestTestITCase.java
syncope/trunk/core/src/test/resources/content.xml
Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/services/UserRequestService.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/services/UserRequestService.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/services/UserRequestService.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/services/UserRequestService.java Wed Sep 18 15:33:15 2013
@@ -66,9 +66,17 @@ public interface UserRequestService {
* @return Returns list of all UserRequests.
*/
@GET
+ @Path("executed")
List<UserRequestTO> list();
/**
+ * @return Returns list of all UserRequests of the given user.
+ */
+ @GET
+ @Path("filter/{username}")
+ List<UserRequestTO> listByUsername(@PathParam("username") String username);
+
+ /**
* @param requestId ID of UserRequest to be read
* @return Returns UserRequest with matching requestId.
*/
@@ -83,6 +91,10 @@ public interface UserRequestService {
@Path("{requestId}")
void delete(@PathParam("requestId") Long requestId);
+ @GET
+ @Path("claim/{requestId}")
+ UserRequestTO claim(@PathParam("requestId") Long requestId);
+
@POST
@Path("create/execute/{requestId}")
UserTO executeCreate(@PathParam("requestId") Long requestId, UserTO reviewed);
@@ -91,7 +103,7 @@ public interface UserRequestService {
@Path("update/execute/{requestId}")
UserTO executeUpdate(@PathParam("requestId") Long requestId, UserMod changes);
- @POST
- @Path("delete/execute{requestId}")
+ @DELETE
+ @Path("delete/execute/{requestId}")
UserTO executeDelete(@PathParam("requestId") Long requestId);
}
Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/to/UserRequestTO.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/to/UserRequestTO.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/to/UserRequestTO.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/to/UserRequestTO.java Wed Sep 18 15:33:15 2013
@@ -18,6 +18,7 @@
*/
package org.apache.syncope.common.to;
+import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@@ -39,10 +40,32 @@ public class UserRequestTO extends Abstr
private Long userId;
+ private String username;
+
private UserRequestType type;
private boolean executed;
+ /**
+ * Username of the last user who claimed the request.
+ */
+ private String owner;
+
+ /**
+ * Creation date.
+ */
+ private Date creationDate;
+
+ /**
+ * Claim date.
+ */
+ private Date claimDate;
+
+ /**
+ * Execution date.
+ */
+ private Date executionDate;
+
public UserRequestTO() {
}
@@ -118,10 +141,18 @@ public class UserRequestTO extends Abstr
: userId;
}
- public void setUserId(final Long userId) {
+ public void setUserId(Long userId) {
this.userId = userId;
}
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
public void setExecuted(boolean executed) {
this.executed = executed;
}
@@ -129,4 +160,36 @@ public class UserRequestTO extends Abstr
public boolean isExecuted() {
return executed;
}
+
+ public String getOwner() {
+ return owner;
+ }
+
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ public Date getCreationDate() {
+ return creationDate;
+ }
+
+ public void setCreationDate(Date creationDate) {
+ this.creationDate = creationDate;
+ }
+
+ public Date getClaimDate() {
+ return claimDate;
+ }
+
+ public void setClaimDate(Date claimDate) {
+ this.claimDate = claimDate;
+ }
+
+ public Date getExecutionDate() {
+ return executionDate;
+ }
+
+ public void setExecutionDate(Date executionDate) {
+ this.executionDate = executionDate;
+ }
}
Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/types/AuditElements.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/types/AuditElements.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/types/AuditElements.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/types/AuditElements.java Wed Sep 18 15:33:15 2013
@@ -242,7 +242,8 @@ public final class AuditElements {
update,
delete,
isCreateAllowed,
- execute
+ execute,
+ claim
}
Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SyncopeClientExceptionType.java Wed Sep 18 15:33:15 2013
@@ -64,6 +64,7 @@ public enum SyncopeClientExceptionType {
RequiredValuesMissing("Syncope.RequiredValuesMissing", "Syncope.RequiredValuesMissing.attributeName"),
Scheduling("Syncope.Scheduling", "Syncope.Scheduling.message"),
UnauthorizedRole("Syncope.UnauthorizedRole", "Syncope.UnauthorizedRole.id"),
+ Unauthorized("Syncope.Unauthorized", "Syncope.Unauthorized"),
Unknown("Syncope.Unknown", ""),
Workflow("Syncope.Workflow", "Syncope.Workflow.message");
Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Todo.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Todo.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Todo.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Todo.java Wed Sep 18 15:33:15 2013
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.to.UserRequestTO;
import org.apache.syncope.common.to.WorkflowFormTO;
import org.apache.syncope.common.types.UserRequestType;
@@ -228,7 +229,10 @@ public class Todo extends BasePage {
List<IColumn> columns = new ArrayList<IColumn>();
columns.add(new PropertyColumn(new ResourceModel("id"), "id", "id"));
columns.add(new PropertyColumn(new ResourceModel("type"), "type", "type"));
- columns.add(new UserRequestColumn("user"));
+ columns.add(new PropertyColumn(new ResourceModel("username"), "username", "username"));
+ columns.add(new DatePropertyColumn(new ResourceModel("creationDate"), "creationDate", "creationDate"));
+ columns.add(new DatePropertyColumn(new ResourceModel("claimDate"), "claimDate", "claimDate"));
+ columns.add(new PropertyColumn(new ResourceModel("owner"), "owner", "owner"));
columns.add(new AbstractColumn<UserRequestTO, String>(new ResourceModel("actions", "")) {
private static final long serialVersionUID = 2054811145491901166L;
@@ -252,6 +256,23 @@ public class Todo extends BasePage {
@Override
public void onClick(final AjaxRequestTarget target) {
+ try {
+ userRequestRestClient.claim(model.getObject().getId());
+ info(getString(Constants.OPERATION_SUCCEEDED));
+ } catch (SyncopeClientCompositeErrorException scee) {
+ error(getString(Constants.ERROR) + ":" + scee.getMessage());
+ }
+ target.add(feedbackPanel);
+ target.add(userRequestContainer);
+ }
+ }, ActionLink.ActionType.CLAIM, "Approval");
+
+ panel.add(new ActionLink() {
+
+ private static final long serialVersionUID = -3722207913631435501L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target) {
editUserRequestWin.setPageCreator(new ModalWindow.PageCreator() {
private static final long serialVersionUID = -7834632442532690940L;
@@ -266,7 +287,9 @@ public class Todo extends BasePage {
editUserRequestWin.show(target);
}
}, ActionLink.ActionType.EDIT, "UserRequest",
- model.getObject().getType() != UserRequestType.DELETE);
+ model.getObject().getType() != UserRequestType.DELETE
+ && StringUtils.isNotBlank(model.getObject().getOwner())
+ && model.getObject().getOwner().equalsIgnoreCase(SyncopeSession.get().getUsername()));
panel.add(new ActionLink() {
@@ -275,8 +298,7 @@ public class Todo extends BasePage {
@Override
public void onClick(final AjaxRequestTarget target) {
try {
- userRestClient.delete(model.getObject().getUserId());
- userRequestRestClient.delete(model.getObject().getId());
+ userRequestRestClient.executeDelete(model.getObject().getId());
} catch (SyncopeClientCompositeErrorException e) {
LOG.error("While deleting an user", e);
error(e.getMessage());
@@ -289,7 +311,9 @@ public class Todo extends BasePage {
target.add(userRequestContainer);
}
}, ActionLink.ActionType.DELETE, "Users",
- model.getObject().getType() == UserRequestType.DELETE);
+ model.getObject().getType() == UserRequestType.DELETE
+ && StringUtils.isNotBlank(model.getObject().getOwner())
+ && model.getObject().getOwner().equalsIgnoreCase(SyncopeSession.get().getUsername()));
panel.add(new ActionLink() {
@@ -310,7 +334,9 @@ public class Todo extends BasePage {
target.add(userRequestContainer);
}
- }, ActionLink.ActionType.DELETE, "UserRequest");
+ }, ActionLink.ActionType.DELETE, "UserRequest",
+ StringUtils.isNotBlank(model.getObject().getOwner())
+ && model.getObject().getOwner().equalsIgnoreCase(SyncopeSession.get().getUsername()));
cellItem.add(panel);
}
@@ -376,7 +402,7 @@ public class Todo extends BasePage {
Collections.sort(list, comparator);
- return list.subList((int)first, (int)first + (int)count).iterator();
+ return list.subList((int) first, (int) first + (int) count).iterator();
}
@Override
@@ -418,7 +444,7 @@ public class Todo extends BasePage {
Collections.sort(list, comparator);
- return list.subList((int)first, (int)first + (int)count).iterator();
+ return list.subList((int) first, (int) first + (int) count).iterator();
}
@Override
@@ -450,7 +476,9 @@ public class Todo extends BasePage {
}
@Override
- public void populateItem(final Item<ICellPopulator<UserRequestTO>> cellItem, final String componentId,
+ public void populateItem(
+ final Item<ICellPopulator<UserRequestTO>> cellItem,
+ final String componentId,
final IModel<UserRequestTO> rowModel) {
String label = "";
Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/ConnectorRestClient.java Wed Sep 18 15:33:15 2013
@@ -152,7 +152,7 @@ public class ConnectorRestClient extends
*/
public boolean check(final ConnInstanceTO connectorTO) {
ConnInstanceTO toBeChecked = new ConnInstanceTO();
- BeanUtils.copyProperties(connectorTO, toBeChecked, new String[] {"configuration"});
+ BeanUtils.copyProperties(connectorTO, toBeChecked, new String[] {"configuration", "configurationMap"});
toBeChecked.getConfiguration().addAll(filterProperties(connectorTO.getConfiguration()));
boolean check = false;
Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/UserRequestRestClient.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/UserRequestRestClient.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/UserRequestRestClient.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/UserRequestRestClient.java Wed Sep 18 15:33:15 2013
@@ -40,6 +40,10 @@ public class UserRequestRestClient exten
getService(UserRequestService.class).delete(requestId);
}
+ public void claim(final Long requestId) {
+ getService(UserRequestService.class).claim(requestId);
+ }
+
public void requestCreate(final UserTO userTO) {
UserRequestTO userRequestTO = new UserRequestTO();
userRequestTO.setType(UserRequestType.CREATE);
Modified: syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.html
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.html?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.html (original)
+++ syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.html Wed Sep 18 15:33:15 2013
@@ -43,7 +43,7 @@ under the License.
<div id="tabs-2">
- <div id="users-contain" class="ui-widget">
+ <div id="users-contain" class="ui-widget" style="width:inherit;">
<span wicket:id="userRequestContainer">
<table class="ui-widget ui-widget-content table-hover"
wicket:id="userRequestTable"/>
Modified: syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.properties
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.properties?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.properties (original)
+++ syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo.properties Wed Sep 18 15:33:15 2013
@@ -26,5 +26,7 @@ approvals=Approval
userRequests=User requests
delete=Delete
type=Type
-user=User
+username=User
new_user=New user
+creationDate = Creation date
+claimDate = Claim date
Modified: syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo_it.properties
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo_it.properties?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo_it.properties (original)
+++ syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo_it.properties Wed Sep 18 15:33:15 2013
@@ -26,5 +26,7 @@ approvals=Approvazioni
userRequests=Richieste utente
delete=Rimuovi
type=Tipo
-user=Utente
+username=Utente
new_user=Nuovo utente
+creationDate = Data creazione
+claimDate = Data rivendicazione
Modified: syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo_pt_BR.properties
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo_pt_BR.properties?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo_pt_BR.properties (original)
+++ syncope/trunk/console/src/main/resources/org/apache/syncope/console/pages/Todo_pt_BR.properties Wed Sep 18 15:33:15 2013
@@ -16,15 +16,17 @@
# under the License.
taskId=Tarefa
key=Chave
-description=Descri\u00E7\u00E3o
-createTime=Tempo de Cria\u00E7\u00E3o
+description=Descri\u00e7\u00e3o
+createTime=Tempo de Cria\u00e7\u00e3o
dueDate=Data acordada
-owner=Propriet\u00E1rio
+owner=Propriet\u00e1rio
claim=Requerimento
-manage=Ger\u00EAncia
-approvals=Aprova\u00E7\u00E3o
-userRequests=Requisi\u00E7\u00F5es de usu\u00E1rio
+manage=Ger\u00eancia
+approvals=Aprova\u00e7\u00e3o
+userRequests=Requisi\u00e7\u00f5es de usu\u00e1rio
delete=Excluir
type=Tipo
-user=Usu\u00E1rio
-new_user=Novo Usu\u00E1rio
+username=Usu\u00e1rio
+new_user=Novo Usu\u00e1rio
+creationDate = Data de cria\u00e7\u00e3o
+claimDate = Data de reivindica\u00e7\u00e3o
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/UserRequest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/UserRequest.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/UserRequest.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/UserRequest.java Wed Sep 18 15:33:15 2013
@@ -18,7 +18,9 @@
*/
package org.apache.syncope.core.persistence.beans;
+import java.util.Date;
import javax.persistence.Basic;
+import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -26,6 +28,8 @@ import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
@@ -44,6 +48,9 @@ public class UserRequest extends Abstrac
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
+ @Column
+ private String username;
+
@NotNull
@Lob
private String payload;
@@ -57,6 +64,32 @@ public class UserRequest extends Abstrac
@Max(1)
private Integer executed;
+ /**
+ * Creation date.
+ */
+ @Column(nullable = false)
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date creationDate;
+
+ /**
+ * Claim date.
+ */
+ @Column
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date claimDate;
+
+ /**
+ * Execution date.
+ */
+ @Column
+ @Temporal(TemporalType.TIMESTAMP)
+ private Date executionDate;
+
+ /**
+ * Username of the last user who claimed the request.
+ */
+ private String owner;
+
public UserRequest() {
this.executed = 0;
}
@@ -75,7 +108,7 @@ public class UserRequest extends Abstrac
: XMLSerializer.<UserTO>deserialize(payload);
}
- public void setUserTO(final UserTO userTO) {
+ public void createUser(final UserTO userTO) {
type = UserRequestType.CREATE;
payload = XMLSerializer.serialize(userTO);
}
@@ -86,7 +119,7 @@ public class UserRequest extends Abstrac
: XMLSerializer.<UserMod>deserialize(payload);
}
- public void setUserMod(final UserMod userMod) {
+ public void updateUser(final UserMod userMod) {
type = UserRequestType.UPDATE;
payload = XMLSerializer.serialize(userMod);
}
@@ -97,11 +130,19 @@ public class UserRequest extends Abstrac
: Long.valueOf(payload);
}
- public void setUserId(final Long userId) {
+ public void deleteUser(final Long userId) {
type = UserRequestType.DELETE;
payload = String.valueOf(userId);
}
+ public void setUsername(final String username) {
+ this.username = username;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
public boolean isExecuted() {
return isBooleanAsInteger(executed);
}
@@ -109,4 +150,36 @@ public class UserRequest extends Abstrac
public void setExecuted(boolean executed) {
this.executed = getBooleanAsInteger(executed);
}
+
+ public String getOwner() {
+ return owner;
+ }
+
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ public Date getCreationDate() {
+ return creationDate;
+ }
+
+ public void setCreationDate(Date creationDate) {
+ this.creationDate = creationDate;
+ }
+
+ public Date getClaimDate() {
+ return claimDate;
+ }
+
+ public void setClaimDate(Date claimDate) {
+ this.claimDate = claimDate;
+ }
+
+ public Date getExecutionDate() {
+ return executionDate;
+ }
+
+ public void setExecutionDate(Date executionDate) {
+ this.executionDate = executionDate;
+ }
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/UserRequestDAO.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/UserRequestDAO.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/UserRequestDAO.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/UserRequestDAO.java Wed Sep 18 15:33:15 2013
@@ -28,8 +28,10 @@ public interface UserRequestDAO extends
UserRequest find(Long id);
List<UserRequest> findAll();
-
- List<UserRequest> findAll(final boolean executed);
+
+ List<UserRequest> findAll(boolean executed);
+
+ List<UserRequest> findAll(String username);
UserRequest save(UserRequest userRequest) throws InvalidEntityException;
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserRequestDAOImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserRequestDAOImpl.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserRequestDAOImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserRequestDAOImpl.java Wed Sep 18 15:33:15 2013
@@ -56,6 +56,17 @@ public class UserRequestDAOImpl extends
}
@Override
+ @Transactional(readOnly = true)
+ public List<UserRequest> findAll(final String username) {
+ TypedQuery<UserRequest> query = entityManager.createQuery(
+ "SELECT e " + "FROM " + UserRequest.class.getSimpleName() + " e WHERE e.username = :username",
+ UserRequest.class);
+ query.setParameter("username", username);
+
+ return query.getResultList();
+ }
+
+ @Override
public UserRequest save(final UserRequest userRequest) throws InvalidEntityException {
return entityManager.merge(userRequest);
}
Copied: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UnauthorizedException.java (from r1523973, syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UnauthorizedRoleException.java)
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UnauthorizedException.java?p2=syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UnauthorizedException.java&p1=syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UnauthorizedRoleException.java&r1=1523973&r2=1524459&rev=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UnauthorizedRoleException.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UnauthorizedException.java Wed Sep 18 15:33:15 2013
@@ -18,25 +18,11 @@
*/
package org.apache.syncope.core.rest.controller;
-import java.util.Collections;
-import java.util.Set;
+public class UnauthorizedException extends RuntimeException {
-public class UnauthorizedRoleException extends RuntimeException {
+ private static final long serialVersionUID = -2723923005455058023L;
- private static final long serialVersionUID = 7540587364235915081L;
-
- private final Set<Long> roleIds;
-
- public UnauthorizedRoleException(final Set<Long> roleIds) {
- super("Missing entitlement for role(s) " + roleIds);
- this.roleIds = roleIds;
- }
-
- public UnauthorizedRoleException(final Long roleId) {
- this(Collections.singleton(roleId));
- }
-
- public Set<Long> getRoleIds() {
- return roleIds;
+ public UnauthorizedException(final String message) {
+ super(message);
}
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserRequestController.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserRequestController.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserRequestController.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserRequestController.java Wed Sep 18 15:33:15 2013
@@ -18,20 +18,20 @@
*/
package org.apache.syncope.core.rest.controller;
-import static org.apache.syncope.common.types.UserRequestType.CREATE;
-import static org.apache.syncope.common.types.UserRequestType.DELETE;
-import static org.apache.syncope.common.types.UserRequestType.UPDATE;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
-
import javax.persistence.RollbackException;
-
+import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.mod.UserMod;
import org.apache.syncope.common.to.UserRequestTO;
import org.apache.syncope.common.to.UserTO;
import org.apache.syncope.common.types.AuditElements.Category;
import org.apache.syncope.common.types.AuditElements.Result;
import org.apache.syncope.common.types.AuditElements.UserRequestSubCategory;
+import org.apache.syncope.common.types.SyncopeClientExceptionType;
+import org.apache.syncope.common.validation.SyncopeClientCompositeErrorException;
+import org.apache.syncope.common.validation.SyncopeClientException;
import org.apache.syncope.core.audit.AuditManager;
import org.apache.syncope.core.persistence.beans.SyncopeConf;
import org.apache.syncope.core.persistence.beans.UserRequest;
@@ -39,9 +39,11 @@ import org.apache.syncope.core.persisten
import org.apache.syncope.core.persistence.dao.NotFoundException;
import org.apache.syncope.core.persistence.dao.UserRequestDAO;
import org.apache.syncope.core.rest.data.UserRequestDataBinder;
+import org.apache.syncope.core.util.EntitlementUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -94,11 +96,13 @@ public class UserRequestController {
}
UserRequest request = new UserRequest();
- request.setUserTO(userTO);
+ request.setUsername(userTO.getUsername());
+ request.createUser(userTO);
+ request.setCreationDate(new Date());
request = userRequestDAO.save(request);
auditManager.audit(Category.userRequest, UserRequestSubCategory.create, Result.success,
- "Successfully created user request for " + request.getUserTO().getUsername());
+ "Successfully created user request for " + request.getUsername());
return binder.getUserRequestTO(request);
}
@@ -114,11 +118,35 @@ public class UserRequestController {
}
UserRequest request = new UserRequest();
- request.setUserMod(userMod);
+ request.setUsername(binder.getUserFromId(userMod.getId()).getUsername());
+ request.updateUser(userMod);
+ request.setCreationDate(new Date());
request = userRequestDAO.save(request);
auditManager.audit(Category.userRequest, UserRequestSubCategory.update, Result.success,
- "Successfully updated user request for " + request.getUserMod().getId());
+ "Successfully updated user request for " + request.getUsername());
+
+ return binder.getUserRequestTO(request);
+ }
+
+ @PreAuthorize("isAuthenticated()")
+ public UserRequestTO delete(final Long userId) {
+ LOG.debug("Request user delete called with {}", userId);
+
+ try {
+ binder.testDelete(userId);
+ } catch (RollbackException e) {
+ LOG.debug("Testing delete - ignore exception");
+ }
+
+ UserRequest request = new UserRequest();
+ request.setUsername(binder.getUserFromId(userId).getUsername());
+ request.deleteUser(userId);
+ request.setCreationDate(new Date());
+ request = userRequestDAO.save(request);
+
+ auditManager.audit(Category.userRequest, UserRequestSubCategory.delete, Result.success,
+ "Successfully deleted user request for user" + request.getUsername());
return binder.getUserRequestTO(request);
}
@@ -154,6 +182,19 @@ public class UserRequestController {
return result;
}
+ public List<UserRequestTO> listByUsername(final String username) {
+ List<UserRequestTO> result = new ArrayList<UserRequestTO>();
+
+ for (UserRequest request : userRequestDAO.findAll(username)) {
+ result.add(binder.getUserRequestTO(request));
+ }
+
+ auditManager.audit(Category.userRequest, UserRequestSubCategory.list, Result.success,
+ String.format("Successfully listed all %s's requests: %d", username, result.size()));
+
+ return result;
+ }
+
@PreAuthorize("hasRole('USER_REQUEST_READ')")
@Transactional(readOnly = true)
public UserRequestTO read(final Long requestId) {
@@ -164,49 +205,47 @@ public class UserRequestController {
final UserRequestTO userRequestTO = binder.getUserRequestTO(request);
auditManager.audit(Category.userRequest, UserRequestSubCategory.read, Result.success,
- "Successfully read user request for " + getUserId(userRequestTO));
+ "Successfully read user request for " + request.getUsername());
return userRequestTO;
}
- @PreAuthorize("isAuthenticated()")
- public UserRequestTO delete(final Long userId) {
- LOG.debug("Request user delete called with {}", userId);
-
- try {
- binder.testDelete(userId);
- } catch (RollbackException e) {
- LOG.debug("Testing delete - ignore exception");
+ @PreAuthorize("hasRole('USER_REQUEST_DELETE')")
+ public UserRequestTO deleteRequest(final Long requestId) {
+ UserRequest request = userRequestDAO.find(requestId);
+ if (request == null) {
+ throw new NotFoundException("User request " + requestId);
}
- UserRequest request = new UserRequest();
- request.setUserId(userId);
- request = userRequestDAO.save(request);
+ UserRequestTO requestToDelete = binder.getUserRequestTO(request);
+ userRequestDAO.delete(requestId);
auditManager.audit(Category.userRequest, UserRequestSubCategory.delete, Result.success,
- "Successfully deleted user request for user" + userId);
+ "Successfully deleted user request for user" + request.getUsername());
- return binder.getUserRequestTO(request);
+ return requestToDelete;
}
- @PreAuthorize("hasRole('USER_REQUEST_DELETE')")
- public UserRequestTO deleteRequest(final Long requestId) {
+ @PreAuthorize("hasRole('USER_REQUEST_CLAIM')")
+ public UserRequestTO claim(final Long requestId) {
UserRequest request = userRequestDAO.find(requestId);
if (request == null) {
throw new NotFoundException("User request " + requestId);
}
- UserRequestTO requestToDelete = binder.getUserRequestTO(request);
+ request.setOwner(EntitlementUtil.getAuthenticatedUsername());
+ request.setClaimDate(new Date());
- auditManager.audit(Category.userRequest, UserRequestSubCategory.delete, Result.success,
- "Successfully deleted user request for user" + request.getUserId());
+ final UserRequestTO userRequestTO = binder.getUserRequestTO(userRequestDAO.save(request));
- userRequestDAO.delete(requestId);
+ auditManager.audit(Category.userRequest, UserRequestSubCategory.claim, Result.success,
+ String.format("Successfully claimed user request %s by %s",
+ userRequestTO.getId(), userRequestTO.getOwner()));
- return requestToDelete;
+ return userRequestTO;
}
- @PreAuthorize("hasRole('USER_REQUEST_READ') and ("
+ @PreAuthorize("hasRole('USER_REQUEST_EXECUTE') and ("
+ "(hasRole('USER_CREATE') and #request.type == #request.type.CREATE) or "
+ "(hasRole('USER_UPDATE') and #request.type == #request.type.UPDATE) or "
+ "(hasRole('USER_DELETE') and #request.type == #request.type.DELETE))")
@@ -216,6 +255,14 @@ public class UserRequestController {
throw new NotFoundException("Executable user request " + request.getId());
}
+ if (StringUtils.isBlank(request.getOwner())
+ || !request.getOwner().equalsIgnoreCase(EntitlementUtil.getAuthenticatedUsername())) {
+ final SyncopeClientCompositeErrorException scce =
+ new SyncopeClientCompositeErrorException(HttpStatus.UNAUTHORIZED);
+ scce.addException(new SyncopeClientException(SyncopeClientExceptionType.Unauthorized));
+ throw scce;
+ }
+
final UserTO res;
switch (request.getType()) {
@@ -233,18 +280,12 @@ public class UserRequestController {
}
userRequest.setExecuted(true);
+ userRequest.setExecutionDate(new Date());
userRequestDAO.save(userRequest);
auditManager.audit(Category.userRequest, UserRequestSubCategory.execute, Result.success,
- String.format("Successfully executed %s request for user %s",
- request.getType(), getUserId(request)));
+ String.format("Successfully executed %s request for user %d", request.getType(), res.getId()));
return res;
}
-
- private String getUserId(final UserRequestTO request) {
- return request.getType() == CREATE ? request.getUserTO().getUsername()
- : request.getType() == UPDATE ? String.valueOf(request.getUserMod().getId())
- : String.valueOf(request.getUserId());
- }
}
Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/services/UserRequestServiceImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/services/UserRequestServiceImpl.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/services/UserRequestServiceImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/services/UserRequestServiceImpl.java Wed Sep 18 15:33:15 2013
@@ -90,6 +90,11 @@ public class UserRequestServiceImpl exte
}
@Override
+ public UserRequestTO claim(final Long requestId) {
+ return controller.claim(requestId);
+ }
+
+ @Override
public UserTO executeCreate(final Long requestId, final UserTO reviewed) {
return controller.execute(controller.read(requestId), reviewed, null);
}
@@ -103,4 +108,9 @@ public class UserRequestServiceImpl exte
public UserTO executeDelete(final Long requestId) {
return controller.execute(controller.read(requestId), null, null);
}
+
+ @Override
+ public List<UserRequestTO> listByUsername(final String username) {
+ return controller.listByUsername(username);
+ }
}
Modified: syncope/trunk/core/src/main/resources/content.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/resources/content.xml?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/main/resources/content.xml (original)
+++ syncope/trunk/core/src/main/resources/content.xml Wed Sep 18 15:33:15 2013
@@ -88,6 +88,8 @@ under the License.
<Entitlement name="USER_REQUEST_LIST"/>
<Entitlement name="USER_REQUEST_READ"/>
<Entitlement name="USER_REQUEST_DELETE"/>
+ <Entitlement name="USER_REQUEST_EXECUTE"/>
+ <Entitlement name="USER_REQUEST_CLAIM"/>
<Entitlement name="REPORT_LIST"/>
<Entitlement name="REPORT_READ"/>
<Entitlement name="REPORT_CREATE"/>
Modified: syncope/trunk/core/src/main/resources/quartz/tables_sqlServer.sql
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/resources/quartz/tables_sqlServer.sql?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/main/resources/quartz/tables_sqlServer.sql (original)
+++ syncope/trunk/core/src/main/resources/quartz/tables_sqlServer.sql Wed Sep 18 15:33:15 2013
@@ -16,71 +16,55 @@
-- under the License.
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
-ALTER TABLE [dbo].[QRTZ_TRIGGERS] DROP CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS
-GO
+ALTER TABLE [dbo].[QRTZ_TRIGGERS] DROP CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS;
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
-ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] DROP CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS
-GO
+ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] DROP CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS;
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
-ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS
-GO
+ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS;
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)
-ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS
-GO
+ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS;
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CALENDARS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_CALENDARS]
-GO
+DROP TABLE [dbo].[QRTZ_CALENDARS];
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CRON_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_CRON_TRIGGERS]
-GO
+DROP TABLE [dbo].[QRTZ_CRON_TRIGGERS];
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_BLOB_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_BLOB_TRIGGERS]
-GO
+DROP TABLE [dbo].[QRTZ_BLOB_TRIGGERS];
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_FIRED_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_FIRED_TRIGGERS]
-GO
+DROP TABLE [dbo].[QRTZ_FIRED_TRIGGERS];
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_PAUSED_TRIGGER_GRPS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS]
-GO
+DROP TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS];
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SCHEDULER_STATE]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_SCHEDULER_STATE]
-GO
+DROP TABLE [dbo].[QRTZ_SCHEDULER_STATE];
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_LOCKS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_LOCKS]
-GO
+DROP TABLE [dbo].[QRTZ_LOCKS];
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_JOB_DETAILS]
-GO
+DROP TABLE [dbo].[QRTZ_JOB_DETAILS];
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPLE_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]
-GO
+DROP TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS];
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPROP_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS]
-GO
+DROP TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS];
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
-DROP TABLE [dbo].[QRTZ_TRIGGERS]
-GO
+DROP TABLE [dbo].[QRTZ_TRIGGERS];
CREATE TABLE [dbo].[QRTZ_CALENDARS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[CALENDAR_NAME] [VARCHAR] (200) NOT NULL ,
[CALENDAR] [IMAGE] NOT NULL
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
CREATE TABLE [dbo].[QRTZ_CRON_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
@@ -88,8 +72,7 @@ CREATE TABLE [dbo].[QRTZ_CRON_TRIGGERS]
[TRIGGER_GROUP] [VARCHAR] (200) NOT NULL ,
[CRON_EXPRESSION] [VARCHAR] (120) NOT NULL ,
[TIME_ZONE_ID] [VARCHAR] (80)
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
CREATE TABLE [dbo].[QRTZ_FIRED_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
@@ -105,28 +88,24 @@ CREATE TABLE [dbo].[QRTZ_FIRED_TRIGGERS]
[JOB_GROUP] [VARCHAR] (200) NULL ,
[IS_NONCONCURRENT] [VARCHAR] (1) NULL ,
[REQUESTS_RECOVERY] [VARCHAR] (1) NULL
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
CREATE TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[TRIGGER_GROUP] [VARCHAR] (200) NOT NULL
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
CREATE TABLE [dbo].[QRTZ_SCHEDULER_STATE] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[INSTANCE_NAME] [VARCHAR] (200) NOT NULL ,
[LAST_CHECKIN_TIME] [BIGINT] NOT NULL ,
[CHECKIN_INTERVAL] [BIGINT] NOT NULL
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
CREATE TABLE [dbo].[QRTZ_LOCKS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[LOCK_NAME] [VARCHAR] (40) NOT NULL
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
CREATE TABLE [dbo].[QRTZ_JOB_DETAILS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
@@ -139,8 +118,7 @@ CREATE TABLE [dbo].[QRTZ_JOB_DETAILS] (
[IS_UPDATE_DATA] [VARCHAR] (1) NOT NULL ,
[REQUESTS_RECOVERY] [VARCHAR] (1) NOT NULL ,
[JOB_DATA] [IMAGE] NULL
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
CREATE TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
@@ -149,8 +127,7 @@ CREATE TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS
[REPEAT_COUNT] [BIGINT] NOT NULL ,
[REPEAT_INTERVAL] [BIGINT] NOT NULL ,
[TIMES_TRIGGERED] [BIGINT] NOT NULL
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
CREATE TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
@@ -167,16 +144,14 @@ CREATE TABLE [dbo].[QRTZ_SIMPROP_TRIGGER
[DEC_PROP_2] [NUMERIC] (13,4) NULL,
[BOOL_PROP_1] [VARCHAR] (1) NULL,
[BOOL_PROP_2] [VARCHAR] (1) NULL,
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
CREATE TABLE [dbo].[QRTZ_BLOB_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
[TRIGGER_NAME] [VARCHAR] (200) NOT NULL ,
[TRIGGER_GROUP] [VARCHAR] (200) NOT NULL ,
[BLOB_DATA] [IMAGE] NULL
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
CREATE TABLE [dbo].[QRTZ_TRIGGERS] (
[SCHED_NAME] [VARCHAR] (120) NOT NULL ,
@@ -195,16 +170,14 @@ CREATE TABLE [dbo].[QRTZ_TRIGGERS] (
[CALENDAR_NAME] [VARCHAR] (200) NULL ,
[MISFIRE_INSTR] [SMALLINT] NULL ,
[JOB_DATA] [IMAGE] NULL
-) ON [PRIMARY]
-GO
+) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_CALENDARS] WITH NOCHECK ADD
CONSTRAINT [PK_QRTZ_CALENDARS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[CALENDAR_NAME]
- ) ON [PRIMARY]
-GO
+ ) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] WITH NOCHECK ADD
CONSTRAINT [PK_QRTZ_CRON_TRIGGERS] PRIMARY KEY CLUSTERED
@@ -212,40 +185,35 @@ ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] W
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
- ) ON [PRIMARY]
-GO
+ ) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_FIRED_TRIGGERS] WITH NOCHECK ADD
CONSTRAINT [PK_QRTZ_FIRED_TRIGGERS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[ENTRY_ID]
- ) ON [PRIMARY]
-GO
+ ) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] WITH NOCHECK ADD
CONSTRAINT [PK_QRTZ_PAUSED_TRIGGER_GRPS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[TRIGGER_GROUP]
- ) ON [PRIMARY]
-GO
+ ) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_SCHEDULER_STATE] WITH NOCHECK ADD
CONSTRAINT [PK_QRTZ_SCHEDULER_STATE] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[INSTANCE_NAME]
- ) ON [PRIMARY]
-GO
+ ) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_LOCKS] WITH NOCHECK ADD
CONSTRAINT [PK_QRTZ_LOCKS] PRIMARY KEY CLUSTERED
(
[SCHED_NAME],
[LOCK_NAME]
- ) ON [PRIMARY]
-GO
+ ) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_JOB_DETAILS] WITH NOCHECK ADD
CONSTRAINT [PK_QRTZ_JOB_DETAILS] PRIMARY KEY CLUSTERED
@@ -253,8 +221,7 @@ ALTER TABLE [dbo].[QRTZ_JOB_DETAILS] WIT
[SCHED_NAME],
[JOB_NAME],
[JOB_GROUP]
- ) ON [PRIMARY]
-GO
+ ) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] WITH NOCHECK ADD
CONSTRAINT [PK_QRTZ_SIMPLE_TRIGGERS] PRIMARY KEY CLUSTERED
@@ -262,8 +229,7 @@ ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
- ) ON [PRIMARY]
-GO
+ ) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] WITH NOCHECK ADD
CONSTRAINT [PK_QRTZ_SIMPROP_TRIGGERS] PRIMARY KEY CLUSTERED
@@ -271,8 +237,7 @@ ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
- ) ON [PRIMARY]
-GO
+ ) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_TRIGGERS] WITH NOCHECK ADD
CONSTRAINT [PK_QRTZ_TRIGGERS] PRIMARY KEY CLUSTERED
@@ -280,8 +245,7 @@ ALTER TABLE [dbo].[QRTZ_TRIGGERS] WITH N
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
- ) ON [PRIMARY]
-GO
+ ) ON [PRIMARY];
ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] ADD
CONSTRAINT [FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
@@ -293,8 +257,7 @@ ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] A
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
- ) ON DELETE CASCADE
-GO
+ ) ON DELETE CASCADE;
ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] ADD
CONSTRAINT [FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
@@ -306,8 +269,7 @@ ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
- ) ON DELETE CASCADE
-GO
+ ) ON DELETE CASCADE;
ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ADD
CONSTRAINT [FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY
@@ -319,8 +281,7 @@ ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS
[SCHED_NAME],
[TRIGGER_NAME],
[TRIGGER_GROUP]
- ) ON DELETE CASCADE
-GO
+ ) ON DELETE CASCADE;
ALTER TABLE [dbo].[QRTZ_TRIGGERS] ADD
CONSTRAINT [FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS] FOREIGN KEY
@@ -332,5 +293,4 @@ ALTER TABLE [dbo].[QRTZ_TRIGGERS] ADD
[SCHED_NAME],
[JOB_NAME],
[JOB_GROUP]
- )
-GO
+ );
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/EntitlementTest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/EntitlementTest.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/EntitlementTest.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/persistence/dao/EntitlementTest.java Wed Sep 18 15:33:15 2013
@@ -41,7 +41,7 @@ public class EntitlementTest extends Abs
@Test
public void findAll() {
List<Entitlement> list = entitlementDAO.findAll();
- assertEquals("did not get expected number of entitlements ", 84, list.size());
+ assertEquals("did not get expected number of entitlements ", 86, list.size());
}
@Test
Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserRequestTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserRequestTestITCase.java?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserRequestTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserRequestTestITCase.java Wed Sep 18 15:33:15 2013
@@ -19,6 +19,7 @@
package org.apache.syncope.core.rest;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
@@ -39,6 +40,7 @@ import org.apache.syncope.common.to.Conf
import org.apache.syncope.common.to.UserRequestTO;
import org.apache.syncope.common.to.UserTO;
import org.apache.syncope.common.types.SyncopeClientExceptionType;
+import org.apache.syncope.common.types.UserRequestType;
import org.apache.syncope.common.validation.SyncopeClientCompositeErrorException;
import org.junit.FixMethodOrder;
import org.junit.Test;
@@ -202,7 +204,8 @@ public class UserRequestTestITCase exten
@Test
public void execute() {
- UserTO userTO = UserTestITCase.getUniqueSampleTO("ex.create@syncope.apache.org");
+ final String USERNAME = "ex.create@syncope.apache.org";
+ UserTO userTO = UserTestITCase.getUniqueSampleTO(USERNAME);
final String initialPassword = userTO.getPassword();
UserRequestService selfservice = createServiceInstance(UserRequestService.class, null, null);
@@ -210,6 +213,11 @@ public class UserRequestTestITCase exten
UserRequestTO userRequest = getObject(response, UserRequestTO.class, userRequestService);
assertNotNull(userRequest);
+ assertEquals(UserRequestType.CREATE, userRequest.getType());
+ assertTrue(userRequest.getUsername().endsWith(USERNAME));
+ assertNotNull(userRequest.getCreationDate());
+ assertNull(userRequest.getClaimDate());
+ assertNull(userRequest.getExecutionDate());
try {
userService.read(userTO.getUsername());
@@ -219,8 +227,21 @@ public class UserRequestTestITCase exten
}
assertFalse(userRequestService.read(userRequest.getId()).isExecuted());
+ userRequest = userRequestService.claim(userRequest.getId());
+ assertEquals("admin", userRequest.getOwner());
+ assertTrue(userRequest.getUsername().endsWith(USERNAME));
+ assertNotNull(userRequest.getCreationDate());
+ assertNotNull(userRequest.getClaimDate());
+ assertNull(userRequest.getExecutionDate());
+
assertNotNull(userRequestService.executeCreate(userRequest.getId(), userTO));
- assertTrue(userRequestService.read(userRequest.getId()).isExecuted());
+
+ userRequest = userRequestService.read(userRequest.getId());
+ assertTrue(userRequest.isExecuted());
+ assertTrue(userRequest.getUsername().endsWith(USERNAME));
+ assertNotNull(userRequest.getCreationDate());
+ assertNotNull(userRequest.getClaimDate());
+ assertNotNull(userRequest.getExecutionDate());
for (UserRequestTO userRequestTO : userRequestService.list()) {
assertFalse(userRequestTO.isExecuted());
@@ -239,6 +260,8 @@ public class UserRequestTestITCase exten
userRequest = getObject(response, UserRequestTO.class, userRequestService);
assertNotNull(userRequest);
+ assertEquals(UserRequestType.UPDATE, userRequest.getType());
+ assertTrue(userRequest.getUsername().endsWith(USERNAME));
final String newpwd = "new" + initialPassword + "!";
@@ -247,6 +270,8 @@ public class UserRequestTestITCase exten
furtherChanges.setPassword(newpwd);
assertFalse(userRequestService.read(userRequest.getId()).isExecuted());
+ userRequest = userRequestService.claim(userRequest.getId());
+ assertEquals("admin", userRequest.getOwner());
assertNotNull(userRequestService.executeUpdate(userRequest.getId(), furtherChanges));
assertTrue(userRequestService.read(userRequest.getId()).isExecuted());
@@ -270,8 +295,12 @@ public class UserRequestTestITCase exten
userRequest = getObject(response, UserRequestTO.class, userRequestService);
assertNotNull(userRequest);
+ assertEquals(UserRequestType.DELETE, userRequest.getType());
+ assertTrue(userRequest.getUsername().endsWith(USERNAME));
assertFalse(userRequestService.read(userRequest.getId()).isExecuted());
+ userRequest = userRequestService.claim(userRequest.getId());
+ assertEquals("admin", userRequest.getOwner());
userRequestService.executeDelete(userRequest.getId());
assertTrue(userRequestService.read(userRequest.getId()).isExecuted());
@@ -285,6 +314,21 @@ public class UserRequestTestITCase exten
} catch (Exception ignore) {
// ignore
}
+
+ assertEquals(3, userRequestService.listByUsername(userTO.getUsername()).size());
+ }
+
+ @Test(expected = SyncopeClientCompositeErrorException.class)
+ public void executeNoClaim() {
+ UserTO userTO = UserTestITCase.getUniqueSampleTO("reqnoclaim@syncope.apache.org");
+
+ final UserRequestService selfservice = createServiceInstance(UserRequestService.class, null, null);
+
+ final UserRequestTO userRequest = getObject(
+ createUserRequest(selfservice, new UserRequestTO(userTO)), UserRequestTO.class, userRequestService);
+ assertNotNull(userRequest);
+
+ userRequestService.executeCreate(userRequest.getId(), userTO);
}
private Response createUserRequest(final UserRequestService service, final UserRequestTO userRequestTO) {
Modified: syncope/trunk/core/src/test/resources/content.xml
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/resources/content.xml?rev=1524459&r1=1524458&r2=1524459&view=diff
==============================================================================
--- syncope/trunk/core/src/test/resources/content.xml (original)
+++ syncope/trunk/core/src/test/resources/content.xml Wed Sep 18 15:33:15 2013
@@ -863,6 +863,8 @@ under the License.
<Entitlement name="USER_REQUEST_LIST"/>
<Entitlement name="USER_REQUEST_READ"/>
<Entitlement name="USER_REQUEST_DELETE"/>
+ <Entitlement name="USER_REQUEST_EXECUTE"/>
+ <Entitlement name="USER_REQUEST_CLAIM"/>
<Entitlement name="REPORT_LIST"/>
<Entitlement name="REPORT_READ"/>
<Entitlement name="REPORT_CREATE"/>