diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/CloudPlugIn.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/CloudPlugIn.java index d34c6c4f..7f91b674 100644 --- a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/CloudPlugIn.java +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/CloudPlugIn.java @@ -52,6 +52,7 @@ import org.diylc.swing.plugins.cloud.view.UserEditDialog; import org.diylc.swing.plugins.cloud.view.browser.CloudBrowserFrame; import org.diylc.swing.plugins.cloud.view.browser.UploadManagerFrame; import org.diylc.swing.plugins.file.FileFilterEnum; +import org.diylc.swing.plugins.cloud.actions.*; public class CloudPlugIn implements IPlugIn { @@ -66,12 +67,10 @@ public class CloudPlugIn implements IPlugIn { private CloudService cloudService; private LibraryAction libraryAction; - private LoginAction loginAction; private LogOutAction logOutAction; private CreateAccountAction createAccountAction; private ManageAccountAction manageAccountAction; - private UploadAction uploadAction; private ChangePasswordAction changePasswordAction; private ManageProjectsAction manageProjectsAction; @@ -85,6 +84,16 @@ public class CloudPlugIn implements IPlugIn { this.thumbnailPresenter = new Presenter(new DummyView(), InMemoryConfigurationManager.getInstance()); this.thumbnailGenerator = new ThumbnailGenerator(thumbnailPresenter); + // Initialize actions + this.libraryAction = new LibraryAction(this); + this.loginAction = new LoginAction(this); + this.logOutAction = new LogOutAction(this); + this.createAccountAction = new CreateAccountAction(this); + this.manageAccountAction = new ManageAccountAction(this); + this.uploadAction = new UploadAction(this); + this.changePasswordAction = new ChangePasswordAction(this); + this.manageProjectsAction = new ManageProjectsAction(this); + swingUI.injectMenuAction(getLibraryAction(), ONLINE_TITLE); swingUI.injectMenuAction(null, ONLINE_TITLE); swingUI.injectMenuAction(getLoginAction(), ONLINE_TITLE); @@ -101,6 +110,7 @@ public class CloudPlugIn implements IPlugIn { getUploadAction().setEnabled(false); getManageProjectsAction().setEnabled(false); getManageAccountAction().setEnabled(false); + getChangePasswordAction().setEnabled(false); getLogOutAction().setEnabled(false); } @@ -122,58 +132,34 @@ public class CloudPlugIn implements IPlugIn { } public LibraryAction getLibraryAction() { - if (libraryAction == null) { - libraryAction = new LibraryAction(); - } return libraryAction; } public LoginAction getLoginAction() { - if (loginAction == null) { - loginAction = new LoginAction(); - } return loginAction; } public LogOutAction getLogOutAction() { - if (logOutAction == null) { - logOutAction = new LogOutAction(); - } return logOutAction; } public CreateAccountAction getCreateAccountAction() { - if (createAccountAction == null) { - createAccountAction = new CreateAccountAction(); - } return createAccountAction; } public ManageAccountAction getManageAccountAction() { - if (manageAccountAction == null) { - manageAccountAction = new ManageAccountAction(); - } return manageAccountAction; } public UploadAction getUploadAction() { - if (uploadAction == null) { - uploadAction = new UploadAction(); - } return uploadAction; } public ChangePasswordAction getChangePasswordAction() { - if (changePasswordAction == null) { - changePasswordAction = new ChangePasswordAction(); - } return changePasswordAction; } public ManageProjectsAction getManageProjectsAction() { - if (manageProjectsAction == null) { - manageProjectsAction = new ManageProjectsAction(); - } return manageProjectsAction; } @@ -194,310 +180,6 @@ public class CloudPlugIn implements IPlugIn { } } - class LibraryAction extends AbstractAction { - - private static final long serialVersionUID = 1L; - - public LibraryAction() { - super(); - putValue(AbstractAction.NAME, "Search The Cloud"); - putValue(AbstractAction.SMALL_ICON, IconLoader.Cloud.getIcon()); - } - - @Override - public void actionPerformed(ActionEvent e) { - getCloudBrowser().setVisible(true); - getCloudBrowser().requestFocus(); - } - } - - class LoginAction extends AbstractAction { - - private static final long serialVersionUID = 1L; - - public LoginAction() { - super(); - putValue(AbstractAction.NAME, "Log In"); - putValue(AbstractAction.SMALL_ICON, IconLoader.IdCard.getIcon()); - } - - @Override - public void actionPerformed(ActionEvent e) { - LoginDialog dialog = DialogFactory.getInstance().createLoginDialog(); - do { - dialog.setVisible(true); - if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { - try { - if (plugInPort.getCloudService().logIn(dialog.getUserName(), dialog.getPassword())) { - swingUI - .showMessage( - "You have successfully logged into the system. You will remain logged in from this machine until logged out.", - "Login Successful", IView.INFORMATION_MESSAGE); - loggedIn(); - break; - } else { - swingUI.showMessage( - "Could not login. Possible reasons are wrong credentials or lack of internet connection.", - "Login Error", IView.ERROR_MESSAGE); - } - } catch (CloudException e1) { - swingUI.showMessage("Could not login. Error: " + e1.getMessage(), "Login Error", IView.ERROR_MESSAGE); - } - } else - break; - } while (true); - } - } - - class LogOutAction extends AbstractAction { - - private static final long serialVersionUID = 1L; - - public LogOutAction() { - super(); - putValue(AbstractAction.NAME, "Log Out"); - putValue(AbstractAction.SMALL_ICON, IconLoader.IdCard.getIcon()); - } - - @Override - public void actionPerformed(ActionEvent e) { - cloudService.logOut(); - loggedOut(); - } - } - - class CreateAccountAction extends AbstractAction { - - private static final long serialVersionUID = 1L; - - public CreateAccountAction() { - super(); - putValue(AbstractAction.NAME, "Create New Account"); - putValue(AbstractAction.SMALL_ICON, IconLoader.IdCardAdd.getIcon()); - } - - @Override - public void actionPerformed(ActionEvent e) { - final UserEditDialog dialog = DialogFactory.getInstance().createUserEditDialog(null); - dialog.setVisible(true); - if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { - swingUI.executeBackgroundTask(new ITask() { - - @Override - public Void doInBackground() throws Exception { - cloudService.createUserAccount(dialog.getUserName(), dialog.getPassword(), dialog.getEmail(), - dialog.getWebsite(), dialog.getBio()); - return null; - } - - @Override - public void failed(Exception e) { - swingUI.showMessage("Failed to create the account. Error: " + e.getMessage(), "Cloud Error", - IView.ERROR_MESSAGE); - } - - @Override - public void complete(Void result) { - swingUI.showMessage("Cloud account created successfully.", "Cloud", IView.INFORMATION_MESSAGE); - } - }, true); - } - } - } - - class ManageAccountAction extends AbstractAction { - - private static final long serialVersionUID = 1L; - - public ManageAccountAction() { - super(); - putValue(AbstractAction.NAME, "Manage Account"); - putValue(AbstractAction.SMALL_ICON, IconLoader.IdCardEdit.getIcon()); - } - - @Override - public void actionPerformed(ActionEvent e) { - try { - final UserEditDialog dialog = - DialogFactory.getInstance().createUserEditDialog(plugInPort.getCloudService().getUserDetails()); - dialog.setVisible(true); - if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { - swingUI.executeBackgroundTask(new ITask() { - - @Override - public Void doInBackground() throws Exception { - cloudService.updateUserDetails(dialog.getEmail(), dialog.getWebsite(), dialog.getBio()); - return null; - } - - @Override - public void failed(Exception e) { - swingUI.showMessage("Failed to update the account. Error: " + e.getMessage(), "Cloud Error", - IView.ERROR_MESSAGE); - } - - @Override - public void complete(Void result) { - swingUI.showMessage("Cloud account updated successfully.", "Cloud", IView.INFORMATION_MESSAGE); - } - }, true); - } - } catch (CloudException e1) { - swingUI.showMessage("Failed to retreive user details from the server. Error: " + e1.getMessage(), - "Cloud Error", IView.ERROR_MESSAGE); - } - } - } - - class ChangePasswordAction extends AbstractAction { - - private static final long serialVersionUID = 1L; - - public ChangePasswordAction() { - super(); - putValue(AbstractAction.NAME, "Change Password"); - putValue(AbstractAction.SMALL_ICON, IconLoader.KeyEdit.getIcon()); - } - - @Override - public void actionPerformed(ActionEvent e) { - final ChangePasswordDialog dialog = DialogFactory.getInstance().createChangePasswordDialog(); - dialog.setVisible(true); - if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { - swingUI.executeBackgroundTask(new ITask() { - - @Override - public Void doInBackground() throws Exception { - cloudService.updatePassword(dialog.getOldPassword(), dialog.getNewPassword()); - return null; - } - - @Override - public void failed(Exception e) { - swingUI.showMessage("Failed to update the password. Error: " + e.getMessage(), "Cloud Error", - IView.ERROR_MESSAGE); - } - - @Override - public void complete(Void result) { - swingUI.showMessage("Password updated.", "Cloud", IView.INFORMATION_MESSAGE); - } - }, true); - } - } - } - - class UploadAction extends AbstractAction { - - private static final long serialVersionUID = 1L; - - public UploadAction() { - super(); - putValue(AbstractAction.NAME, "Upload A Project"); - putValue(AbstractAction.SMALL_ICON, IconLoader.CloudUp.getIcon()); - } - - @Override - public void actionPerformed(ActionEvent e) { - LOG.info("UploadAction triggered"); - - final File[] files = - DialogFactory.getInstance().showOpenMultiDialog(FileFilterEnum.DIY.getFilter(), null, - FileFilterEnum.DIY.getExtensions()[0], null, swingUI.getOwnerFrame()); - if (files != null && files.length > 0) { - List> tasks = new ArrayList>(); - final ListIterator> taskIterator = tasks.listIterator(); - - for (final File file : files) { - taskIterator.add(new ITask() { - - @Override - public String[] doInBackground() throws Exception { - LOG.debug("Uploading from " + file.getAbsolutePath()); - thumbnailPresenter.loadProjectFromFile(file.getAbsolutePath()); - return cloudService.getCategories(); - } - - @Override - public void complete(final String[] result) { - final UploadDialog dialog = - DialogFactory.getInstance().createUploadDialog(swingUI.getOwnerFrame(), thumbnailPresenter, result, - false); - dialog.setVisible(true); - if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { - try { - final File thumbnailFile = File.createTempFile("upload-thumbnail", ".png"); - if (ImageIO.write(CloudPlugIn.this.thumbnailGenerator.getThumbnail(), "png", thumbnailFile)) { - swingUI.executeBackgroundTask(new ITask() { - - @Override - public Void doInBackground() throws Exception { - cloudService.uploadProject(dialog.getName(), dialog.getCategory(), dialog - .getDescription(), dialog.getKeywords(), plugInPort.getCurrentVersionNumber().toString(), - thumbnailFile, file, null); - return null; - } - - @Override - public void failed(Exception e) { - swingUI.showMessage(e.getMessage(), "Upload Error", IView.ERROR_MESSAGE); - } - - @Override - public void complete(Void result) { - swingUI - .showMessage( - "The project has been uploaded to the cloud successfully. Thank you for your contribution!", - "Upload Success", IView.INFORMATION_MESSAGE); - - synchronized (taskIterator) { - if (taskIterator.hasPrevious()) - swingUI.executeBackgroundTask(taskIterator.previous(), true); - } - } - }, true); - } else { - swingUI.showMessage("Could not prepare temporary files to be uploaded to the cloud.", - "Upload Error", IView.ERROR_MESSAGE); - } - } catch (Exception e) { - swingUI.showMessage(e.getMessage(), "Upload Error", IView.ERROR_MESSAGE); - } - } - } - - @Override - public void failed(Exception e) { - swingUI.showMessage("Could not open file. " + e.getMessage(), "Error", ISwingUI.ERROR_MESSAGE); - } - }); - } - - synchronized (taskIterator) { - if (taskIterator.hasPrevious()) - swingUI.executeBackgroundTask(taskIterator.previous(), true); - } - } - } - } - - class ManageProjectsAction extends AbstractAction { - - private static final long serialVersionUID = 1L; - - public ManageProjectsAction() { - super(); - putValue(AbstractAction.NAME, "Manage My Uploads"); - putValue(AbstractAction.SMALL_ICON, IconLoader.CloudGear.getIcon()); - } - - @Override - public void actionPerformed(ActionEvent e) { - UploadManagerFrame frame = createUploadManagerFrame(); - frame.setVisible(true); - } - } - public void loggedIn() { getLoginAction().setEnabled(false); getCreateAccountAction().setEnabled(false); @@ -506,6 +188,7 @@ public class CloudPlugIn implements IPlugIn { getManageAccountAction().setEnabled(true); getUploadAction().setEnabled(true); getManageProjectsAction().setEnabled(true); + getChangePasswordAction().setEnabled(true); } public void loggedOut() { @@ -516,5 +199,27 @@ public class CloudPlugIn implements IPlugIn { getManageAccountAction().setEnabled(false); getUploadAction().setEnabled(false); getManageProjectsAction().setEnabled(false); + getChangePasswordAction().setEnabled(false); + } + + // Getters for action classes + public ISwingUI getSwingUI() { + return swingUI; + } + + public IPlugInPort getPlugInPort() { + return plugInPort; + } + + public IPlugInPort getThumbnailPresenter() { + return thumbnailPresenter; + } + + public ThumbnailGenerator getThumbnailGenerator() { + return thumbnailGenerator; + } + + public CloudService getCloudService() { + return cloudService; } } diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/ChangePasswordAction.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/ChangePasswordAction.java new file mode 100644 index 00000000..01357dbf --- /dev/null +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/ChangePasswordAction.java @@ -0,0 +1,73 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.swing.plugins.cloud.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.apache.log4j.Logger; +import org.diylc.common.ITask; +import org.diylc.core.IView; +import org.diylc.swing.ISwingUI; +import org.diylc.swing.gui.DialogFactory; +import org.diylc.swing.plugins.cloud.CloudPlugIn; +import org.diylc.swing.plugins.cloud.view.ChangePasswordDialog; +import org.diylc.swingframework.ButtonDialog; +import org.diylc.utils.IconLoader; + +public class ChangePasswordAction extends AbstractAction { + private static final long serialVersionUID = 1L; + private static final Logger LOG = Logger.getLogger(ChangePasswordAction.class); + private final CloudPlugIn cloudPlugIn; + + public ChangePasswordAction(CloudPlugIn cloudPlugIn) { + super(); + this.cloudPlugIn = cloudPlugIn; + putValue(AbstractAction.NAME, "Change Password"); + putValue(AbstractAction.SMALL_ICON, IconLoader.KeyEdit.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + final ChangePasswordDialog dialog = DialogFactory.getInstance().createChangePasswordDialog(); + dialog.setVisible(true); + if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { + cloudPlugIn.getSwingUI().executeBackgroundTask(new ITask() { + @Override + public Void doInBackground() throws Exception { + cloudPlugIn.getCloudService().updatePassword(dialog.getOldPassword(), dialog.getNewPassword()); + return null; + } + + @Override + public void failed(Exception e) { + cloudPlugIn.getSwingUI().showMessage("Failed to update the password. Error: " + e.getMessage(), "Cloud Error", + IView.ERROR_MESSAGE); + } + + @Override + public void complete(Void result) { + cloudPlugIn.getSwingUI().showMessage("Password updated.", "Cloud", IView.INFORMATION_MESSAGE); + } + }, true); + } + } +} diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/CreateAccountAction.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/CreateAccountAction.java new file mode 100644 index 00000000..da7a57cc --- /dev/null +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/CreateAccountAction.java @@ -0,0 +1,74 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.swing.plugins.cloud.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.apache.log4j.Logger; +import org.diylc.common.ITask; +import org.diylc.core.IView; +import org.diylc.swing.ISwingUI; +import org.diylc.swing.gui.DialogFactory; +import org.diylc.swing.plugins.cloud.CloudPlugIn; +import org.diylc.swing.plugins.cloud.view.UserEditDialog; +import org.diylc.swingframework.ButtonDialog; +import org.diylc.utils.IconLoader; + +public class CreateAccountAction extends AbstractAction { + private static final long serialVersionUID = 1L; + private static final Logger LOG = Logger.getLogger(CreateAccountAction.class); + private final CloudPlugIn cloudPlugIn; + + public CreateAccountAction(CloudPlugIn cloudPlugIn) { + super(); + this.cloudPlugIn = cloudPlugIn; + putValue(AbstractAction.NAME, "Create New Account"); + putValue(AbstractAction.SMALL_ICON, IconLoader.IdCardAdd.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + final UserEditDialog dialog = DialogFactory.getInstance().createUserEditDialog(null); + dialog.setVisible(true); + if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { + cloudPlugIn.getSwingUI().executeBackgroundTask(new ITask() { + @Override + public Void doInBackground() throws Exception { + cloudPlugIn.getCloudService().createUserAccount(dialog.getUserName(), dialog.getPassword(), dialog.getEmail(), + dialog.getWebsite(), dialog.getBio()); + return null; + } + + @Override + public void failed(Exception e) { + cloudPlugIn.getSwingUI().showMessage("Failed to create the account. Error: " + e.getMessage(), "Cloud Error", + IView.ERROR_MESSAGE); + } + + @Override + public void complete(Void result) { + cloudPlugIn.getSwingUI().showMessage("Cloud account created successfully!\nPlease check your email and verify your address.", "Cloud", IView.INFORMATION_MESSAGE); + } + }, true); + } + } +} diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/LibraryAction.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/LibraryAction.java new file mode 100644 index 00000000..e6a48800 --- /dev/null +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/LibraryAction.java @@ -0,0 +1,45 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.swing.plugins.cloud.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.diylc.swing.plugins.cloud.CloudPlugIn; +import org.diylc.utils.IconLoader; + +public class LibraryAction extends AbstractAction { + private static final long serialVersionUID = 1L; + private final CloudPlugIn cloudPlugIn; + + public LibraryAction(CloudPlugIn cloudPlugIn) { + super(); + this.cloudPlugIn = cloudPlugIn; + putValue(AbstractAction.NAME, "Search The Cloud"); + putValue(AbstractAction.SMALL_ICON, IconLoader.Cloud.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + cloudPlugIn.getCloudBrowser().setVisible(true); + cloudPlugIn.getCloudBrowser().requestFocus(); + } +} \ No newline at end of file diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/LogOutAction.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/LogOutAction.java new file mode 100644 index 00000000..f67355d5 --- /dev/null +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/LogOutAction.java @@ -0,0 +1,45 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.swing.plugins.cloud.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.diylc.swing.plugins.cloud.CloudPlugIn; +import org.diylc.utils.IconLoader; + +public class LogOutAction extends AbstractAction { + private static final long serialVersionUID = 1L; + private final CloudPlugIn cloudPlugIn; + + public LogOutAction(CloudPlugIn cloudPlugIn) { + super(); + this.cloudPlugIn = cloudPlugIn; + putValue(AbstractAction.NAME, "Log Out"); + putValue(AbstractAction.SMALL_ICON, IconLoader.IdCard.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + cloudPlugIn.getCloudService().logOut(); + cloudPlugIn.loggedOut(); + } +} \ No newline at end of file diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/LoginAction.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/LoginAction.java new file mode 100644 index 00000000..25a5d2a0 --- /dev/null +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/LoginAction.java @@ -0,0 +1,74 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.swing.plugins.cloud.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.apache.log4j.Logger; +import org.diylc.common.ITask; +import org.diylc.core.IView; +import org.diylc.plugins.cloud.service.CloudException; +import org.diylc.swing.ISwingUI; +import org.diylc.swing.gui.DialogFactory; +import org.diylc.swing.plugins.cloud.CloudPlugIn; +import org.diylc.swing.plugins.cloud.view.LoginDialog; +import org.diylc.swingframework.ButtonDialog; +import org.diylc.utils.IconLoader; + +public class LoginAction extends AbstractAction { + private static final long serialVersionUID = 1L; + private static final Logger LOG = Logger.getLogger(LoginAction.class); + private final CloudPlugIn cloudPlugIn; + + public LoginAction(CloudPlugIn cloudPlugIn) { + super(); + this.cloudPlugIn = cloudPlugIn; + putValue(AbstractAction.NAME, "Log In"); + putValue(AbstractAction.SMALL_ICON, IconLoader.IdCard.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + LoginDialog dialog = DialogFactory.getInstance().createLoginDialog(); + do { + dialog.setVisible(true); + if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { + try { + if (cloudPlugIn.getPlugInPort().getCloudService().logIn(dialog.getUserName(), dialog.getPassword())) { + cloudPlugIn.getSwingUI().showMessage( + "You have successfully logged into the system. You will remain logged in from this machine until logged out.", + "Login Successful", IView.INFORMATION_MESSAGE); + cloudPlugIn.loggedIn(); + break; + } else { + cloudPlugIn.getSwingUI().showMessage( + "Could not login. Possible reasons are wrong credentials or lack of internet connection.", + "Login Error", IView.ERROR_MESSAGE); + } + } catch (CloudException e1) { + cloudPlugIn.getSwingUI().showMessage("Could not login. Error: " + e1.getMessage(), "Login Error", IView.ERROR_MESSAGE); + } + } else + break; + } while (true); + } +} diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/ManageAccountAction.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/ManageAccountAction.java new file mode 100644 index 00000000..d0de3ad0 --- /dev/null +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/ManageAccountAction.java @@ -0,0 +1,80 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.swing.plugins.cloud.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.apache.log4j.Logger; +import org.diylc.common.ITask; +import org.diylc.core.IView; +import org.diylc.plugins.cloud.service.CloudException; +import org.diylc.swing.ISwingUI; +import org.diylc.swing.gui.DialogFactory; +import org.diylc.swing.plugins.cloud.CloudPlugIn; +import org.diylc.swing.plugins.cloud.view.UserEditDialog; +import org.diylc.swingframework.ButtonDialog; +import org.diylc.utils.IconLoader; + +public class ManageAccountAction extends AbstractAction { + private static final long serialVersionUID = 1L; + private static final Logger LOG = Logger.getLogger(ManageAccountAction.class); + private final CloudPlugIn cloudPlugIn; + + public ManageAccountAction(CloudPlugIn cloudPlugIn) { + super(); + this.cloudPlugIn = cloudPlugIn; + putValue(AbstractAction.NAME, "Manage Account"); + putValue(AbstractAction.SMALL_ICON, IconLoader.IdCardEdit.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + try { + final UserEditDialog dialog = + DialogFactory.getInstance().createUserEditDialog(cloudPlugIn.getPlugInPort().getCloudService().getUserDetails()); + dialog.setVisible(true); + if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { + cloudPlugIn.getSwingUI().executeBackgroundTask(new ITask() { + @Override + public Void doInBackground() throws Exception { + cloudPlugIn.getCloudService().updateUserDetails(dialog.getEmail(), dialog.getWebsite(), dialog.getBio()); + return null; + } + + @Override + public void failed(Exception e) { + cloudPlugIn.getSwingUI().showMessage("Failed to update the account. Error: " + e.getMessage(), "Cloud Error", + IView.ERROR_MESSAGE); + } + + @Override + public void complete(Void result) { + cloudPlugIn.getSwingUI().showMessage("Cloud account updated successfully.", "Cloud", IView.INFORMATION_MESSAGE); + } + }, true); + } + } catch (CloudException e1) { + cloudPlugIn.getSwingUI().showMessage("Failed to retreive user details from the server. Error: " + e1.getMessage(), + "Cloud Error", IView.ERROR_MESSAGE); + } + } +} diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/ManageProjectsAction.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/ManageProjectsAction.java new file mode 100644 index 00000000..f1ef0d85 --- /dev/null +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/ManageProjectsAction.java @@ -0,0 +1,44 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.swing.plugins.cloud.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.diylc.swing.plugins.cloud.CloudPlugIn; +import org.diylc.utils.IconLoader; + +public class ManageProjectsAction extends AbstractAction { + private static final long serialVersionUID = 1L; + private final CloudPlugIn cloudPlugIn; + + public ManageProjectsAction(CloudPlugIn cloudPlugIn) { + super(); + this.cloudPlugIn = cloudPlugIn; + putValue(AbstractAction.NAME, "Manage My Uploads"); + putValue(AbstractAction.SMALL_ICON, IconLoader.CloudGear.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + cloudPlugIn.createUploadManagerFrame().setVisible(true); + } +} \ No newline at end of file diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/UploadAction.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/UploadAction.java new file mode 100644 index 00000000..6e4f3770 --- /dev/null +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/actions/UploadAction.java @@ -0,0 +1,134 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.swing.plugins.cloud.actions; + +import java.awt.event.ActionEvent; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; +import javax.imageio.ImageIO; +import javax.swing.AbstractAction; +import org.apache.log4j.Logger; +import org.diylc.common.ITask; +import org.diylc.core.IView; +import org.diylc.plugins.cloud.service.CloudException; +import org.diylc.swing.ISwingUI; +import org.diylc.swing.gui.DialogFactory; +import org.diylc.swing.plugins.cloud.CloudPlugIn; +import org.diylc.swing.plugins.cloud.view.UploadDialog; +import org.diylc.swing.plugins.file.FileFilterEnum; +import org.diylc.swingframework.ButtonDialog; +import org.diylc.utils.IconLoader; + +public class UploadAction extends AbstractAction { + private static final long serialVersionUID = 1L; + private static final Logger LOG = Logger.getLogger(UploadAction.class); + private final CloudPlugIn cloudPlugIn; + + public UploadAction(CloudPlugIn cloudPlugIn) { + super(); + this.cloudPlugIn = cloudPlugIn; + putValue(AbstractAction.NAME, "Upload A Project"); + putValue(AbstractAction.SMALL_ICON, IconLoader.CloudUp.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + LOG.info("UploadAction triggered"); + + final File[] files = + DialogFactory.getInstance().showOpenMultiDialog(FileFilterEnum.DIY.getFilter(), null, + FileFilterEnum.DIY.getExtensions()[0], null, cloudPlugIn.getSwingUI().getOwnerFrame()); + if (files != null && files.length > 0) { + List> tasks = new ArrayList>(); + final ListIterator> taskIterator = tasks.listIterator(); + + for (final File file : files) { + taskIterator.add(new ITask() { + @Override + public String[] doInBackground() throws Exception { + LOG.debug("Uploading from " + file.getAbsolutePath()); + cloudPlugIn.getThumbnailPresenter().loadProjectFromFile(file.getAbsolutePath()); + return cloudPlugIn.getCloudService().getCategories(); + } + + @Override + public void complete(final String[] result) { + final UploadDialog dialog = + DialogFactory.getInstance().createUploadDialog(cloudPlugIn.getSwingUI().getOwnerFrame(), + cloudPlugIn.getThumbnailPresenter(), result, false); + dialog.setVisible(true); + if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { + try { + final File thumbnailFile = File.createTempFile("upload-thumbnail", ".png"); + if (ImageIO.write(cloudPlugIn.getThumbnailGenerator().getThumbnail(), "png", thumbnailFile)) { + cloudPlugIn.getSwingUI().executeBackgroundTask(new ITask() { + @Override + public Void doInBackground() throws Exception { + cloudPlugIn.getCloudService().uploadProject(dialog.getName(), dialog.getCategory(), dialog + .getDescription(), dialog.getKeywords(), cloudPlugIn.getPlugInPort().getCurrentVersionNumber().toString(), + thumbnailFile, file, null); + return null; + } + + @Override + public void failed(Exception e) { + cloudPlugIn.getSwingUI().showMessage(e.getMessage(), "Upload Error", IView.ERROR_MESSAGE); + } + + @Override + public void complete(Void result) { + cloudPlugIn.getSwingUI().showMessage( + "The project has been uploaded to the cloud successfully. Thank you for your contribution!", + "Upload Success", IView.INFORMATION_MESSAGE); + + synchronized (taskIterator) { + if (taskIterator.hasPrevious()) + cloudPlugIn.getSwingUI().executeBackgroundTask(taskIterator.previous(), true); + } + } + }, true); + } else { + cloudPlugIn.getSwingUI().showMessage("Could not prepare temporary files to be uploaded to the cloud.", + "Upload Error", IView.ERROR_MESSAGE); + } + } catch (Exception e) { + cloudPlugIn.getSwingUI().showMessage(e.getMessage(), "Upload Error", IView.ERROR_MESSAGE); + } + } + } + + @Override + public void failed(Exception e) { + cloudPlugIn.getSwingUI().showMessage("Could not open file. " + e.getMessage(), "Error", ISwingUI.ERROR_MESSAGE); + } + }); + } + + synchronized (taskIterator) { + if (taskIterator.hasPrevious()) + cloudPlugIn.getSwingUI().executeBackgroundTask(taskIterator.previous(), true); + } + } + } +} diff --git a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/view/UserEditDialog.java b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/view/UserEditDialog.java index 59a5e2a0..fb4e3f7a 100644 --- a/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/view/UserEditDialog.java +++ b/diylc/diylc-swing/src/main/java/org/diylc/swing/plugins/cloud/view/UserEditDialog.java @@ -170,7 +170,8 @@ public class UserEditDialog extends ButtonDialog { this.website = getWebsiteField().getText(); this.bio = getBioArea().getText(); JButton okButton = getButton(OK); - okButton.setEnabled((this.userName.length() > 0) + okButton.setEnabled(!this.userName.isEmpty() + && !this.email.isEmpty() && this.email.contains("@") && (this.existingEntity != null || ((this.password != null) && (this.password.length() > 0)))); } @@ -253,8 +254,10 @@ public class UserEditDialog extends ButtonDialog { private JTextField getEmailField() { if (emailField == null) { emailField = new JTextField(); - if (existingEntity != null) + if (existingEntity != null) { emailField.setText(existingEntity.getEmail()); + emailField.setEditable(false); + } emailField.getDocument().addDocumentListener(new DocumentListener() { @Override