branch feature/GIT updated (659ea7b -> 40513dc)
This is an automated email from the git hooks/post-receive script. New change to branch feature/GIT in repository scmwebeditor. See http://git.nuiton.org/scmwebeditor.git from 659ea7b Added DTOs for the upload action new 40513dc Use of providers which give information about the SCMs features The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 40513dcf959d64dbe664a2e430b52105271ffafd Author: Hugo PIGEON <hpigeon@codelutin.com> Date: Tue May 5 11:14:03 2015 +0200 Use of providers which give information about the SCMs features Summary of changes: .../org/nuiton/scmwebeditor/GitConnection.java | 47 ++----------- .../java/org/nuiton/scmwebeditor/GitProvider.java | 77 ++++++++++++++++++++++ .../OperationNotSupportedException.java | 11 ++++ .../org/nuiton/scmwebeditor/ScmConnection.java | 14 ++-- .../nuiton/scmwebeditor/ScmConnectionFactory.java | 58 ---------------- .../java/org/nuiton/scmwebeditor/ScmProvider.java | 30 +++++++++ .../nuiton/scmwebeditor/ScmWebEditorConfig.java | 24 +++++-- .../scmwebeditor/ScmWebEditorConfigOption.java | 4 +- .../java/org/nuiton/scmwebeditor/SvnProvider.java | 38 +++++++++++ .../actions/AbstractScmWebEditorAction.java | 40 +++++++++++ .../nuiton/scmwebeditor/actions/BrowseAction.java | 50 +++++++------- .../nuiton/scmwebeditor/actions/EditAction.java | 13 +--- .../nuiton/scmwebeditor/actions/LogoutAction.java | 13 +--- .../nuiton/scmwebeditor/actions/ResetAction.java | 14 +--- .../actions/ScmWebEditorCommitAction.java | 11 +--- .../actions/ScmWebEditorMainAction.java | 11 +--- .../nuiton/scmwebeditor/actions/UploadAction.java | 20 ++---- src/main/resources/scmwebeditor.properties | 2 +- src/main/webapp/WEB-INF/content/outConnection.jsp | 4 +- 19 files changed, 281 insertions(+), 200 deletions(-) create mode 100644 src/main/java/org/nuiton/scmwebeditor/GitProvider.java create mode 100644 src/main/java/org/nuiton/scmwebeditor/OperationNotSupportedException.java delete mode 100644 src/main/java/org/nuiton/scmwebeditor/ScmConnectionFactory.java create mode 100644 src/main/java/org/nuiton/scmwebeditor/ScmProvider.java create mode 100644 src/main/java/org/nuiton/scmwebeditor/SvnProvider.java -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/GIT in repository scmwebeditor. See http://git.nuiton.org/scmwebeditor.git commit 40513dcf959d64dbe664a2e430b52105271ffafd Author: Hugo PIGEON <hpigeon@codelutin.com> Date: Tue May 5 11:14:03 2015 +0200 Use of providers which give information about the SCMs features --- .../org/nuiton/scmwebeditor/GitConnection.java | 47 ++----------- .../java/org/nuiton/scmwebeditor/GitProvider.java | 77 ++++++++++++++++++++++ .../OperationNotSupportedException.java | 11 ++++ .../org/nuiton/scmwebeditor/ScmConnection.java | 14 ++-- .../nuiton/scmwebeditor/ScmConnectionFactory.java | 58 ---------------- .../java/org/nuiton/scmwebeditor/ScmProvider.java | 30 +++++++++ .../nuiton/scmwebeditor/ScmWebEditorConfig.java | 24 +++++-- .../scmwebeditor/ScmWebEditorConfigOption.java | 4 +- .../java/org/nuiton/scmwebeditor/SvnProvider.java | 38 +++++++++++ .../actions/AbstractScmWebEditorAction.java | 40 +++++++++++ .../nuiton/scmwebeditor/actions/BrowseAction.java | 50 +++++++------- .../nuiton/scmwebeditor/actions/EditAction.java | 13 +--- .../nuiton/scmwebeditor/actions/LogoutAction.java | 13 +--- .../nuiton/scmwebeditor/actions/ResetAction.java | 14 +--- .../actions/ScmWebEditorCommitAction.java | 11 +--- .../actions/ScmWebEditorMainAction.java | 11 +--- .../nuiton/scmwebeditor/actions/UploadAction.java | 20 ++---- src/main/resources/scmwebeditor.properties | 2 +- src/main/webapp/WEB-INF/content/outConnection.jsp | 4 +- 19 files changed, 281 insertions(+), 200 deletions(-) diff --git a/src/main/java/org/nuiton/scmwebeditor/GitConnection.java b/src/main/java/org/nuiton/scmwebeditor/GitConnection.java index bc85e1d..34d5ca7 100644 --- a/src/main/java/org/nuiton/scmwebeditor/GitConnection.java +++ b/src/main/java/org/nuiton/scmwebeditor/GitConnection.java @@ -22,7 +22,6 @@ package org.nuiton.scmwebeditor; import com.google.common.collect.Lists; -import com.jgeppert.struts2.jquery.tree.result.TreeNode; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -31,7 +30,6 @@ import org.eclipse.jgit.api.errors.*; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ObjectId; -import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevTree; @@ -48,7 +46,10 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; public class GitConnection implements ScmConnection { @@ -712,46 +713,6 @@ public class GitConnection implements ScmConnection { /** - * Gives a list of a remote repository's branches - * @param address the URL to the remote repository - * @param username the username to connect with - * @param password the password to connect with - * @return a list of the repository's branches - */ - public static List<String> getBranches(String address, String username, String password) { - - List<String> branches = new ArrayList<String>(); - - CredentialsProvider credentials = new UsernamePasswordCredentialsProvider(username, password); - - LsRemoteCommand lsRemote = new LsRemoteCommand(null); - lsRemote.setRemote(address); - lsRemote.setTags(false); - lsRemote.setHeads(true); - lsRemote.setCredentialsProvider(credentials); - - try { - Collection<Ref> lsRemoteResult = lsRemote.call(); - branches = new ArrayList<String>(); - - for (Ref branch : lsRemoteResult) { - - // we only take the name of the branch, not "refs/heads/" - String name = branch.getName(); - name = name.substring(name.indexOf("/") + 1); - name = name.substring(name.indexOf("/") + 1); - - branches.add(name); - } - } catch (GitAPIException e) { - log.error("The repository at address " + address + " doesn't exist", e); - } - - return branches; - } - - - /** * Changing for another branch * @param branchName the new branch's name * @throws IOException if reaching the repository is not possible diff --git a/src/main/java/org/nuiton/scmwebeditor/GitProvider.java b/src/main/java/org/nuiton/scmwebeditor/GitProvider.java new file mode 100644 index 0000000..e3a8278 --- /dev/null +++ b/src/main/java/org/nuiton/scmwebeditor/GitProvider.java @@ -0,0 +1,77 @@ +package org.nuiton.scmwebeditor; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.eclipse.jgit.api.LsRemoteCommand; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.transport.CredentialsProvider; +import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class GitProvider implements ScmProvider { + + private static final Log log = LogFactory.getLog(GitProvider.class); + + protected String address; + + + @Override + public boolean supportsBranches() { + return true; + } + + @Override + public List<String> listBranches(String address, String username, String password) throws OperationNotSupportedException { + + List<String> branches = new ArrayList<String>(); + + CredentialsProvider credentials = new UsernamePasswordCredentialsProvider(username, password); + + LsRemoteCommand lsRemote = new LsRemoteCommand(null); + lsRemote.setRemote(address); + lsRemote.setTags(false); + lsRemote.setHeads(true); + lsRemote.setCredentialsProvider(credentials); + + try { + Collection<Ref> lsRemoteResult = lsRemote.call(); + branches = new ArrayList<String>(); + + for (Ref branch : lsRemoteResult) { + + // we only take the name of the branch, not "refs/heads/" + String name = branch.getName(); + name = name.substring(name.indexOf("/") + 1); + name = name.substring(name.indexOf("/") + 1); + + branches.add(name); + } + } catch (GitAPIException e) { + log.error("The repository at address " + address + " doesn't exist", e); + } + + return branches; + } + + @Override + public ScmConnection getConnection(String address, String sessionId) { + + GitConnection gitConn = null; + this.address = address; + + try { + gitConn = new GitConnection(address, sessionId); + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("Can not connect to Git repository at " + address); + } + } + + return gitConn; + } +} diff --git a/src/main/java/org/nuiton/scmwebeditor/OperationNotSupportedException.java b/src/main/java/org/nuiton/scmwebeditor/OperationNotSupportedException.java new file mode 100644 index 0000000..4cbc2dc --- /dev/null +++ b/src/main/java/org/nuiton/scmwebeditor/OperationNotSupportedException.java @@ -0,0 +1,11 @@ +package org.nuiton.scmwebeditor; + +/** + * An exception called when the requested operation is not supported by the SCM + */ +public class OperationNotSupportedException extends Exception { + + public OperationNotSupportedException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/java/org/nuiton/scmwebeditor/ScmConnection.java b/src/main/java/org/nuiton/scmwebeditor/ScmConnection.java index 54b5c09..a95025a 100644 --- a/src/main/java/org/nuiton/scmwebeditor/ScmConnection.java +++ b/src/main/java/org/nuiton/scmwebeditor/ScmConnection.java @@ -14,7 +14,7 @@ public interface ScmConnection { * @param dto the DTO which contains all the parameters * @return a DTO which contains all the results */ - public BrowseResultDto browse(BrowseDto dto); + BrowseResultDto browse(BrowseDto dto); /** @@ -22,7 +22,7 @@ public interface ScmConnection { * @param dto the DTO which contains all the parameters * @return a DTO which contains all the results */ - public CommitResultDto commit(CommitDto dto); + CommitResultDto commit(CommitDto dto); /** @@ -30,7 +30,7 @@ public interface ScmConnection { * @param dto the DTO which contains all the parameters * @return a DTO which contains all the results */ - public UploadResultDto uploadFile(UploadDto dto); + UploadResultDto uploadFile(UploadDto dto); /** @@ -40,7 +40,7 @@ public interface ScmConnection { * @param password the user's password for the SCM * @return a String which contains the file's content */ - public String getFileContent(String path, String username, String password) throws AuthenticationException; + String getFileContent(String path, String username, String password) throws AuthenticationException; /** @@ -50,20 +50,20 @@ public interface ScmConnection { * @param password the user's password for the SCM * @return a String which contains the head revision's number */ - public String getHeadRevisionNumber(String path, String username, String password) throws AuthenticationException; + String getHeadRevisionNumber(String path, String username, String password) throws AuthenticationException; /** * Gives the repository's unique identifier * @return the repository's unique identifier */ - public String getRepositoryId(); + String getRepositoryId(); /** * Gives the name of the edited file * @return the name of the edited file */ - public String getFileName(); + String getFileName(); } diff --git a/src/main/java/org/nuiton/scmwebeditor/ScmConnectionFactory.java b/src/main/java/org/nuiton/scmwebeditor/ScmConnectionFactory.java deleted file mode 100644 index faac19c..0000000 --- a/src/main/java/org/nuiton/scmwebeditor/ScmConnectionFactory.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.nuiton.scmwebeditor; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.tmatesoft.svn.core.SVNException; - -import java.io.IOException; - -/** - * Allows to create a ScmConnection - */ -public class ScmConnectionFactory { - - private static final Log log = LogFactory.getLog(ScmConnectionFactory.class); - - - /** - * Creates a new ScmConnection, the type of SCM is deduced with the repository's address - * @param address the SCM's address - * @param type the name of the SCM tu use - * @param sessionId the user's session ID - * @return a ScmConnection of the correct type to use the repository at the given address - */ - public static ScmConnection createScmConnection(String address, String type, - String sessionId) throws ScmNotFoundException { - - ScmConnection scmConn = null; - - if (type != null) { - - if (type.equals("Git")) { - - try { - scmConn = new GitConnection(address, sessionId); - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("Can not reach the repository", e); - } - } - } else if (type.equals("SVN")) { - - try { - scmConn = new SvnConnection(address); - } catch (SVNException e) { - if (log.isErrorEnabled()) { - log.error("Can not reach the repository", e); - } - } - } else { - throw new ScmNotFoundException("The given SCM type was not recognized"); - } - } else { - throw new ScmNotFoundException("The given SCM type is null"); - } - - return scmConn; - } -} diff --git a/src/main/java/org/nuiton/scmwebeditor/ScmProvider.java b/src/main/java/org/nuiton/scmwebeditor/ScmProvider.java new file mode 100644 index 0000000..9da89d5 --- /dev/null +++ b/src/main/java/org/nuiton/scmwebeditor/ScmProvider.java @@ -0,0 +1,30 @@ +package org.nuiton.scmwebeditor; + +import java.util.List; + +public interface ScmProvider { + + /** + * Tells whether the SCM supports branches + * @return true if the SCM supports branches + */ + boolean supportsBranches(); + + /** + * Makes a list of the repository's branches + * @param address the repository's address + * @param username the username used to connect to the SCM + * @param password the password used to connect to the SCM + * @return a list of the repository's branches + * @throws OperationNotSupportedException if the SCM doesn't support branches + */ + List<String> listBranches(String address, String username, String password) throws OperationNotSupportedException; + + /** + * Gives the connection to the SCM + * @param address the repository's address + * @param sessionId the HTTP session ID which will be used to separate each user's local files + * @return the connection to the SCM + */ + ScmConnection getConnection(String address, String sessionId); +} diff --git a/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorConfig.java b/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorConfig.java index 578b8f1..f1b2d41 100644 --- a/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorConfig.java +++ b/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorConfig.java @@ -26,8 +26,9 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.config.ApplicationConfig; import org.nuiton.config.ArgumentsParserException; -import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class ScmWebEditorConfig { @@ -65,10 +66,25 @@ public class ScmWebEditorConfig { return getConfig().getOption(key); } - public static List<String> getSupportedScms() { + public static Map<String, String> getProviders() { - String key = ScmWebEditorConfigOption.SUPPORTED_SCMS.getKey(); - return getConfig().getOptionAsList(key).getOption(); + String key = ScmWebEditorConfigOption.PROVIDERS.getKey(); + Map<String, String> providers = new HashMap<String, String>(); + + List<String> options = getConfig().getOptionAsList(key).getOption(); + + for (String option : options) { + String[] nameClass = option.split(":"); + if (nameClass.length == 2) { + providers.put(nameClass[0], nameClass[1]); + } else { + if (log.isErrorEnabled()) { + log.error("Can not read option : " + option); + } + } + } + + return providers; } public static String getKey() { diff --git a/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorConfigOption.java b/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorConfigOption.java index dac5a80..dca0634 100644 --- a/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorConfigOption.java +++ b/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorConfigOption.java @@ -24,13 +24,15 @@ package org.nuiton.scmwebeditor; import org.nuiton.config.ApplicationConfig; import org.nuiton.config.ConfigOptionDef; +import java.util.List; + public enum ScmWebEditorConfigOption implements ConfigOptionDef { CONFIG_FILE(ApplicationConfig.CONFIG_FILE_NAME, "The file name", "scmwebeditor.properties", String.class, false, false), EDITABLE_FILES("swe.editableFiles", "description", "Files types that are editable", String.class, true, true), COOKIES_PRIVATE_KEY("swe.cookiePrivateKey", "Private key for cookies", null, String.class, true, true), LOCAL_REPOSITORIES_PATH("swe.localRepositoriesPath", "The path where the local repositories will be stored", "/var/local/swe", String.class, false, true), - SUPPORTED_SCMS("swe.supportedScms", "The SCMs that can be used", null, String.class, false, true); + PROVIDERS("swe.providers", "The SCMs that can be used", null, List.class, false, true); private final String key; diff --git a/src/main/java/org/nuiton/scmwebeditor/SvnProvider.java b/src/main/java/org/nuiton/scmwebeditor/SvnProvider.java new file mode 100644 index 0000000..82ff0f4 --- /dev/null +++ b/src/main/java/org/nuiton/scmwebeditor/SvnProvider.java @@ -0,0 +1,38 @@ +package org.nuiton.scmwebeditor; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.tmatesoft.svn.core.SVNException; + +import java.util.List; + +public class SvnProvider implements ScmProvider { + + private static final Log log = LogFactory.getLog(SvnProvider.class); + + @Override + public boolean supportsBranches() { + return false; + } + + @Override + public List<String> listBranches(String address, String username, String password) throws OperationNotSupportedException { + throw new OperationNotSupportedException("SVN repositories don't have branches"); + } + + @Override + public ScmConnection getConnection(String address, String sessionId) { + + SvnConnection svnConn = null; + + try { + svnConn = new SvnConnection(address); + } catch (SVNException e) { + if (log.isErrorEnabled()) { + log.error("Can not connect to SVN repository at " + address, e); + } + } + + return svnConn; + } +} diff --git a/src/main/java/org/nuiton/scmwebeditor/actions/AbstractScmWebEditorAction.java b/src/main/java/org/nuiton/scmwebeditor/actions/AbstractScmWebEditorAction.java index b835376..486e28a 100644 --- a/src/main/java/org/nuiton/scmwebeditor/actions/AbstractScmWebEditorAction.java +++ b/src/main/java/org/nuiton/scmwebeditor/actions/AbstractScmWebEditorAction.java @@ -31,7 +31,9 @@ import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.AutoDetectParser; import org.apache.tika.sax.BodyContentHandler; +import org.nuiton.scmwebeditor.ScmProvider; import org.nuiton.scmwebeditor.ScmSession; +import org.nuiton.scmwebeditor.ScmWebEditorConfig; import org.nuiton.web.struts2.BaseAction; import org.xml.sax.SAXException; @@ -348,6 +350,44 @@ public abstract class AbstractScmWebEditorAction extends BaseAction implements S return scmSession; } + /** + * Gives an instance of the provider for the given SCM type + * @param scmType the type of SCM to use + * @return the provider for the given SCM + */ + public ScmProvider getProvider(String scmType) { + + Map<String, String> providers = ScmWebEditorConfig.getProviders(); + String providerClassName = providers.get(scmType); + ScmProvider provider = null; + + if (providerClassName != null) { + try { + + Class<?> providerClass = Class.forName(providerClassName); + provider = (ScmProvider) providerClass.newInstance(); + + } catch (ClassNotFoundException e) { + + if (log.isErrorEnabled()) { + log.error("Can not find SCM " + scmType, e); + } + } catch (InstantiationException e) { + + if (log.isErrorEnabled()) { + log.error("Can not instantiate class " + providerClassName, e); + } + } catch (IllegalAccessException e) { + + if (log.isErrorEnabled()) { + log.error("Can not access to class " + providerClassName, e); + } + } + } + + return provider; + } + public String getUsername(String url) { return getScmSession().getUsername(url); } diff --git a/src/main/java/org/nuiton/scmwebeditor/actions/BrowseAction.java b/src/main/java/org/nuiton/scmwebeditor/actions/BrowseAction.java index 02a5cd8..50cdd2a 100644 --- a/src/main/java/org/nuiton/scmwebeditor/actions/BrowseAction.java +++ b/src/main/java/org/nuiton/scmwebeditor/actions/BrowseAction.java @@ -27,7 +27,10 @@ import org.apache.commons.logging.LogFactory; import org.apache.shiro.codec.Base64; import org.apache.shiro.crypto.BlowfishCipherService; import org.apache.struts2.interceptor.ServletResponseAware; -import org.nuiton.scmwebeditor.*; +import org.nuiton.scmwebeditor.OperationNotSupportedException; +import org.nuiton.scmwebeditor.ScmConnection; +import org.nuiton.scmwebeditor.ScmProvider; +import org.nuiton.scmwebeditor.ScmWebEditorConfig; import org.nuiton.scmwebeditor.dto.BrowseDto; import org.nuiton.scmwebeditor.dto.BrowseResultDto; @@ -144,23 +147,15 @@ public class BrowseAction extends AbstractScmWebEditorAction implements ServletR HttpSession session = request.getSession(); String sessionId = session.getId(); - ScmConnection scmConn; - try { - scmConn = ScmConnectionFactory.createScmConnection(address, scmType, sessionId); - } catch (ScmNotFoundException e) { - error = true; - if (log.isErrorEnabled()) { - log.error("Can not create a connection to the SCM", e); - } - return SUCCESS; - } + ScmProvider provider = getProvider(scmType); - // getting the files and directories - if (scmConn == null) { + if (provider == null) { error = true; return ROOT; } + ScmConnection scmConn = provider.getConnection(address, sessionId); + // putting all the parameters into a DTO BrowseDto dto = new BrowseDto(); dto.setUsername(username); @@ -237,21 +232,22 @@ public class BrowseAction extends AbstractScmWebEditorAction implements ServletR } if (username != null && pw != null) { - BlowfishCipherService bf = new BlowfishCipherService(); - byte[] privateKey = Base64.decode(ScmWebEditorConfig.getKey()); + if (!username.equals("anonymous") && !pw.equals("anonymous")) { + + BlowfishCipherService bf = new BlowfishCipherService(); + byte[] privateKey = Base64.decode(ScmWebEditorConfig.getKey()); - Cookie authCookie = new Cookie(repositoryUUID, bf.encrypt((username + "," + pw).getBytes(), privateKey).toBase64()); - authCookie.setMaxAge(60 * 60 * 24 * 365); - response.addCookie(authCookie); + Cookie authCookie = new Cookie(repositoryUUID, bf.encrypt((username + "," + pw).getBytes(), privateKey).toBase64()); + authCookie.setMaxAge(60 * 60 * 24 * 365); + response.addCookie(authCookie); - getScmSession().addScmUser(repositoryUUID, username, pw); + getScmSession().addScmUser(repositoryUUID, username, pw); + } } return SUCCESS; } - - // FIXME rendre indépendant de Git public String getBranchesJSON() { if (username == null) { @@ -261,7 +257,17 @@ public class BrowseAction extends AbstractScmWebEditorAction implements ServletR pw = "anonymous"; } - branches = GitConnection.getBranches(address, username, pw); + ScmProvider provider = getProvider(scmType); + + try { + branches = provider.listBranches(address, username, pw); + } catch (OperationNotSupportedException e) { + if (log.isDebugEnabled()) { + log.debug("The SCM " + scmType + " does not support branches", e); + } + } + + // generating the JSON data String json = ""; if (branches.size() > 0) { diff --git a/src/main/java/org/nuiton/scmwebeditor/actions/EditAction.java b/src/main/java/org/nuiton/scmwebeditor/actions/EditAction.java index a83c0a6..9cc7ad7 100644 --- a/src/main/java/org/nuiton/scmwebeditor/actions/EditAction.java +++ b/src/main/java/org/nuiton/scmwebeditor/actions/EditAction.java @@ -6,8 +6,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.shiro.codec.Base64; import org.apache.shiro.crypto.BlowfishCipherService; import org.nuiton.scmwebeditor.ScmConnection; -import org.nuiton.scmwebeditor.ScmConnectionFactory; -import org.nuiton.scmwebeditor.ScmNotFoundException; +import org.nuiton.scmwebeditor.ScmProvider; import org.nuiton.scmwebeditor.ScmWebEditorConfig; import javax.naming.AuthenticationException; @@ -24,14 +23,8 @@ public class EditAction extends ScmWebEditorMainAction { HttpSession session = request.getSession(); String sessionId = session.getId(); - ScmConnection scmConn = null; - try { - scmConn = ScmConnectionFactory.createScmConnection(address, scmType, sessionId); - } catch (ScmNotFoundException e) { - if (log.isErrorEnabled()) { - log.error("Can not create a connection to the SCM", e); - } - } + ScmProvider provider = getProvider(scmType); + ScmConnection scmConn = provider.getConnection(address, sessionId); format = scmConn.getFileName().substring(scmConn.getFileName().lastIndexOf(".") + 1); diff --git a/src/main/java/org/nuiton/scmwebeditor/actions/LogoutAction.java b/src/main/java/org/nuiton/scmwebeditor/actions/LogoutAction.java index b9d9450..3dde582 100644 --- a/src/main/java/org/nuiton/scmwebeditor/actions/LogoutAction.java +++ b/src/main/java/org/nuiton/scmwebeditor/actions/LogoutAction.java @@ -26,8 +26,7 @@ import org.apache.commons.logging.LogFactory; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware; import org.nuiton.scmwebeditor.ScmConnection; -import org.nuiton.scmwebeditor.ScmConnectionFactory; -import org.nuiton.scmwebeditor.ScmNotFoundException; +import org.nuiton.scmwebeditor.ScmProvider; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @@ -68,14 +67,8 @@ public class LogoutAction extends AbstractScmWebEditorAction implements ServletR String sessionId = request.getSession().getId(); - ScmConnection scmConn = null; - try { - scmConn = ScmConnectionFactory.createScmConnection(address, scmType, sessionId); - } catch (ScmNotFoundException e) { - if (log.isErrorEnabled()) { - log.error("Can not create a connection to the SCM", e); - } - } + ScmProvider provider = getProvider(scmType); + ScmConnection scmConn = provider.getConnection(address, sessionId); // getting the repository unique identifier if it is possible String repositoryId = scmConn.getRepositoryId(); diff --git a/src/main/java/org/nuiton/scmwebeditor/actions/ResetAction.java b/src/main/java/org/nuiton/scmwebeditor/actions/ResetAction.java index 455d99d..e1761e6 100644 --- a/src/main/java/org/nuiton/scmwebeditor/actions/ResetAction.java +++ b/src/main/java/org/nuiton/scmwebeditor/actions/ResetAction.java @@ -24,8 +24,7 @@ package org.nuiton.scmwebeditor.actions; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.scmwebeditor.ScmConnection; -import org.nuiton.scmwebeditor.ScmConnectionFactory; -import org.nuiton.scmwebeditor.ScmNotFoundException; +import org.nuiton.scmwebeditor.ScmProvider; import javax.naming.AuthenticationException; @@ -76,15 +75,8 @@ public class ResetAction extends AbstractScmWebEditorAction { String sessionId = request.getSession().getId(); - ScmConnection scmConn = null; - try { - scmConn = ScmConnectionFactory.createScmConnection(address, scmType, sessionId); - } catch (ScmNotFoundException e) { - error = e.getMessage(); - if (log.isErrorEnabled()) { - log.error("Can not create a connection to the SCM", e); - } - } + ScmProvider provider = getProvider(scmType); + ScmConnection scmConn = provider.getConnection(address, sessionId); // getting the repository unique identifier if it is possible String repositoryId = scmConn.getRepositoryId(); diff --git a/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorCommitAction.java b/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorCommitAction.java index f517121..d3d82c7 100644 --- a/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorCommitAction.java +++ b/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorCommitAction.java @@ -250,15 +250,8 @@ public class ScmWebEditorCommitAction extends AbstractScmWebEditorAction impleme HttpSession session = request.getSession(); String sessionId = session.getId(); - ScmConnection scmConn = null; - try { - scmConn = ScmConnectionFactory.createScmConnection(address, scmType, sessionId); - } catch (ScmNotFoundException e) { - if (log.isErrorEnabled()) { - log.error("Can not create a connection to the SCM", e); - } - } - + ScmProvider provider = getProvider(scmType); + ScmConnection scmConn = provider.getConnection(address, sessionId); String login = getUsername(); String password = getPw(); diff --git a/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java b/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java index 8eebc14..645532a 100644 --- a/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java +++ b/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java @@ -21,20 +21,15 @@ */ package org.nuiton.scmwebeditor.actions; +import com.google.common.collect.Lists; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.shiro.codec.Base64; -import org.apache.shiro.crypto.BlowfishCipherService; import org.apache.struts2.interceptor.ServletResponseAware; import org.nuiton.scmwebeditor.*; -import javax.naming.AuthenticationException; -import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import java.io.IOException; -import java.util.LinkedList; import java.util.List; +import java.util.Set; public class ScmWebEditorMainAction extends AbstractScmWebEditorAction implements ServletResponseAware { @@ -142,7 +137,7 @@ public class ScmWebEditorMainAction extends AbstractScmWebEditorAction implement return badLogin; } - public List<String> getSupportedScms() { return ScmWebEditorConfig.getSupportedScms(); } + public List<String> getSupportedScmsName() { return Lists.newArrayList(ScmWebEditorConfig.getProviders().keySet()); } /** * We check whether the parameters are empty diff --git a/src/main/java/org/nuiton/scmwebeditor/actions/UploadAction.java b/src/main/java/org/nuiton/scmwebeditor/actions/UploadAction.java index 033af28..cd2ca54 100644 --- a/src/main/java/org/nuiton/scmwebeditor/actions/UploadAction.java +++ b/src/main/java/org/nuiton/scmwebeditor/actions/UploadAction.java @@ -23,19 +23,14 @@ package org.nuiton.scmwebeditor.actions; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.shiro.codec.Base64; -import org.apache.shiro.crypto.BlowfishCipherService; import org.apache.struts2.interceptor.ServletRequestAware; import org.nuiton.scmwebeditor.ScmConnection; -import org.nuiton.scmwebeditor.ScmConnectionFactory; import org.nuiton.scmwebeditor.ScmNotFoundException; -import org.nuiton.scmwebeditor.ScmWebEditorConfig; +import org.nuiton.scmwebeditor.ScmProvider; import org.nuiton.scmwebeditor.dto.UploadDto; import org.nuiton.scmwebeditor.dto.UploadResultDto; -import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.File; @@ -154,15 +149,14 @@ public class UploadAction extends AbstractScmWebEditorAction implements ServletR HttpSession session = request.getSession(); String sessionId = session.getId(); - ScmConnection scmConn = null; - try { - scmConn = ScmConnectionFactory.createScmConnection(address, scmType, sessionId); - } catch (ScmNotFoundException e) { - if (log.isErrorEnabled()) { - log.error("Can not create a connection to the SCM", e); - } + ScmProvider provider = getProvider(scmType); + + if (provider == null) { + error = true; + return ERROR; } + ScmConnection scmConn = provider.getConnection(address, sessionId); // if the repository is not protected for writing, we get its UUID String repositoryUUID = scmConn.getRepositoryId(); diff --git a/src/main/resources/scmwebeditor.properties b/src/main/resources/scmwebeditor.properties index 5e66892..2f19baf 100644 --- a/src/main/resources/scmwebeditor.properties +++ b/src/main/resources/scmwebeditor.properties @@ -22,4 +22,4 @@ swe.editableFiles=text,xml,javascript,sh,x-tex,x-java swe.cookiePrivateKey=ZvcCyhfRTVZoQz3B/IpYdw== swe.localRepositoriesPath=/var/local/swe -swe.supportedScms=SVN,Git +swe.providers=SVN:org.nuiton.scmwebeditor.SvnProvider,Git:org.nuiton.scmwebeditor.GitProvider diff --git a/src/main/webapp/WEB-INF/content/outConnection.jsp b/src/main/webapp/WEB-INF/content/outConnection.jsp index 56783f6..6f3de64 100644 --- a/src/main/webapp/WEB-INF/content/outConnection.jsp +++ b/src/main/webapp/WEB-INF/content/outConnection.jsp @@ -117,15 +117,13 @@ value="%{search}" > </sj:submit> - - <input type="submit"/> </p> </center> <label> <s:text name="scm.outConnection.scmType"/> - <s:select id="scmType" name="scmType" list="supportedScms"/> + <s:select id="scmType" name="scmType" list="supportedScmsName"/> </label> <div id="branches"> -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm