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 e8d74308a6d1432c2f1cb99dfd806206b7ca5efd Author: Hugo PIGEON <hpigeon@codelutin.com> Date: Tue May 5 16:05:22 2015 +0200 Use of the providers for the UI to make it more modular --- .../java/org/nuiton/scmwebeditor/GitProvider.java | 10 +++++ .../java/org/nuiton/scmwebeditor/ScmProvider.java | 8 ++++ .../ScmWebEditorApplicationListener.java | 5 --- .../java/org/nuiton/scmwebeditor/SvnProvider.java | 19 ++++++++ .../nuiton/scmwebeditor/actions/BrowseAction.java | 52 +++++++++++++++------- .../impl/ScmUrlResolverMavenDocImpl.java | 10 ++--- .../impl/ScmUrlResolverMavenSiteXmlImpl.java | 4 +- src/main/resources/struts.xml | 11 ++--- src/main/webapp/WEB-INF/content/browse.jsp | 3 +- src/main/webapp/WEB-INF/content/error.jsp | 2 +- .../webapp/WEB-INF/content/modificationViewer.jsp | 2 +- src/main/webapp/WEB-INF/content/outConnection.jsp | 2 +- src/main/webapp/js/branches.js | 34 +++++++++----- src/main/webapp/js/scmDetector.js | 29 +++--------- 14 files changed, 117 insertions(+), 74 deletions(-) diff --git a/src/main/java/org/nuiton/scmwebeditor/GitProvider.java b/src/main/java/org/nuiton/scmwebeditor/GitProvider.java index e3a8278..7dd9f1d 100644 --- a/src/main/java/org/nuiton/scmwebeditor/GitProvider.java +++ b/src/main/java/org/nuiton/scmwebeditor/GitProvider.java @@ -74,4 +74,14 @@ public class GitProvider implements ScmProvider { return gitConn; } + + @Override + public boolean addressSeemsCompatible(String address) { + + if (address.contains(".git") || address.startsWith("git://") || address.contains("git.")) { + return true; + } else { + return false; + } + } } diff --git a/src/main/java/org/nuiton/scmwebeditor/ScmProvider.java b/src/main/java/org/nuiton/scmwebeditor/ScmProvider.java index 9da89d5..ed43021 100644 --- a/src/main/java/org/nuiton/scmwebeditor/ScmProvider.java +++ b/src/main/java/org/nuiton/scmwebeditor/ScmProvider.java @@ -27,4 +27,12 @@ public interface ScmProvider { * @return the connection to the SCM */ ScmConnection getConnection(String address, String sessionId); + + + /** + * Tells whether the given address seems compatible with the SCM + * @param address the repository's address + * @return true if the repository seems to be compatible with the SCM + */ + boolean addressSeemsCompatible(String address); } diff --git a/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorApplicationListener.java b/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorApplicationListener.java index b47d526..660ea05 100644 --- a/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorApplicationListener.java +++ b/src/main/java/org/nuiton/scmwebeditor/ScmWebEditorApplicationListener.java @@ -24,8 +24,6 @@ package org.nuiton.scmwebeditor; import org.nuiton.i18n.I18n; import org.nuiton.i18n.init.DefaultI18nInitializer; import org.nuiton.i18n.init.I18nInitializer; -import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory; -import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; @@ -35,9 +33,6 @@ public class ScmWebEditorApplicationListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { - SVNRepositoryFactoryImpl.setup(); - DAVRepositoryFactory.setup(); - // init I18n I18nInitializer i18nInitializer = new DefaultI18nInitializer("scmwebeditor-i18n"); diff --git a/src/main/java/org/nuiton/scmwebeditor/SvnProvider.java b/src/main/java/org/nuiton/scmwebeditor/SvnProvider.java index 82ff0f4..a16220d 100644 --- a/src/main/java/org/nuiton/scmwebeditor/SvnProvider.java +++ b/src/main/java/org/nuiton/scmwebeditor/SvnProvider.java @@ -3,6 +3,8 @@ package org.nuiton.scmwebeditor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.tmatesoft.svn.core.SVNException; +import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory; +import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl; import java.util.List; @@ -10,6 +12,13 @@ public class SvnProvider implements ScmProvider { private static final Log log = LogFactory.getLog(SvnProvider.class); + + public SvnProvider() { + + SVNRepositoryFactoryImpl.setup(); + DAVRepositoryFactory.setup(); + } + @Override public boolean supportsBranches() { return false; @@ -35,4 +44,14 @@ public class SvnProvider implements ScmProvider { return svnConn; } + + @Override + public boolean addressSeemsCompatible(String address) { + + if (address.startsWith("svn://") || address.contains("svn.") || address.contains("subversion.")) { + return true; + } else { + return false; + } + } } diff --git a/src/main/java/org/nuiton/scmwebeditor/actions/BrowseAction.java b/src/main/java/org/nuiton/scmwebeditor/actions/BrowseAction.java index 50cdd2a..c2277c7 100644 --- a/src/main/java/org/nuiton/scmwebeditor/actions/BrowseAction.java +++ b/src/main/java/org/nuiton/scmwebeditor/actions/BrowseAction.java @@ -21,6 +21,7 @@ */ package org.nuiton.scmwebeditor.actions; +import com.google.common.collect.Lists; import com.jgeppert.struts2.jquery.tree.result.TreeNode; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -40,6 +41,7 @@ import javax.servlet.http.HttpSession; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; public class BrowseAction extends AbstractScmWebEditorAction implements ServletResponseAware { @@ -78,6 +80,10 @@ public class BrowseAction extends AbstractScmWebEditorAction implements ServletR protected String headBranchName; + protected boolean scmSupportsBranches; + + protected String detectedScm; + protected transient HttpServletResponse response; public boolean getError() { return error; } @@ -126,6 +132,16 @@ public class BrowseAction extends AbstractScmWebEditorAction implements ServletR public void setHeadBranchName(String headBranchName) { this.headBranchName = headBranchName; } + public boolean isScmSupportsBranches() { return scmSupportsBranches; } + + public void setScmSupportsBranches(boolean scmSupportsBranches) { this.scmSupportsBranches = scmSupportsBranches; } + + public String getDetectedScm() { return detectedScm; } + + public void setDetectedScm(String detectedScm) { + this.detectedScm = detectedScm; + } + public String browse() { if (log.isDebugEnabled()) { @@ -149,6 +165,8 @@ public class BrowseAction extends AbstractScmWebEditorAction implements ServletR ScmProvider provider = getProvider(scmType); + scmSupportsBranches = provider.supportsBranches(); + if (provider == null) { error = true; return ROOT; @@ -248,7 +266,7 @@ public class BrowseAction extends AbstractScmWebEditorAction implements ServletR return SUCCESS; } - public String getBranchesJSON() { + public String listBranchesJSON() { if (username == null) { username = "anonymous"; @@ -259,6 +277,8 @@ public class BrowseAction extends AbstractScmWebEditorAction implements ServletR ScmProvider provider = getProvider(scmType); + scmSupportsBranches = provider.supportsBranches(); + try { branches = provider.listBranches(address, username, pw); } catch (OperationNotSupportedException e) { @@ -267,29 +287,27 @@ public class BrowseAction extends AbstractScmWebEditorAction implements ServletR } } - // generating the JSON data - String json = ""; + return SUCCESS; + } - if (branches.size() > 0) { - // creating the JSON String - json = "{\"branches\":["; + public String detectScm() { - for (String branch : branches) { - json += "{\"name\":\"" + branch + "\"},"; - } + List<String> supportedScms = Lists.newArrayList(ScmWebEditorConfig.getProviders().keySet()); - // we don't take the last coma - json = json.substring(0, json.length() - 2); + for (String scm : supportedScms) { - json += "]}"; - } + ScmProvider provider = getProvider(scm); - return json; - } + if (provider.addressSeemsCompatible(address)) { + detectedScm = scm; + return SUCCESS; + } + } - public String getJSON() { - return browse(); + detectedScm = null; + + return SUCCESS; } public List<TreeNode> getNodes() { diff --git a/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenDocImpl.java b/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenDocImpl.java index db2b201..7af4dea 100644 --- a/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenDocImpl.java +++ b/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenDocImpl.java @@ -32,15 +32,15 @@ public class ScmUrlResolverMavenDocImpl implements ScmUrlResolver { public static final String MAVEN_SITE_DOCUMENT_NAME = "maven-site-document"; - public static final String PARAMETER_DEFAULT_LOCALE = "svndefaultLocale"; + public static final String PARAMETER_DEFAULT_LOCALE = "scmdefaultLocale"; - public static final String PARAMETER_LOCALE = "svnlocale"; + public static final String PARAMETER_LOCALE = "scmlocale"; - public static final String PARAMETER_SVN_ROOT = "svnroot"; + public static final String PARAMETER_SVN_ROOT = "scmroot"; - public static final String PARAMETER_SVN_FILE = "svnfile"; + public static final String PARAMETER_SVN_FILE = "scmfile"; - public static final String PARAMETER_FILE_FORMAT = "svnformat"; + public static final String PARAMETER_FILE_FORMAT = "scmformat"; @Override diff --git a/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenSiteXmlImpl.java b/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenSiteXmlImpl.java index 53726d4..d69e909 100644 --- a/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenSiteXmlImpl.java +++ b/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenSiteXmlImpl.java @@ -32,9 +32,9 @@ public class ScmUrlResolverMavenSiteXmlImpl implements ScmUrlResolver { public static final String MAVEN_SITE_XML_NAME = "maven-site.xml"; - public static final String PARAMETER_LOCALE = "svnlocale"; + public static final String PARAMETER_LOCALE = "scmlocale"; - public static final String PARAMETER_SVN_ROOT = "svnroot"; + public static final String PARAMETER_SVN_ROOT = "scmroot"; @Override diff --git a/src/main/resources/struts.xml b/src/main/resources/struts.xml index d052f4c..ca64bec 100644 --- a/src/main/resources/struts.xml +++ b/src/main/resources/struts.xml @@ -126,11 +126,12 @@ <result name="authError" >/WEB-INF/content/loginBrowse.jsp</result> </action> - <action name="getBranches" class="org.nuiton.scmwebeditor.actions.BrowseAction" method="getBranchesJSON"> - <param name="address"/> - <result name="*" type="json"> - <param name="branches">branches</param> - </result> + <action name="getBranches" class="org.nuiton.scmwebeditor.actions.BrowseAction" method="listBranchesJSON"> + <result name="success" type="json"/> + </action> + + <action name="detectScm" class="org.nuiton.scmwebeditor.actions.BrowseAction" method="detectScm"> + <result name="success" type="json"/> </action> </package> diff --git a/src/main/webapp/WEB-INF/content/browse.jsp b/src/main/webapp/WEB-INF/content/browse.jsp index 929b99b..0ec28f5 100644 --- a/src/main/webapp/WEB-INF/content/browse.jsp +++ b/src/main/webapp/WEB-INF/content/browse.jsp @@ -61,8 +61,7 @@ <script src="js/pictureUpload.js" type="text/javascript"></script> -<!-- FIXME dépendant de Git --> -<s:if test="scmType.equals('Git') && !error"> +<s:if test="scmSupportsBranches && !error"> <s:text name="scm.outConnection.headBranch"/> <s:if test="selectedBranch != null"> <s:if test="!selectedBranch.equals('')"> diff --git a/src/main/webapp/WEB-INF/content/error.jsp b/src/main/webapp/WEB-INF/content/error.jsp index c87f120..323ddc6 100644 --- a/src/main/webapp/WEB-INF/content/error.jsp +++ b/src/main/webapp/WEB-INF/content/error.jsp @@ -38,7 +38,7 @@ glorieux --%> <% } else { %> <meta http-equiv="Refresh" content="3;URL=checkout.action"> <% } %> - <%--%=request.getAttribute("scmEditorUrl")%>?adresse=<%=request.getAttribute("Svnpath_url")%>&file_name=<%=request.getAttribute("Filename_url")%>&project_url=<%=request.getAttribute("Redirection_url")%>&lang=<%=request.getAttribute("Lang")%>&format=<%=request.getAttribute("Format")%>"--%> + <%--%=request.getAttribute("scmEditorUrl")%>?adresse=<%=request.getAttribute("Scmpath_url")%>&file_name=<%=request.getAttribute("Filename_url")%>&project_url=<%=request.getAttribute("Redirection_url")%>&lang=<%=request.getAttribute("Lang")%>&format=<%=request.getAttribute("Format")%>"--%> </head> <body> <a target="_blank" href="http://maven-site.nuiton.org/scmwebeditor/"><img diff --git a/src/main/webapp/WEB-INF/content/modificationViewer.jsp b/src/main/webapp/WEB-INF/content/modificationViewer.jsp index a414601..c174c96 100644 --- a/src/main/webapp/WEB-INF/content/modificationViewer.jsp +++ b/src/main/webapp/WEB-INF/content/modificationViewer.jsp @@ -449,7 +449,7 @@ <label>Upload a picture : <input type="file" name="upload"/></label><br/> - <label>Path on svn : <input type="text" name="svnPath" /></label><br/> + <label>Path on scm : <input type="text" name="scmPath" /></label><br/> <label>username : <input type="text" name="username" /></label><br/> <label>password : <input type="password" name="pw" /></label><br/> diff --git a/src/main/webapp/WEB-INF/content/outConnection.jsp b/src/main/webapp/WEB-INF/content/outConnection.jsp index 6f3de64..bc16e89 100644 --- a/src/main/webapp/WEB-INF/content/outConnection.jsp +++ b/src/main/webapp/WEB-INF/content/outConnection.jsp @@ -141,7 +141,7 @@ <!-- <div id="searchTree"> - <s:url id="searchTreeUrl" action="search?address=http://localhost/scmsvn"/> + <s:url id="searchTreeUrl" action="search?address=http://localhost/scm"/> <sjt:tree id="scmTree" jstreetheme="classic" diff --git a/src/main/webapp/js/branches.js b/src/main/webapp/js/branches.js index 03f1b4e..3ac9df7 100644 --- a/src/main/webapp/js/branches.js +++ b/src/main/webapp/js/branches.js @@ -8,21 +8,31 @@ $(document).ready(function() { var username = $("#username").val(); var pw = $("#pw").val(); - if (scmType == "Git") { + var branchesSupported = false; + var branches; + + $.getJSON("getBranches.action?address=" + address + "&scmType=" + scmType + + "&username=" + username + "&pw=" + pw, function(result) { + + branchesSupported = result.scmSupportsBranches; + branches = result.branches; + + if (branchesSupported) { + + listSelect.find("option:gt(0)").remove(); + + $.each(branches, function(i, field) { + listSelect.append("<option>" + field + "</option>"); + }); + + listDiv.show(); + } else { + listDiv.hide(); + } + }); - listSelect.find("option:gt(0)").remove(); - $.getJSON("getBranches.action?address=" + address + "&scmType=" + scmType + - "&username=" + username + "&pw=" + pw, function(result) { - $.each(result.branches, function(i, field) { - listSelect.append("<option>" + field + "</option>"); - }); - }); - listDiv.show(); - } else { - listDiv.hide(); - } }); $("#branchesList").on("change", function() { diff --git a/src/main/webapp/js/scmDetector.js b/src/main/webapp/js/scmDetector.js index 7e31f18..76f3a1a 100644 --- a/src/main/webapp/js/scmDetector.js +++ b/src/main/webapp/js/scmDetector.js @@ -3,31 +3,14 @@ $(document).ready(function() { $("#addressInput").on("input", function() { var address = $("#addressInput").val(); - if (scmsListContains("Git")) { - if (address.contains(".git") || address.startsWith("git://")) { - $("#scmType").val("Git"); - } - } - - if (scmsListContains("SVN")) { - if (address.startsWith("svn://")) { - $("#scmType").val("SVN"); - } - } - - }); - + $.getJSON("detectScm.action?address=" + address, function(result) { - function scmsListContains(scm) { + console.log(result.detectedScm); - var $children = $("#scmType").children(); - - for (var i = 0 ; i < $children.length ; i++) { - if ($children[i].value == scm) { - return true; + if (result.detectedScm != null) { + $("#scmType").val(result.detectedScm); } - } + }); - return false; - } + }); }); \ No newline at end of file -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.