diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/exceptions/InvalidParameterException.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/exceptions/InvalidParameterException.java new file mode 100644 index 0000000..ae2172e --- /dev/null +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/exceptions/InvalidParameterException.java @@ -0,0 +1,16 @@ +package org.gcube.vremanagement.contextmanager.model.exceptions; + +public class InvalidParameterException extends OperationException { + + /** + * + */ + private static final long serialVersionUID = 1L; + + + public InvalidParameterException(String message) { + super(message); + } + + +} diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/exceptions/OperationException.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/exceptions/OperationException.java new file mode 100644 index 0000000..b9a2861 --- /dev/null +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/exceptions/OperationException.java @@ -0,0 +1,25 @@ +package org.gcube.vremanagement.contextmanager.model.exceptions; + +public abstract class OperationException extends Exception{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + public OperationException(String message, Throwable cause) { + super(message, cause); + // TODO Auto-generated constructor stub + } + + public OperationException(String message) { + super(message); + // TODO Auto-generated constructor stub + } + + public OperationException(Throwable cause) { + super(cause); + // TODO Auto-generated constructor stub + } + +} diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/AddResourceParameter.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/AddResourceParameter.java new file mode 100644 index 0000000..d820e9d --- /dev/null +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/AddResourceParameter.java @@ -0,0 +1,24 @@ +package org.gcube.vremanagement.contextmanager.model.operators; + +public class AddResourceParameter implements OperatorParameters{ + + private String contextId; + private String resourceId; + + protected AddResourceParameter() {} + + public AddResourceParameter(String contextId, String resourceId) { + super(); + this.contextId = contextId; + this.resourceId = resourceId; + } + + public String getContextId() { + return contextId; + } + + public String getResourceId() { + return resourceId; + } + +} diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/OperationParameters.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/OperatorParameters.java similarity index 64% rename from src/main/java/org/gcube/vremanagement/contextmanager/model/operators/OperationParameters.java rename to src/main/java/org/gcube/vremanagement/contextmanager/model/operators/OperatorParameters.java index 7511c28..5156be1 100644 --- a/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/OperationParameters.java +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/OperatorParameters.java @@ -1,5 +1,5 @@ package org.gcube.vremanagement.contextmanager.model.operators; -public class OperationParameters { +public interface OperatorParameters { } diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/context/ContextOperator.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/context/ContextOperator.java index 711aa6a..b8f33d8 100644 --- a/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/context/ContextOperator.java +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/context/ContextOperator.java @@ -1,15 +1,15 @@ package org.gcube.vremanagement.contextmanager.model.operators.context; +import java.util.Set; + import org.gcube.vremanagement.contextmanager.model.types.Context; public interface ContextOperator { - Context.Type getApplicationContextType(); + Set getAllowedContextType(); String getOperationId(); - String getName(); - String getDescription(); } diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/context/CustomContextOperator.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/context/CustomContextOperator.java index ff88035..da029f5 100644 --- a/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/context/CustomContextOperator.java +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/context/CustomContextOperator.java @@ -1,5 +1,40 @@ package org.gcube.vremanagement.contextmanager.model.operators.context; -public interface CustomContextOperator extends ContextOperator { +import org.gcube.vremanagement.contextmanager.model.exceptions.InvalidParameterException; +import org.gcube.vremanagement.contextmanager.model.exceptions.OperationException; +import org.gcube.vremanagement.contextmanager.model.operators.OperatorParameters; +import org.gcube.vremanagement.contextmanager.model.report.OperationResult; +import org.gcube.vremanagement.contextmanager.model.report.ReportEntry; +import org.gcube.vremanagement.contextmanager.model.types.Context; +public abstract class CustomContextOperator implements ContextOperator { + + protected abstract P checkAndTrasformParameters(Context context, OperatorParameters params) throws InvalidParameterException; + + protected abstract T execute(Context context, P params) throws OperationException; + + public abstract T undo(Context context, OperatorParameters params); + + public ReportEntry run(Context context, P params){ + P operationParams = null; + + try { + operationParams = checkAndTrasformParameters(context, params); + } catch (InvalidParameterException e) { + return new ReportEntry(this.getOperationId(), this.getDescription(), OperationResult.failure("parameters error: "+e.getMessage()), null); + } catch (Throwable e) { + return new ReportEntry(this.getOperationId(), this.getDescription(), OperationResult.failure("unexpected parameters error: "+e.getMessage()), null); + } + + T result = null; + try { + result = execute(context, operationParams); + }catch (OperationException e) { + return new ReportEntry(this.getOperationId(), this.getDescription(), OperationResult.failure("operation error: "+e.getMessage()), null); + } catch (Throwable e) { + return new ReportEntry(this.getOperationId(), this.getDescription(), OperationResult.failure("unexpected operation error: "+e.getMessage()), null); + } + + return new ReportEntry(this.getOperationId(), this.getDescription(), OperationResult.success() , result); + } } diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/resource/ResourceOperator.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/resource/ResourceOperator.java deleted file mode 100644 index feb81db..0000000 --- a/src/main/java/org/gcube/vremanagement/contextmanager/model/operators/resource/ResourceOperator.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.gcube.vremanagement.contextmanager.model.operators.resource; - -import org.gcube.vremanagement.contextmanager.model.operators.OperationParameters; - -public interface ResourceOperator { - - public void onResourceAdd(String token, String context, OperationParameters parameters); - - public void onResourceRemove(String token, String context, OperationParameters parameters); - -} diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/report/Report.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/report/Report.java index 81d9f38..0bd64b8 100644 --- a/src/main/java/org/gcube/vremanagement/contextmanager/model/report/Report.java +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/report/Report.java @@ -3,12 +3,64 @@ package org.gcube.vremanagement.contextmanager.model.report; import java.util.LinkedList; import java.util.List; +import org.gcube.vremanagement.contextmanager.model.types.Context.Type; + public class Report { - String contextName; - String contextType; + private String contextId; + private String contextName; + private Type contextType; + private String operationName; + private String user; + + private OperationResult result; private List entries = new LinkedList<>(); + protected Report() {} + public Report(String contextId, String contextName, Type contextType, String operationName, String user) { + super(); + this.contextId = contextId; + this.contextName = contextName; + this.contextType = contextType; + this.operationName = operationName; + this.user = user; + } + + public String getContextId() { + return contextId; + } + + public String getContextName() { + return contextName; + } + + public Type getContextType() { + return contextType; + } + + public String getOperationName() { + return operationName; + } + + public String getUser() { + return user; + } + + public List getEntries() { + return entries; + } + + public void add(ReportOperation operation) { + entries.add(operation); + } + + public OperationResult getResult() { + return result; + } + + public void setResult(OperationResult result) { + this.result = result; + } } diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportEntry.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportEntry.java index 2832a10..09d6000 100644 --- a/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportEntry.java +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportEntry.java @@ -1,27 +1,27 @@ package org.gcube.vremanagement.contextmanager.model.report; -import org.gcube.vremanagement.contextmanager.model.operators.OperationParameters; +import org.gcube.vremanagement.contextmanager.model.operators.OperatorParameters; -public class ReportEntry implements ReportOperation{ +public class ReportEntry implements ReportOperation{ private String operationId; - private String name; private String description; - private OperationParameters parameters; + private OperatorParameters parameters; private OperationResult result; + private T entryDescriptor; protected ReportEntry() {} - public ReportEntry(String operationId, String name, String description, OperationResult result) { + public ReportEntry(String operationId, String description, OperationResult result, T entryDescriptor) { super(); this.operationId = operationId; - this.name = name; this.description = description; this.result = result; + this.entryDescriptor = entryDescriptor; } - public ReportEntry(String operationId, String name, String description, OperationResult result, OperationParameters parameters) { - this(operationId, name, description, result); + public ReportEntry(String operationId, String description, OperationResult result, OperatorParameters parameters, T entryDescriptor) { + this(operationId, description, result, entryDescriptor); this.parameters = parameters; } @@ -29,20 +29,25 @@ public class ReportEntry implements ReportOperation{ return operationId; } - public String getName() { - return name; - } - public String getDescription() { return description; } - public OperationParameters getParameters() { + public OperatorParameters getParameters() { return parameters; } public OperationResult getResult() { return result; } + + @Override + public boolean isSingleOperation() { + return true; + } + + public T getEntryDescriptor() { + return entryDescriptor; + } } diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportGroup.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportGroup.java index b4e5c23..0c82e04 100644 --- a/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportGroup.java +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportGroup.java @@ -6,24 +6,18 @@ import java.util.List; public class ReportGroup implements ReportOperation{ private String name; - private String description; protected ReportGroup() {} private List entries = new LinkedList<>(); - public ReportGroup(String name, String description) { + public ReportGroup(String name) { this.name = name; - this.description = description; } public String getName() { return name; } - - public String getDescription() { - return description; - } public void addEntry(ReportEntry entry) { entries.add(entry); diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportOperation.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportOperation.java index ce40cbd..3a75fd9 100644 --- a/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportOperation.java +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/report/ReportOperation.java @@ -2,4 +2,7 @@ package org.gcube.vremanagement.contextmanager.model.report; public interface ReportOperation { + default boolean isSingleOperation() { + return false; + } } diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/types/Context.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/types/Context.java index aac91b9..d69f8e1 100644 --- a/src/main/java/org/gcube/vremanagement/contextmanager/model/types/Context.java +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/types/Context.java @@ -2,6 +2,7 @@ package org.gcube.vremanagement.contextmanager.model.types; public class Context { + private String id; private String name; private Context parent; diff --git a/src/main/java/org/gcube/vremanagement/contextmanager/model/types/ContextRetriever.java b/src/main/java/org/gcube/vremanagement/contextmanager/model/types/ContextRetriever.java new file mode 100644 index 0000000..8a9dd40 --- /dev/null +++ b/src/main/java/org/gcube/vremanagement/contextmanager/model/types/ContextRetriever.java @@ -0,0 +1,8 @@ +package org.gcube.vremanagement.contextmanager.model.types; + +import org.gcube.vremanagement.contextmanager.model.exceptions.InvalidContextException; + +public interface ContextRetriever { + + Context getContextById(String id) throws InvalidContextException; +}