diff --git a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectPresenter.java b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectPresenter.java index 8929fa2a1..1060c13c3 100644 --- a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectPresenter.java +++ b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectPresenter.java @@ -2,18 +2,15 @@ import com.google.web.bindery.event.shared.EventBus; import edu.stanford.bmir.protege.web.client.app.ApplicationEnvironmentManager; -import edu.stanford.bmir.protege.web.client.dispatch.DispatchErrorMessageDisplay; -import edu.stanford.bmir.protege.web.client.dispatch.DispatchServiceCallbackWithProgressDisplay; -import edu.stanford.bmir.protege.web.client.dispatch.DispatchServiceManager; -import edu.stanford.bmir.protege.web.client.dispatch.ProgressDisplay; +import edu.stanford.bmir.protege.web.client.dispatch.*; import edu.stanford.bmir.protege.web.client.library.msgbox.MessageBox; import edu.stanford.bmir.protege.web.client.projectmanager.ProjectCreatedEvent; import edu.stanford.bmir.protege.web.client.upload.FileUploader; import edu.stanford.bmir.protege.web.client.user.LoggedInUserManager; import edu.stanford.bmir.protege.web.client.uuid.UuidV4; import edu.stanford.bmir.protege.web.shared.csv.DocumentId; -import edu.stanford.bmir.protege.web.shared.dispatch.actions.GetUserInfoAction; -import edu.stanford.bmir.protege.web.shared.dispatch.actions.GetUserInfoResult; +import edu.stanford.bmir.protege.web.shared.dispatch.actions.*; +import edu.stanford.bmir.protege.web.shared.icd.*; import edu.stanford.bmir.protege.web.shared.permissions.PermissionDeniedException; import edu.stanford.bmir.protege.web.shared.project.*; @@ -80,6 +77,7 @@ public CreateNewProjectView getView() { public void start() { view.clear(); view.setFileUploadEnabled(loggedInUserManager.isAllowedApplicationAction(UPLOAD_PROJECT)); + view.setFileSourceTypeOptions(); } private boolean validate() { @@ -98,28 +96,91 @@ public void validateAndCreateProject(ProjectCreatedHandler handler) { private void submitCreateProjectRequest(ProjectCreatedHandler handler) { - if (view.isFileUploadSpecified()) { + String fileSourceType = view.getFileSourceType(); + if (fileSourceType.equals("owl") && view.isFileUploadSpecified()) { uploadSourcesAndCreateProject(handler); - } - else { + } else if (fileSourceType.equals("backup") && view.isFileUploadSpecified()) { + uploadProjectBackupAndCreateProjectFromBackup(handler); + } else { createEmptyProject(handler); } } private void createEmptyProject(ProjectCreatedHandler projectCreatedHandler) { NewProjectSettings newProjectSettings = NewProjectSettings.get(loggedInUserManager.getLoggedInUserId(), - view.getProjectName(), - view.getProjectLanguage(), - view.getProjectDescription()); + view.getProjectName(), + view.getProjectLanguage(), + view.getProjectDescription()); submitCreateNewProjectRequest(newProjectSettings, projectCreatedHandler); } + private void uploadProjectBackupAndCreateProjectFromBackup(@Nonnull ProjectCreatedHandler projectCreatedHandler) { + checkNotNull(projectCreatedHandler); + progressDisplay.displayProgress("Uploading file", "Uploading file. Please wait."); + dispatchServiceManager.execute(new GetUserInfoAction(), + info -> createProjectFromProjectBackupForUser(info, projectCreatedHandler)); + } + + private void createProjectFromProjectBackupForUser(GetUserInfoResult userInfo, + ProjectCreatedHandler projectCreatedHandler) { + String fileUploadElementId = view.getFileUploadElementId(); + FileUploader fileUploader = new FileUploader(applicationEnvironmentManager.getAppEnvVariables().getFileUploadUrl()); + fileUploader.uploadFile(fileUploadElementId, + userInfo.getToken(), + fileSubmissionId -> handleProjectBackupFilesSubmissionSuccess(projectCreatedHandler, fileSubmissionId), + this::handleFileSubmissionError); + } + + private void handleProjectBackupFilesSubmissionSuccess(ProjectCreatedHandler projectCreatedHandler, String fileSubmissionId) { + progressDisplay.hideProgress(); + handleCreateNewProjectFromProjectBackup(projectCreatedHandler, + new DocumentId(fileSubmissionId)); + } + + private void handleCreateNewProjectFromProjectBackup(ProjectCreatedHandler projectCreatedHandler, DocumentId documentId) { + NewProjectSettings newProjectSettings = NewProjectSettings.get(loggedInUserManager.getLoggedInUserId(), + view.getProjectName(), + view.getProjectLanguage(), + view.getProjectDescription(), + documentId); + submitCreateNewProjectFromProjectBackupRequest(newProjectSettings, projectCreatedHandler); + } + + private void submitCreateNewProjectFromProjectBackupRequest(NewProjectSettings newProjectSettings, ProjectCreatedHandler projectCreatedHandler) { + String uuid = UuidV4.uuidv4(); + ProjectId newProjectId = ProjectId.get(uuid); + dispatchServiceManager.execute(new CreateNewProjectFromProjectBackupAction(newProjectId, newProjectSettings), + new DispatchServiceCallbackWithProgressDisplay<CreateNewProjectFromProjectBackupResult>( + errorDisplay, + progressDisplay) { + @Override + public String getProgressDisplayTitle() { + return "Creating project"; + } + + @Override + public String getProgressDisplayMessage() { + return "Please wait."; + } + + @Override + public void handleSuccess(CreateNewProjectFromProjectBackupResult result) { + handleProjectCreationSuccess(projectCreatedHandler, result.getProjectDetails()); + } + + @Override + public void handleExecutionException(Throwable cause) { + handleProjectCreationException(cause); + } + }); + } + private void uploadSourcesAndCreateProject(@Nonnull ProjectCreatedHandler projectCreatedHandler) { checkNotNull(projectCreatedHandler); progressDisplay.displayProgress("Uploading file", "Uploading file. Please wait."); dispatchServiceManager.execute(new GetUserInfoAction(), - info -> createProjectForUser(info, projectCreatedHandler)); + info -> createProjectForUser(info, projectCreatedHandler)); } private void createProjectForUser(GetUserInfoResult userInfo, @@ -128,9 +189,9 @@ private void createProjectForUser(GetUserInfoResult userInfo, String fileUploadElementId = view.getFileUploadElementId(); FileUploader fileUploader = new FileUploader(applicationEnvironmentManager.getAppEnvVariables().getFileUploadUrl()); fileUploader.uploadFile(fileUploadElementId, - userInfo.getToken(), - fileSubmissionId -> handleFileSubmissionSuccess(projectCreatedHandler, fileSubmissionId), - this::handleFileSubmissionError); + userInfo.getToken(), + fileSubmissionId -> handleFileSubmissionSuccess(projectCreatedHandler, fileSubmissionId), + this::handleFileSubmissionError); } private void handleFileSubmissionError(int errorCode) { @@ -142,15 +203,15 @@ private void handleFileSubmissionSuccess(CreateNewProjectPresenter.ProjectCreate String fileSubmissionId) { progressDisplay.hideProgress(); handleCreateNewProjectFromUploadedSources(projectCreatedHandler, - new DocumentId(fileSubmissionId)); + new DocumentId(fileSubmissionId)); } private void handleCreateNewProjectFromUploadedSources(ProjectCreatedHandler projectCreatedHandler, DocumentId documentId) { NewProjectSettings newProjectSettings = NewProjectSettings.get(loggedInUserManager.getLoggedInUserId(), - view.getProjectName(), - view.getProjectLanguage(), - view.getProjectDescription(), - documentId); + view.getProjectName(), + view.getProjectLanguage(), + view.getProjectDescription(), + documentId); submitCreateNewProjectRequest(newProjectSettings, projectCreatedHandler); } @@ -159,46 +220,51 @@ private void submitCreateNewProjectRequest(@Nonnull NewProjectSettings newProjec String uuid = UuidV4.uuidv4(); ProjectId newProjectId = ProjectId.get(uuid); dispatchServiceManager.execute(new CreateNewProjectAction(newProjectId, newProjectSettings), - new DispatchServiceCallbackWithProgressDisplay<CreateNewProjectResult>( - errorDisplay, - progressDisplay) { - @Override - public String getProgressDisplayTitle() { - return "Creating project"; - } - - @Override - public String getProgressDisplayMessage() { - return "Please wait."; - } - - @Override - public void handleSuccess(CreateNewProjectResult result) { - projectCreatedHandler.handleProjectCreated(); - eventBus.fireEvent(new ProjectCreatedEvent(result.getProjectDetails())); - } - - @Override - public void handleExecutionException(Throwable cause) { - if (cause instanceof PermissionDeniedException) { - messageBox.showMessage( - "You do not have permission to create new projects"); - } - else if (cause instanceof ProjectAlreadyRegisteredException) { - ProjectAlreadyRegisteredException ex = (ProjectAlreadyRegisteredException) cause; - String projectName = ex.getProjectId().getId(); - messageBox.showMessage("The project name " + projectName + " is already registered. Please try a different name."); - } - else if (cause instanceof ProjectDocumentExistsException) { - ProjectDocumentExistsException ex = (ProjectDocumentExistsException) cause; - String projectName = ex.getProjectId().getId(); - messageBox.showMessage( - "There is already a non-empty project on the server with the id " + projectName + ". This project has NOT been overwritten. Please contact the administrator to resolve this issue."); - } - else { - messageBox.showMessage(cause.getMessage()); - } - } - }); - } -} + new DispatchServiceCallbackWithProgressDisplay<CreateNewProjectResult>( + errorDisplay, + progressDisplay) { + @Override + public String getProgressDisplayTitle() { + return "Creating project"; + } + + @Override + public String getProgressDisplayMessage() { + return "Please wait."; + } + + @Override + public void handleSuccess(CreateNewProjectResult result) { + handleProjectCreationSuccess(projectCreatedHandler, result.getProjectDetails()); + } + + @Override + public void handleExecutionException(Throwable cause) { + handleProjectCreationException(cause); + } + }); + } + + private void handleProjectCreationSuccess(ProjectCreatedHandler projectCreatedHandler, ProjectDetails projectDetails) { + projectCreatedHandler.handleProjectCreated(); + eventBus.fireEvent(new ProjectCreatedEvent(projectDetails)); + } + + private void handleProjectCreationException(Throwable cause) { + if (cause instanceof PermissionDeniedException) { + messageBox.showMessage( + "You do not have permission to create new projects"); + } else if (cause instanceof ProjectAlreadyRegisteredException) { + ProjectAlreadyRegisteredException ex = (ProjectAlreadyRegisteredException) cause; + String projectName = ex.getProjectId().getId(); + messageBox.showMessage("The project name " + projectName + " is already registered. Please try a different name."); + } else if (cause instanceof ProjectDocumentExistsException) { + ProjectDocumentExistsException ex = (ProjectDocumentExistsException) cause; + String projectName = ex.getProjectId().getId(); + messageBox.showMessage( + "There is already a non-empty project on the server with the id " + projectName + ". This project has NOT been overwritten. Please contact the administrator to resolve this issue."); + } else { + messageBox.showMessage(cause.getMessage()); + } + } +} \ No newline at end of file diff --git a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectView.java b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectView.java index f6e1cbfe0..86f1aa827 100644 --- a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectView.java +++ b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectView.java @@ -75,4 +75,8 @@ public interface CreateNewProjectView extends HasInitialFocusable, IsWidget { @Nonnull String getFileUploadElementId(); + + String getFileSourceType(); + + void setFileSourceTypeOptions(); } diff --git a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.java b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.java index 3750b3278..0be201b8b 100644 --- a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.java +++ b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.java @@ -50,6 +50,9 @@ interface CreateNewProjectViewImplUiBinder extends UiBinder<HTMLPanel, CreateNew @Nonnull private final MessageBox messageBox; + @UiField + ListBox fileSourceType; + private HandlerRegistration submitCompleteHandlerRegistraion = () -> {}; @@ -138,4 +141,18 @@ protected void onAttach() { projectNameField.setFocus(true); fileUpload.getElement().setId(FILE_UPLOAD_ID); } + + @Override + public String getFileSourceType() { + int selectedIndex = fileSourceType.getSelectedIndex(); + return selectedIndex >= 0 ? fileSourceType.getValue(selectedIndex) : ""; + } + + @Override + public void setFileSourceTypeOptions() { + fileSourceType.clear(); + fileSourceType.addItem("OWL file", "owl"); + fileSourceType.addItem("Backup files", "backup"); + fileSourceType.setSelectedIndex(0); // Default to the first option + } } \ No newline at end of file diff --git a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.ui.xml b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.ui.xml index 710055e3b..2d937e4b3 100644 --- a/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.ui.xml +++ b/webprotege-gwt-ui-client/src/main/java/edu/stanford/bmir/protege/web/client/project/CreateNewProjectViewImpl.ui.xml @@ -4,15 +4,18 @@ <ui:with field="wp" type="edu.stanford.bmir.protege.web.resources.WebProtegeClientBundle"/> <ui:with field="msg" type="edu.stanford.bmir.protege.web.client.Messages"/> <ui:style> - .main { - } .formField { } + .uploadContainer { padding-top: 10px; padding-bottom: 10px; + display: flex; + align-items: center; + gap: 10px; } + .helpText { max-width: 480px; } @@ -23,23 +26,34 @@ <g:TextBox ui:field="projectNameField" addStyleNames="{style.formField}"/> </div> <div class="{wp.style.formGroup}"> - <g:Label text="{msg.projectSettings_language}" addStyleNames="{wp.style.formLabel}"/> + <g:Label text="{msg.projectSettings_language}" addStyleNames="{wp.style.formLabel}"/> <primitive:DefaultLanguageEditor ui:field="projectLanguageField" addStyleNames="{style.formField}"/> - <label class="{wp.style.formHelpText} {style.helpText}"><ui:safehtml from="{msg.projectSettings_language_helpText}"/></label> + <label class="{wp.style.formHelpText} {style.helpText}"> + <ui:safehtml from="{msg.projectSettings_language_helpText}"/> + </label> </div> <div class="{wp.style.formGroup}"> - <g:Label text="{msg.projectSettings_description}" addStyleNames="{wp.style.formLabel}"/> + <g:Label text="{msg.projectSettings_description}" addStyleNames="{wp.style.formLabel}"/> <g:TextArea ui:field="projectDescriptionField" addStyleNames="{style.formField}" visibleLines="5"/> </div> <g:HTMLPanel ui:field="fileUploadArea" addStyleNames="{wp.style.formGroup}"> <g:Label text="Create from existing sources" addStyleNames="{wp.style.formLabel}"/> <g:HTMLPanel addStyleNames="{style.uploadContainer}"> + <g:HTMLPanel> + <g:ListBox ui:field="fileSourceType"> + <g:item value="owl">OWL file</g:item> + <g:item value="backup">Backup files</g:item> + </g:ListBox> + </g:HTMLPanel> <g:FormPanel ui:field="formPanel"> <g:FileUpload ui:field="fileUpload"/> </g:FormPanel> </g:HTMLPanel> - <label class="{wp.style.formHelpText} {style.helpText}"><ui:safehtml from="{msg.projectSettings_owl_import_helpText}"/></label> + <label class="{wp.style.formHelpText} {style.helpText}"> + <ui:safehtml from="{msg.projectSettings_owl_import_helpText}"/> + </label> </g:HTMLPanel> + </g:HTMLPanel> </ui:UiBinder> \ No newline at end of file diff --git a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Action.java b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Action.java index a5261b61f..bfd2e063a 100644 --- a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Action.java +++ b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Action.java @@ -21,7 +21,7 @@ import edu.stanford.bmir.protege.web.shared.form.*; import edu.stanford.bmir.protege.web.shared.frame.*; import edu.stanford.bmir.protege.web.shared.hierarchy.*; -import edu.stanford.bmir.protege.web.shared.icd.GetClassAncestorsAction; +import edu.stanford.bmir.protege.web.shared.icd.*; import edu.stanford.bmir.protege.web.shared.individuals.GetIndividualsAction; import edu.stanford.bmir.protege.web.shared.individuals.GetIndividualsPageContainingIndividualAction; import edu.stanford.bmir.protege.web.shared.issues.*; @@ -241,7 +241,8 @@ @Type(value = UpdateLogicalDefinitionAction.class), @Type(value = GetEntityLogicalDefinitionAction.class), @Type(value = TranslateEventListAction.class), - @Type(value = SetNamedHierarchiesAction.class) + @Type(value = SetNamedHierarchiesAction.class), + @Type(value = CreateNewProjectFromProjectBackupAction.class) }) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME) public interface Action<R extends Result> extends IsSerializable { diff --git a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Result.java b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Result.java index bcb71ff37..bbf8d6ffa 100644 --- a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Result.java +++ b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/Result.java @@ -14,7 +14,7 @@ import edu.stanford.bmir.protege.web.shared.form.*; import edu.stanford.bmir.protege.web.shared.frame.*; import edu.stanford.bmir.protege.web.shared.hierarchy.*; -import edu.stanford.bmir.protege.web.shared.icd.GetClassAncestorsResult; +import edu.stanford.bmir.protege.web.shared.icd.*; import edu.stanford.bmir.protege.web.shared.individuals.*; import edu.stanford.bmir.protege.web.shared.issues.*; import edu.stanford.bmir.protege.web.shared.itemlist.*; @@ -221,6 +221,7 @@ @JsonSubTypes.Type(UpdateLogicalDefinitionResult.class), @JsonSubTypes.Type(GetUserInfoResult.class), @JsonSubTypes.Type(SetNamedHierarchiesResult.class), + @JsonSubTypes.Type(CreateNewProjectFromProjectBackupResult.class), }) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME) public interface Result extends IsSerializable { diff --git a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/RpcWhiteList.java b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/RpcWhiteList.java index 5dd2e39e6..b949f75cb 100644 --- a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/RpcWhiteList.java +++ b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/dispatch/RpcWhiteList.java @@ -623,6 +623,8 @@ public class RpcWhiteList implements IsSerializable, Action, Result { GetEntityLogicalDefinitionResult _GetEntityLogicalDefinitionResult; SetNamedHierarchiesAction _SetNamedHierarchiesAction; SetNamedHierarchiesResult _SetNamedHierarchiesResult; + CreateNewProjectFromProjectBackupResult _CreateNewProjectFromProjectBackupResult; + CreateNewProjectFromProjectBackupAction _CreateNewProjectFromProjectBackupAction; public RpcWhiteList() { } diff --git a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupAction.java b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupAction.java new file mode 100644 index 000000000..c36a38217 --- /dev/null +++ b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupAction.java @@ -0,0 +1,62 @@ +package edu.stanford.bmir.protege.web.shared.icd; + +import com.fasterxml.jackson.annotation.*; +import com.google.common.base.Objects; +import edu.stanford.bmir.protege.web.shared.dispatch.Action; +import edu.stanford.bmir.protege.web.shared.project.*; + +import static com.google.common.base.MoreObjects.toStringHelper; +import static com.google.common.base.Preconditions.checkNotNull; + +@JsonTypeName("webprotege.projects.CreateNewProjectFromProjectBackup") +public class CreateNewProjectFromProjectBackupAction implements Action<CreateNewProjectFromProjectBackupResult> { + private ProjectId newProjectId; + + private NewProjectSettings newProjectSettings; + + /** + * For serialization purposes only + */ + private CreateNewProjectFromProjectBackupAction() { + } + + @JsonCreator + public CreateNewProjectFromProjectBackupAction(@JsonProperty("newProjectId") ProjectId newProjectId, + @JsonProperty("newProjectSettings") NewProjectSettings newProjectSettings) { + this.newProjectId = newProjectId; + this.newProjectSettings = checkNotNull(newProjectSettings); + } + + public ProjectId getNewProjectId() { + return newProjectId; + } + + public NewProjectSettings getNewProjectSettings() { + return newProjectSettings; + } + + @Override + public int hashCode() { + return Objects.hashCode(newProjectId, newProjectSettings); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof CreateNewProjectFromProjectBackupAction)) { + return false; + } + CreateNewProjectFromProjectBackupAction other = (CreateNewProjectFromProjectBackupAction) obj; + return this.newProjectId.equals(other.newProjectId) && this.newProjectSettings.equals(other.newProjectSettings); + } + + @Override + public String toString() { + return toStringHelper("CreateNewProjectFromProjectBackupAction") + .addValue(newProjectId) + .addValue(newProjectSettings) + .toString(); + } +} diff --git a/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupResult.java b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupResult.java new file mode 100644 index 000000000..4da51f88d --- /dev/null +++ b/webprotege-gwt-ui-shared/src/main/java/edu/stanford/bmir/protege/web/shared/icd/CreateNewProjectFromProjectBackupResult.java @@ -0,0 +1,54 @@ +package edu.stanford.bmir.protege.web.shared.icd; + +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.google.common.base.Objects; +import edu.stanford.bmir.protege.web.shared.dispatch.Result; +import edu.stanford.bmir.protege.web.shared.project.*; + +import static com.google.common.base.MoreObjects.toStringHelper; +import static com.google.common.base.Preconditions.checkNotNull; + +@JsonTypeName("webprotege.projects.CreateNewProjectFromProjectBackup") +public class CreateNewProjectFromProjectBackupResult implements Result { + + private ProjectDetails projectDetails; + + /** + * For serialization purposes only + */ + private CreateNewProjectFromProjectBackupResult() { + } + + public CreateNewProjectFromProjectBackupResult(ProjectDetails projectDetails) { + this.projectDetails = checkNotNull(projectDetails); + } + + public ProjectDetails getProjectDetails() { + return projectDetails; + } + + @Override + public int hashCode() { + return Objects.hashCode(projectDetails); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof CreateNewProjectFromProjectBackupResult)) { + return false; + } + CreateNewProjectFromProjectBackupResult other = (CreateNewProjectFromProjectBackupResult) obj; + return this.projectDetails.equals(other.projectDetails); + } + + + @Override + public String toString() { + return toStringHelper("CreateNewProjectFromProjectBackupResult") + .addValue(projectDetails) + .toString(); + } +}