diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath index b7926aca..93e615fe 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/.classpath @@ -13,6 +13,7 @@ + diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar index 11fc89f1..2423721d 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/http-proxy.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/http-proxy.jar new file mode 100644 index 00000000..9561b134 Binary files /dev/null and b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/http-proxy.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar index daa55815..25e153d5 100644 Binary files a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar and b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/library/main.jar differ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/OnlineManager.java b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/OnlineManager.java index c40512b2..89df3425 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/OnlineManager.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/OnlineManager.java @@ -45,15 +45,15 @@ public class OnlineManager implements IPlugIn { @Override protected Void doInBackground() throws Exception { - libraryPresenter.connectDb(); + //libraryPresenter.connectDb(); return null; } @Override protected void done() { - if (libraryPresenter.isLoggedIn()) { - - } + // if (libraryPresenter.isLoggedIn()) { + // + // } } }; worker.execute(); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/Test.java b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/Test.java deleted file mode 100644 index aee1e52b..00000000 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/Test.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.diylc.swing.plugins.online; - -import org.apache.log4j.BasicConfigurator; -import org.diylc.swing.plugins.online.presenter.LibraryPresenter; - - -public class Test { - - /** - * @param args - * @throws Exception - */ - public static void main(String[] args) throws Exception { - BasicConfigurator.configure(); - LibraryPresenter pres = new LibraryPresenter(); - // pres.createUser("bancika", "pwd", "bancika@gmail.com"); - System.out.println(pres.fetchCategories()); - pres.login("bancika", "pwd"); - int id = pres.fetchMyProjectRows().get(0).getId(); - // InputStream stream = pres.downloadProjectContent(id); - // byte[] buf = new byte[100]; - // int len = stream.read(buf); - System.out.println(pres.downloadProjectContent(id)); - // System.out.println(pres.hashPassword("bancikabancikabancikabancikabancika")); - pres.dispose(); - } - -} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/model/ProjectEntity.java b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/model/ProjectEntity.java index 228307fa..89a27523 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/model/ProjectEntity.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/model/ProjectEntity.java @@ -1,12 +1,7 @@ package org.diylc.swing.plugins.online.model; -import java.awt.event.ActionEvent; import java.io.Serializable; -import javax.swing.AbstractAction; -import javax.swing.Action; -import javax.swing.JOptionPane; - public class ProjectEntity implements Serializable { private static final long serialVersionUID = 1L; @@ -16,18 +11,26 @@ public class ProjectEntity implements Serializable { private String description; private String owner; private String category; + private String updated; + private String thumbnailUrl; + private String downloadUrl; public ProjectEntity() { super(); } - public ProjectEntity(int id, String name, String description, String owner, String category) { + public ProjectEntity(int id, String name, String description, String owner, + String category, String updated, String thumbnailUrl, + String downloadUrl) { super(); this.id = id; this.name = name; this.description = description; this.owner = owner; this.category = category; + this.updated = updated; + this.thumbnailUrl = thumbnailUrl; + this.downloadUrl = downloadUrl; } public int getId() { @@ -70,28 +73,59 @@ public class ProjectEntity implements Serializable { this.category = category; } - public Action getDownload() { - - Action a = new AbstractAction() { - - @Override - public void actionPerformed(ActionEvent e) { - JOptionPane.showMessageDialog(null, name); - } - }; - a.putValue(AbstractAction.NAME, "Download"); - return a; + public String getUpdated() { + return updated; } + public void setUpdated(String updated) { + this.updated = updated; + } + + public String getThumbnailUrl() { + return thumbnailUrl; + } + + public void setThumbnailUrl(String thumbnailUrl) { + this.thumbnailUrl = thumbnailUrl; + } + + public String getDownloadUrl() { + return downloadUrl; + } + + public void setDownloadUrl(String downloadUrl) { + this.downloadUrl = downloadUrl; + } + + // public Action getDownload() { + // + // Action a = new AbstractAction() { + // + // @Override + // public void actionPerformed(ActionEvent e) { + // JOptionPane.showMessageDialog(null, name); + // } + // }; + // a.putValue(AbstractAction.NAME, "Download"); + // return a; + // } + // @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((category == null) ? 0 : category.hashCode()); - result = prime * result + ((description == null) ? 0 : description.hashCode()); + result = prime * result + + ((category == null) ? 0 : category.hashCode()); + result = prime * result + + ((description == null) ? 0 : description.hashCode()); + result = prime * result + + ((downloadUrl == null) ? 0 : downloadUrl.hashCode()); result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((owner == null) ? 0 : owner.hashCode()); + result = prime * result + + ((thumbnailUrl == null) ? 0 : thumbnailUrl.hashCode()); + result = prime * result + ((updated == null) ? 0 : updated.hashCode()); return result; } @@ -114,6 +148,11 @@ public class ProjectEntity implements Serializable { return false; } else if (!description.equals(other.description)) return false; + if (downloadUrl == null) { + if (other.downloadUrl != null) + return false; + } else if (!downloadUrl.equals(other.downloadUrl)) + return false; if (id != other.id) return false; if (name == null) { @@ -126,11 +165,21 @@ public class ProjectEntity implements Serializable { return false; } else if (!owner.equals(other.owner)) return false; + if (thumbnailUrl == null) { + if (other.thumbnailUrl != null) + return false; + } else if (!thumbnailUrl.equals(other.thumbnailUrl)) + return false; + if (updated == null) { + if (other.updated != null) + return false; + } else if (!updated.equals(other.updated)) + return false; return true; } @Override public String toString() { - return name; + return name + " by " + owner + " updated on " + updated; } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/AlreadyExistsException.java b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/DIYLCServiceException.java similarity index 62% rename from diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/AlreadyExistsException.java rename to diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/DIYLCServiceException.java index 412fabea..0b835c76 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/AlreadyExistsException.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/DIYLCServiceException.java @@ -1,6 +1,6 @@ package org.diylc.swing.plugins.online.presenter; -public class AlreadyExistsException extends Exception { +public class DIYLCServiceException extends Exception { private static final long serialVersionUID = 1L; diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/IServiceAPI.java b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/IServiceAPI.java new file mode 100644 index 00000000..eb467a6c --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/IServiceAPI.java @@ -0,0 +1,137 @@ +package org.diylc.swing.plugins.online.presenter; + +import java.io.File; +import java.util.List; + +import org.diylc.swing.plugins.online.model.ProjectEntity; + +import com.diyfever.httpproxy.ParamName; + +/*** + * Interface of DIYLC PHP server located at www.diy-fever.com/diylc/api + * + * @author bancika + * + */ +public interface IServiceAPI { + + public static final String URL_KEY = "serviceUrl"; + + /** + * Creates a user with the specified details. + * + * @param username + * @param password + * @param email + * @param website + * @param bio + * @return "Success" if the operation is successful or error message if it + * failed. + */ + String createUser(@ParamName("username") String username, + @ParamName("password") String password, + @ParamName("email") String email, + @ParamName("website") String website, @ParamName("bio") String bio); + + /*** + * Updates user details using token to authenticate. + * + * @param username + * @param token + * @param machineId + * @param email + * @param website + * @param bio + * @return "Success" if the operation is successful or error message if it + * failed. + */ + String updateUser(@ParamName("username") String username, + @ParamName("token") String token, + @ParamName("machineId") String machineId, + @ParamName("email") String email, + @ParamName("website") String website, @ParamName("bio") String bio); + + /*** + * Tries to login with the provided credentials and machineId. + * + * @param username + * @param password + * @param machineId + * @return login token if the login was successful or string literal "Error" + * if it failed. + */ + String login(@ParamName("username") String username, + @ParamName("password") String password, + @ParamName("machineId") String machineId); + + /*** + * Tries to authenticate with the token that was previously created by + * calling login() function. + * + * @param username + * @param password + * @param machineId + * @return "Success" if the login is successful or error message if it + * failed. + */ + String loginWithToken(@ParamName("username") String username, + @ParamName("token") String token, + @ParamName("machineId") String machineId); + + /*** + * Searches for projects that meet the specified search criteria. Supports + * pagination. + * + * @param criteria + * @param category + * @param format + * @param page + * @param itemsPerPage + * @param sort + * @return string with error message if the error occurred or a list of + * {@link ProjectEntity} objects. + */ + Object search(@ParamName("criteria") String criteria, + @ParamName("category") String category, + @ParamName("format") String format, + @ParamName("page") Integer page, + @ParamName("itemsPerPage") Integer itemsPerPage, + @ParamName("sort") String sort); + + /** + * Uploads a project using token to authenticate. + * + * @param username + * @param token + * @param machineId + * @param projectName + * @param category + * @param description + * @param diylcVersion + * @param keywords + * @param thumbnail + * @param project + * @return "Success" if the upload was successful or error message if it + * failed. + */ + String upload(@ParamName("username") String username, + @ParamName("token") String token, + @ParamName("machineId") String machineId, + @ParamName("projectName") String projectName, + @ParamName("category") String category, + @ParamName("description") String description, + @ParamName("diylcVersion") String diylcVersion, + @ParamName("keywords") String keywords, + @ParamName("thumbnail") File thumbnail, + @ParamName("thumbnail") File project); + + /** + * @return a {@link List} of available categories. + */ + List getCategories(); + + /** + * @return a {@link List} of available sortings. + */ + List getAvailableSortings(); +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/LibraryPresenter.java b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/LibraryPresenter.java index e6acd8a4..3a7d225b 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/LibraryPresenter.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/LibraryPresenter.java @@ -1,177 +1,23 @@ package org.diylc.swing.plugins.online.presenter; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.apache.log4j.Logger; -import org.diylc.swing.plugins.online.model.ProjectEntity; +import org.diylc.appframework.miscutils.ConfigurationManager; +import com.diyfever.httpproxy.PhpFlatProxy; +import com.diyfever.httpproxy.ProxyFactory; public class LibraryPresenter { private final static Logger LOG = Logger.getLogger(LibraryPresenter.class); - private static final String DB_HOST = "diy-fever.com"; - private static final String DB_PORT = "3306"; - private static final String DB_USER = "diylc-app"; - private static final String DB_PASS = "zuf7RuS8"; - - private static final String CATEGORY_SQL = "SELECT * FROM diylc.category WHERE 1=1"; - private static final String USER_SQL = "SELECT * FROM diylc.user WHERE name = \"%s\""; - private static final String CREATE_USER_SQL = "INSERT INTO diylc.user (name, password, email) VALUES (\"%s\", \"%s\", \"%s\")"; - private static final String MY_PROJECTS_SQL = "SELECT project_id, name, category_id, description FROM diylc.project WHERE owner_user_id = %s"; - private static final String PROJECT_SQL = "SELECT content FROM diylc.project WHERE project_id = %s"; - private static final String UPLOAD_PROJECT_SQL = "INSERT INTO diylc.project (name, description, content, category_id, owner_user_id) VALUES (\"%s\", \"%s\", \"%s\", %s, %s)"; - private static final String UPDATE_PROJECT_SQL = "UPDATE diylc.project SET name = \"%s\", description = \"%s\", content = \"%s\", category_id = %s WHERE project_id = %s"; - - private MySqlDBManager dbManager; - private MessageDigest messageDigest; - private Integer currentUserId; + private IServiceAPI service; + private String serviceUrl; public LibraryPresenter() { - dbManager = new MySqlDBManager(DB_HOST, DB_PORT, DB_USER, DB_PASS); - try { - messageDigest = MessageDigest.getInstance("MD5"); - } catch (NoSuchAlgorithmException e) { - LOG.error("Could not initialize MD5, algorithm not found."); - } + serviceUrl = ConfigurationManager.getInstance().readString( + IServiceAPI.URL_KEY, "http://www.diy-fever.com/diylc/api"); + ProxyFactory factory = new ProxyFactory(new PhpFlatProxy()); + service = factory.createProxy(IServiceAPI.class, serviceUrl); } - public boolean connectDb() { - try { - dbManager.connectDB(); - return true; - } catch (Exception e) { - LOG.error("Could not connect to the database: " + e.getMessage()); - return false; - } - } - - public void createUser(String userName, String password, String email) throws SQLException, - NotConnectedException, AlreadyExistsException { - LOG.info("Creating user: " + userName); - if (dbManager.isConnected()) { - ResultSet resultSet = dbManager.getResultSet(String.format(USER_SQL, userName)); - if (resultSet.next()) { - throw new AlreadyExistsException(); - } - dbManager.updateDB(String.format(CREATE_USER_SQL, userName, hashPassword(password), - email)); - resultSet = dbManager.getResultSet(String.format(USER_SQL, userName)); - if (resultSet.next()) { - LOG.info("Logged in as \"" + userName + "\""); - currentUserId = resultSet.getInt("user_id"); - } - } else { - LOG.error("Not connected"); - throw new NotConnectedException(); - } - } - - public boolean login(String userName, String password) throws SQLException, - NotConnectedException { - LOG.info("Logging in as: " + userName); - if (dbManager.isConnected()) { - ResultSet resultSet = dbManager.getResultSet(String.format(USER_SQL, userName)); - if (resultSet.next()) { - String dbPassword = resultSet.getString("password"); - String hashPassword = hashPassword(password); - if (dbPassword.equals(hashPassword)) { - LOG.info("Logged in as \"" + userName + "\""); - currentUserId = resultSet.getInt("user_id"); - } else { - LOG.info("User name and password do not match."); - } - } - return false; - } else { - LOG.error("Not connected"); - throw new NotConnectedException(); - } - } - - public Map fetchCategories() throws SQLException, NotConnectedException { - LOG.info("Fetching categories"); - if (dbManager.isConnected()) { - Map categories = new HashMap(); - ResultSet resultSet = dbManager.getResultSet(CATEGORY_SQL); - while (resultSet.next()) { - categories.put(resultSet.getInt("category_id"), resultSet.getString("name")); - } - return categories; - } else { - LOG.error("Not connected"); - throw new NotConnectedException(); - } - } - - public List fetchMyProjectRows() throws NotLoggedInException, - NotConnectedException, SQLException { - if (dbManager.isConnected()) { - if (isLoggedIn()) { - Map categories = fetchCategories(); - List projects = new ArrayList(); - ResultSet resultSet = dbManager.getResultSet(String.format(MY_PROJECTS_SQL, - currentUserId)); - while (resultSet.next()) { - projects.add(new ProjectEntity(resultSet.getInt("project_id"), resultSet - .getString("name"), resultSet.getString("description"), "", categories - .get(resultSet.getInt("category_id")))); - } - return projects; - } else { - LOG.error("Not logged in"); - throw new NotLoggedInException(); - } - } else { - LOG.error("Not connected"); - throw new NotConnectedException(); - } - } - - public String downloadProjectContent(int projectId) throws NotConnectedException, - NotExistsException, SQLException { - if (dbManager.isConnected()) { - ResultSet resultSet = dbManager.getResultSet(String.format(PROJECT_SQL, projectId)); - if (resultSet.next()) { - return resultSet.getString("content"); - } - throw new NotExistsException("Project with id = " + projectId + " does not exist."); - } else { - LOG.error("Not connected"); - throw new NotConnectedException(); - } - } - - public List fetchProjectRows(String searchCriteria) { - return null; - } - - public boolean isLoggedIn() { - return currentUserId != null; - } - - public String hashPassword(String password) { - messageDigest.reset(); - byte[] bytes = messageDigest.digest(password.getBytes()); - String md5 = ""; - for (byte b : bytes) { - String str = Integer.toHexString(b); - if (str.length() == 1) { - str = "0" + str; - } - md5 += str.substring(str.length() - 2); - } - return md5; - } - - public void dispose() { - dbManager.closeConnection(); - } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/MySqlDBManager.java b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/MySqlDBManager.java deleted file mode 100644 index 186ba407..00000000 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/online/presenter/MySqlDBManager.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.diylc.swing.plugins.online.presenter; - -import java.sql.Connection; -import java.sql.Driver; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; - -import org.apache.log4j.Logger; - -public class MySqlDBManager { - - private final static Logger LOG = Logger.getLogger(MySqlDBManager.class); - - protected Connection connection; - protected Statement statement; - protected ResultSet resultSet; - protected String url; - protected String user; - protected String pass; - protected boolean connected; - - public MySqlDBManager(String url, String user, String pass) { - this.url = url; - this.user = user; - this.pass = pass; - this.connected = false; - } - - public MySqlDBManager(String host, String port, String userName, String password) { - this(String.format("jdbc:mysql://%s%s", host, port.trim().equals("") ? "" : (":" + port)), - userName, password); - } - - public void connectDB() throws Exception { - if (!connected) { - Driver driver = (Driver) Class.forName("com.mysql.jdbc.Driver").newInstance(); - DriverManager.registerDriver(driver); - String finalUrl = String.format("%s?user=%s&password=%s", url, user, pass); - LOG.info("Trying to connect to: " + url); - connection = DriverManager.getConnection(finalUrl); - statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, - ResultSet.CONCUR_READ_ONLY); - connected = true; - } - } - - public boolean isConnected() { - return connected; - } - - public void closeConnection() { - LOG.info("Closing connection."); - try { - if (resultSet != null) { - resultSet.close(); - } - if (statement != null) { - statement.close(); - } - if (connection != null) { - connection.close(); - } - connected = false; - } catch (SQLException e) { - e.printStackTrace(); - } - } - - public ResultSet getResultSet(String query) throws SQLException { - LOG.info("Executing query: " + query); - resultSet = statement.executeQuery(query); - return resultSet; - } - - public Connection getConnection() { - return connection; - } - - public int updateDB(String query) throws SQLException { - LOG.info("Executing query: " + query); - statement.execute(query); - return statement.getUpdateCount(); - } -} \ No newline at end of file diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/test/org/diylc/TableTest.java b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/test/org/diylc/TableTest.java index 21578424..71f3e8bc 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/test/org/diylc/TableTest.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/test/org/diylc/TableTest.java @@ -22,8 +22,8 @@ public class TableTest { BasicConfigurator.configure(); List projects = new ArrayList(); - projects.add(new ProjectEntity(1, "first", "some text", "bane", "none")); - projects.add(new ProjectEntity(2, "second", "anoter text", "bisera", "none")); + projects.add(new ProjectEntity(1, "first", "some text", "bane", "none", "", "", "")); + projects.add(new ProjectEntity(2, "second", "anoter text", "bisera", "none", "", "", "")); ObjectListTable t = new ObjectListTable(ProjectEntity.class, new String[] { "getName", "getDescription", "getCategory", "getOwner",