r196 - in trunk/src: main/java/org/nuiton/scmwebeditor main/java/org/nuiton/scmwebeditor/actions main/java/org/nuiton/scmwebeditor/urlResolver main/java/org/nuiton/scmwebeditor/urlResolver/impl main/resources main/resources/META-INF main/resources/META-INF/services main/webapp/WEB-INF/content test/java test/java/org test/java/org/nuiton test/java/org/nuiton/scmwebeditor
Author: kcardineaud Date: 2011-08-01 18:07:34 +0200 (Mon, 01 Aug 2011) New Revision: 196 Url: http://nuiton.org/repositories/revision/scmwebeditor/196 Log: Begin to add url resolver for maven site Added: trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/ trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/ScmUrlResolver.java trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/ScmUrlResolverEngine.java trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverDefaultImpl.java trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenDocImpl.java trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenSiteXmlImpl.java trunk/src/main/resources/META-INF/ trunk/src/main/resources/META-INF/services/ trunk/src/main/resources/META-INF/services/org.nuiton.scmwebeditor.urlResolver.ScmUrlResolver trunk/src/test/java/org/ trunk/src/test/java/org/nuiton/ trunk/src/test/java/org/nuiton/scmwebeditor/ trunk/src/test/java/org/nuiton/scmwebeditor/BaseActionTest.java Modified: trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java trunk/src/main/java/org/nuiton/scmwebeditor/actions/SearchAction.java trunk/src/main/webapp/WEB-INF/content/outConnection.jsp Modified: trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java 2011-08-01 08:10:25 UTC (rev 195) +++ trunk/src/main/java/org/nuiton/scmwebeditor/actions/ScmWebEditorMainAction.java 2011-08-01 16:07:34 UTC (rev 196) @@ -2,6 +2,11 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.net.URL; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; @@ -15,6 +20,7 @@ import org.apache.struts2.interceptor.ServletRequestAware; import org.nuiton.scmwebeditor.ScmWebEditorBaseAction; import org.nuiton.scmwebeditor.SvnSession; +import org.nuiton.scmwebeditor.urlResolver.ScmUrlResolverEngine; import org.tmatesoft.svn.core.SVNAuthenticationException; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNNodeKind; @@ -116,9 +122,9 @@ /* Si il n'y a pas de parametre, l'utilisateur est renvoyé * vers la page de configuration (OutConnection) */ - if(testParameters()) { - return "noParameter"; - } +// if(testParameters()) { +// return "noParameter"; +// } if(log.isDebugEnabled()) { log.debug("ProjectUrl= "+request.getHeader("referer")); @@ -128,7 +134,42 @@ HttpSession httpSession = request.getSession(true); +// Map<String, String> parameters = new HashMap<String, String>(); +// parameters.put("address", address); + + + request.getParameterMap(); + + Map<String,String> parameters = new HashMap<String,String>(); + Map<?,?> map =(Map<?,?>) request.getParameterMap(); + Iterator<?> iter = map.entrySet().iterator(); + while (iter.hasNext()) { + Entry<?,?> n = (Entry<?,?>)iter.next(); + String key = n.getKey().toString(); + String values[] = (String[]) n.getValue(); + parameters.put(key,values[0].toString()); + } + + + URL urlSvn = null; + try { + urlSvn = ScmUrlResolverEngine.resolver(parameters); + } catch (IOException e1) { + log.error("erreur", e1); + return "noParameter"; + } catch (IllegalArgumentException e1) { + if(log.isErrorEnabled()) { + log.error(e1.getMessage()); + } + return "noParameter"; + } + + + log.info(urlSvn.toString()); + + address=urlSvn.toString(); + //SvnSession object creation if doesn't already exist SvnSession svnSess = getSvnSession(httpSession); @@ -347,8 +388,8 @@ @Override public void setServletRequest(HttpServletRequest request) { this.request = request; - } + Modified: trunk/src/main/java/org/nuiton/scmwebeditor/actions/SearchAction.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/actions/SearchAction.java 2011-08-01 08:10:25 UTC (rev 195) +++ trunk/src/main/java/org/nuiton/scmwebeditor/actions/SearchAction.java 2011-08-01 16:07:34 UTC (rev 196) @@ -145,9 +145,8 @@ - files = new LinkedList<String>(); - directories = new HashMap<String,String>(); + if(address.endsWith("/")) { @@ -282,6 +281,10 @@ public void listEntries( SVNRepository repository, String path ) { + + files = new LinkedList<String>(); + directories = new HashMap<String,String>(); + Collection<?> entries = null; try { entries = repository.getDir( path, -1 , null , (Collection<?>) null ); Added: trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/ScmUrlResolver.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/ScmUrlResolver.java (rev 0) +++ trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/ScmUrlResolver.java 2011-08-01 16:07:34 UTC (rev 196) @@ -0,0 +1,13 @@ +package org.nuiton.scmwebeditor.urlResolver; + +import java.io.IOException; +import java.net.URL; +import java.util.Map; + +public interface ScmUrlResolver { + + String getLayoutName(); + + URL resolv(Map<String, String> parameters) throws IOException; + +} Added: trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/ScmUrlResolverEngine.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/ScmUrlResolverEngine.java (rev 0) +++ trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/ScmUrlResolverEngine.java 2011-08-01 16:07:34 UTC (rev 196) @@ -0,0 +1,64 @@ +package org.nuiton.scmwebeditor.urlResolver; + +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.ServiceLoader; + +import org.apache.commons.lang.StringUtils; +import org.nuiton.scmwebeditor.urlResolver.impl.ScmUrlResolverDefaultImpl; + +public class ScmUrlResolverEngine { + + public static final String PARAMETER_SCM_LAYOUT = "scm.layout"; + + static final ThreadLocal<ScmUrlResolverEngine> engine = new ThreadLocal<ScmUrlResolverEngine>() { + + @Override + protected ScmUrlResolverEngine initialValue() { + return new ScmUrlResolverEngine(); + } + }; + + protected List<ScmUrlResolver> injectors; + + public static URL resolver(Map<String, String> parameters) throws IOException, IllegalArgumentException { + + // recuperation du layout name + String layoutName = parameters.get(PARAMETER_SCM_LAYOUT); + + // si layout non trouvé alors utiliser default + if (StringUtils.isEmpty(layoutName)) { + layoutName = ScmUrlResolverDefaultImpl.DEFAULT_NAME; + } + + ScmUrlResolver scmURLResolver = engine.get().getScmURLResolver(layoutName); + URL resolv = scmURLResolver.resolv(parameters); + return resolv; + } + + protected ScmUrlResolver getScmURLResolver(String layoutName) { + ScmUrlResolver result = null; + List<ScmUrlResolver> injectors = getInjectors(); + for (ScmUrlResolver injector : injectors) { + if (layoutName.equals(injector.getLayoutName())) { + result = injector; + break; + } + } + return result; + } + + protected List<ScmUrlResolver> getInjectors() { + if (injectors == null) { + injectors = new ArrayList<ScmUrlResolver>(); + for (ScmUrlResolver injector : + ServiceLoader.load(ScmUrlResolver.class)) { + injectors.add(injector); + } + } + return injectors; + } +} Added: trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverDefaultImpl.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverDefaultImpl.java (rev 0) +++ trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverDefaultImpl.java 2011-08-01 16:07:34 UTC (rev 196) @@ -0,0 +1,34 @@ +package org.nuiton.scmwebeditor.urlResolver.impl; + +import java.io.IOException; +import java.net.URL; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.nuiton.scmwebeditor.urlResolver.ScmUrlResolver; + +public class ScmUrlResolverDefaultImpl implements ScmUrlResolver { + + public static final String DEFAULT_NAME = "default"; + + public static final String PARAMETER_ADDRESS = "address"; + + @Override + public String getLayoutName() { + return DEFAULT_NAME; + } + + @Override + public URL resolv(Map<String, String> parameters) throws IOException, IllegalArgumentException { + String result = parameters.get(PARAMETER_ADDRESS); + if (StringUtils.isEmpty(result)) { + throw new IllegalArgumentException( + "Layout " + DEFAULT_NAME + " requires a parameter '" + + PARAMETER_ADDRESS + "'"); + } + return new URL(result); + } + +} + + Added: trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenDocImpl.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenDocImpl.java (rev 0) +++ trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenDocImpl.java 2011-08-01 16:07:34 UTC (rev 196) @@ -0,0 +1,27 @@ +package org.nuiton.scmwebeditor.urlResolver.impl; + +import java.io.IOException; +import java.net.URL; +import java.util.Map; + +import org.nuiton.scmwebeditor.urlResolver.ScmUrlResolver; + +public class ScmUrlResolverMavenDocImpl implements ScmUrlResolver { + + @Override + public String getLayoutName() { + // TODO Auto-generated method stub + return null; + } + + @Override + public URL resolv(Map<String, String> parameters) throws IOException, IllegalArgumentException { + // TODO Auto-generated method stub + + //si local = defaultlocal > rien + //si local != defaultlocal > local + + return null; + } + +} Added: trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenSiteXmlImpl.java =================================================================== --- trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenSiteXmlImpl.java (rev 0) +++ trunk/src/main/java/org/nuiton/scmwebeditor/urlResolver/impl/ScmUrlResolverMavenSiteXmlImpl.java 2011-08-01 16:07:34 UTC (rev 196) @@ -0,0 +1,42 @@ +package org.nuiton.scmwebeditor.urlResolver.impl; + +import java.io.IOException; +import java.net.URL; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.nuiton.scmwebeditor.urlResolver.ScmUrlResolver; + +public class ScmUrlResolverMavenSiteXmlImpl implements ScmUrlResolver { + + public static final String MAVEN_SITE_XML_NAME = "maven-site.xml"; + + public static final String PARAMETER_LOCAL = "svn.locale"; + public static final String PARAMETER_DEFAULT_LOCAL = "svn.default.local"; + public static final String PARAMETER_SVN_ROOT = "svn.root"; + + + + @Override + public String getLayoutName() { + return MAVEN_SITE_XML_NAME; + } + + @Override + public URL resolv(Map<String, String> parameters) throws IOException, IllegalArgumentException { + String local = parameters.get(PARAMETER_LOCAL); + String DefaultLocal = parameters.get(PARAMETER_DEFAULT_LOCAL); + String svnRoot = parameters.get(PARAMETER_SVN_ROOT); + + if (StringUtils.isEmpty(svnRoot) || StringUtils.isEmpty(local) || StringUtils.isEmpty(DefaultLocal) ) { + throw new IllegalArgumentException( + "Layout " + MAVEN_SITE_XML_NAME + " requires three parameters '" + + PARAMETER_LOCAL + "', '"+PARAMETER_DEFAULT_LOCAL+"', '"+PARAMETER_SVN_ROOT+"'"); + } + + + + return new URL(svnRoot+"/src/site/site_fr.xml"); + } + +} Added: trunk/src/main/resources/META-INF/services/org.nuiton.scmwebeditor.urlResolver.ScmUrlResolver =================================================================== --- trunk/src/main/resources/META-INF/services/org.nuiton.scmwebeditor.urlResolver.ScmUrlResolver (rev 0) +++ trunk/src/main/resources/META-INF/services/org.nuiton.scmwebeditor.urlResolver.ScmUrlResolver 2011-08-01 16:07:34 UTC (rev 196) @@ -0,0 +1,3 @@ +org.nuiton.scmwebeditor.urlResolver.impl.ScmUrlResolverDefaultImpl +org.nuiton.scmwebeditor.urlResolver.impl.ScmUrlResolverMavenSiteXmlImpl +org.nuiton.scmwebeditor.urlResolver.impl.ScmUrlResolverMavenDocImpl \ No newline at end of file Modified: trunk/src/main/webapp/WEB-INF/content/outConnection.jsp =================================================================== --- trunk/src/main/webapp/WEB-INF/content/outConnection.jsp 2011-08-01 08:10:25 UTC (rev 195) +++ trunk/src/main/webapp/WEB-INF/content/outConnection.jsp 2011-08-01 16:07:34 UTC (rev 196) @@ -46,7 +46,7 @@ > </sj:submit> - <input type="submit" name="Save" /> + <input type="submit" /> </p> </center> <div id="htmlcontentSearch" ></div> Added: trunk/src/test/java/org/nuiton/scmwebeditor/BaseActionTest.java =================================================================== --- trunk/src/test/java/org/nuiton/scmwebeditor/BaseActionTest.java (rev 0) +++ trunk/src/test/java/org/nuiton/scmwebeditor/BaseActionTest.java 2011-08-01 16:07:34 UTC (rev 196) @@ -0,0 +1,156 @@ +package org.nuiton.scmwebeditor; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.util.LinkedList; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.nuiton.scmwebeditor.actions.SearchAction; +import org.nuiton.util.FileUtil; +import org.tmatesoft.svn.core.SVNDepth; +import org.tmatesoft.svn.core.SVNException; +import org.tmatesoft.svn.core.SVNProperty; +import org.tmatesoft.svn.core.SVNURL; +import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager; +import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory; +import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions; +import org.tmatesoft.svn.core.io.SVNRepository; +import org.tmatesoft.svn.core.io.SVNRepositoryFactory; +import org.tmatesoft.svn.core.wc.SVNClientManager; +import org.tmatesoft.svn.core.wc.SVNCommitClient; +import org.tmatesoft.svn.core.wc.SVNRevision; +import org.tmatesoft.svn.core.wc.SVNUpdateClient; +import org.tmatesoft.svn.core.wc.SVNWCUtil; +import org.tmatesoft.svn.core.wc.admin.SVNAdminClient; + + + + +public class BaseActionTest { + private static final Log log = LogFactory.getLog(BaseActionTest.class); + + public ISVNAuthenticationManager authManager; + DefaultSVNOptions svnOption; + SVNClientManager manager; + + SVNURL tgtURL = null; + File tgtPath = null; + File checkoutdir = null; + + @Before + public void before() throws Exception { + + try { + FSRepositoryFactory.setup(); + + + this.authManager = SVNWCUtil.createDefaultAuthenticationManager(); + this.svnOption = SVNWCUtil.createDefaultOptions(false); + this.svnOption.setPropertyValue(SVNProperty.EOL_STYLE, SVNProperty.EOL_STYLE_LF); + this.manager = SVNClientManager.newInstance(this.svnOption, this.authManager); + + + SVNAdminClient adminClient = new SVNAdminClient( this.authManager, this.svnOption); + + + tgtPath = FileUtil.createTempDirectory("scmTestSvn_", ""); + tgtURL = adminClient.doCreateRepository( tgtPath, null , true , true ); + + + SVNUpdateClient upclient = new SVNUpdateClient(this.manager, this.svnOption); + + + checkoutdir = FileUtil.createTempDirectory("scmTest_", ""); + + upclient.doCheckout(tgtURL, checkoutdir, + SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY, false); + + File testFile = new File(checkoutdir,"testFile"); + FileUtils.touch(testFile); + + manager.getWCClient().doAdd( testFile , false , false , false , SVNDepth.EMPTY, false, true ); + + File[] tabFile = new File[1]; + tabFile[0] = testFile; + SVNCommitClient commitClient = new SVNCommitClient(this.manager, this.svnOption); + commitClient.doCommit(tabFile, false, "commit Test", null, null, false, true, SVNDepth.FILES); + + } catch ( SVNException e ) { + if(log.isErrorEnabled()) + log.error("Svn erreur in test",e); + } + + + } + + @Test + public void testCheckout() { + File checkoutdirTest = null; + try { + SvnSession svnSess = new SvnSession( + tgtURL.toString(), + "testFile", + null, + null); + + checkoutdirTest = FileUtil.createTempDirectory("scmCheckOutTest_", ""); + + ScmWebEditorBaseAction baseAction = new ScmWebEditorBaseAction(); + baseAction.checkout(svnSess,checkoutdirTest); + } + catch (SVNException e) { + log.error("Erreur SVN in test",e); + } catch (IOException e) { + log.error("Erreur SVN in test",e); + } + + assertTrue(new File(checkoutdirTest,"testFile").exists()); + try { + FileUtils.deleteDirectory(checkoutdirTest); + } catch (IOException e) { + log.error("Erreur when delete temp dir",e); + } + } + + @Test + public void testSearch() { + SearchAction searchAction = new SearchAction(); + LinkedList<String> files = null; + try { + SVNRepository repository = SVNRepositoryFactory.create(tgtURL); + searchAction.setAddress(""); + searchAction.listEntries(repository , ""); + files = new LinkedList<String>(); + files.addAll(searchAction.getFiles()); + System.out.println(files.get(0)); + + } catch (SVNException e) { + log.error("Erreur SVN in test",e); + } + + + assertTrue(files.contains("/testFile")); + + + } + + + @After + public void after() { + try { + FileUtils.deleteDirectory(tgtPath); + FileUtils.deleteDirectory(checkoutdir); + } catch (IOException e) { + log.error("Erreur when delete temp dir",e); + } + + } + +}
participants (1)
-
kcardineaud@users.nuiton.org