Author: adamw Date: 2005-08-18 14:05:11 -0400 (Thu, 18 Aug 2005) New Revision: 897 Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/ContentManager.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/FileBasedContentManager.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/SvnContentManager.java trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java Log: Repo adding/deleting Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/ContentManager.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/ContentManager.java 2005-08-18 17:43:48 UTC (rev 896) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/ContentManager.java 2005-08-18 18:05:11 UTC (rev 897) @@ -44,6 +44,42 @@ throws IOException; /** + * Adds a new, empty resource to the content manager. + * + * @param parent + * Parent catalogue of the new resource. + * @param name + * Name of the resource to add. + * @throws IOException When the resource exists or there is + * any other content-manager related error. + */ + public abstract void addResource(String parent, String name) + throws IOException; + + /** + * Adds a new, empty catalogue to the content manager. + * + * @param parent + * Parent catalogue of the new catalogue. + * @param name + * Name of the resource to add. + * @throws IOException When the catalogue exists or there is + * any other content-manager related error. + */ + public abstract void addCatalogue(String parent, String name) + throws IOException; + + /** + * Deletes a given resource or catalogue from the content manager. + * + * @param name + * Name of the resource to delete. + * @throws IOException When the resource/catalogue cannot be + * deleted or there is any other content-manager related error. + */ + public abstract void delete(String name) throws IOException; + + /** * Commits a resource (or catalogue) to the repository. * * @param names Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/FileBasedContentManager.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/FileBasedContentManager.java 2005-08-18 17:43:48 UTC (rev 896) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/FileBasedContentManager.java 2005-08-18 18:05:11 UTC (rev 897) @@ -45,6 +45,9 @@ return replaceSeparators(basePath + File.separator + name); } + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#read(java.lang.String) + */ @Override public String read(String name) throws IOException { BufferedReader bf = new BufferedReader(new FileReader( @@ -65,21 +68,33 @@ return ret; } + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#getLength(java.lang.String) + */ @Override public long getLength(String name) { return new File(getSystemFilePath(name)).length(); } + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#getInputStream(java.lang.String) + */ @Override public InputStream getInputStream(String name) throws IOException { return new FileInputStream(getSystemFilePath(name)); } + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#getLastModification(java.lang.String) + */ @Override public long getLastModification(String name) { return new File(getSystemFilePath(name)).lastModified(); } + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#copyResourceToFile(java.lang.String, java.lang.String) + */ @Override public void copyResourceToFile(String name, String destination) throws IOException { // Create channel on the source @@ -97,6 +112,9 @@ dstChannel.close(); } + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#getResourceNames(java.lang.String) + */ @Override public String[] getResourceNames(String catalogue) { String[] ret = new File(getSystemFilePath(catalogue)) @@ -111,6 +129,9 @@ return ret == null ? new String[0] : ret; } + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#getCatalogues(java.lang.String) + */ @Override public String[] getCatalogues(String catalogue) { String[] ret = new File(getSystemFilePath(catalogue)) Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/SvnContentManager.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/SvnContentManager.java 2005-08-18 17:43:48 UTC (rev 896) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/content/SvnContentManager.java 2005-08-18 18:05:11 UTC (rev 897) @@ -30,8 +30,7 @@ public class SvnContentManager extends FileBasedContentManager { private String svnPath; private String localPath; - private String svnUsername; - private String svnPassword; + private SVNClientManager ourClientManager; /** * @param svnPath @@ -50,17 +49,19 @@ // for SVN (over svn and svn+ssh) SVNRepositoryFactoryImpl.setup(); + ISVNOptions options = SVNWCUtil.createDefaultOptions(true); + ourClientManager = + SVNClientManager.newInstance(options, svnUsername, svnPassword); + this.svnPath = svnPath; this.localPath = localPath; - this.svnUsername = svnUsername; - this.svnPassword = svnPassword; } + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#update() + */ + @Override public synchronized void update() { - ISVNOptions options = SVNWCUtil.createDefaultOptions(true); - SVNClientManager ourClientManager = - SVNClientManager.newInstance(options, svnUsername, svnPassword); - try { SVNURL repositoryURL = SVNURL.parseURIEncoded(svnPath); @@ -85,15 +86,14 @@ } } + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#commit(java.lang.String[]) + */ @Override public void commit(String[] names) throws IOException { - ISVNOptions options = SVNWCUtil.createDefaultOptions(true); - SVNClientManager ourClientManager = - SVNClientManager.newInstance(options, svnUsername, svnPassword); - File[] files = new File[names.length]; for (int i=0; i<names.length; i++) - files[i] = new File(localPath+File.separator+names[i]); + files[i] = new File(getSystemFilePath(names[i])); try { ourClientManager.getCommitClient().doCommit(files, false, @@ -104,6 +104,9 @@ } } + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#write(java.lang.String, java.lang.String, boolean) + */ @Override public void write(String name, String content, boolean commit) throws IOException { @@ -115,4 +118,102 @@ if (commit) commit(name); } + + /** + * Checks if the given name is a valid name for a new resource + * or catalogue, i.e. if it doesn't contain a \ or /, which would + * add a new directory to the fs. + * @param name Name to check. + * @return True iff the name is valid. + */ + private boolean checkNewName(String name) { + if (((name.indexOf('/') != -1) || ((name.indexOf('\\')) != -1))) + return false; + + return true; + } + + /** + * Common operations for adding resources/catalogues. + * @param file File to add to svn repository. + * @throws IOException + */ + private void addGeneric(File file) throws IOException { + // And adding the file. + try { + ourClientManager.getWCClient().doAdd(file, true, false, false, false); + } catch (SVNException e) { + throw new IOException("SVN error while adding the new file"); + } + } + + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#addResource(java.lang.String, java.lang.String) + */ + @Override + public void addResource(String parent, String name) throws IOException { + // Checking the name. + if (!checkNewName(name)) + throw new IOException("Invalid new resource name."); + + // Trying to create a new empty file. + File file = new File(getSystemFilePath(parent + "/" + name)); + if (!file.createNewFile()) + throw new IOException("Resource already exists."); + + addGeneric(file); + } + + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#addCatalogue(java.lang.String, java.lang.String) + */ + @Override + public void addCatalogue(String parent, String name) throws IOException { + // Checking the name. + if (!checkNewName(name)) + throw new IOException("Invalid new catalogue name."); + + // Trying to create a new empty file. + File file = new File(getSystemFilePath(parent + "/" + name)); + if (!file.mkdir()) + throw new IOException("Catalogue already exists."); + + addGeneric(file); + } + + /* (non-Javadoc) + * @see org.jboss.forge.common.content.ContentManager#delete(java.lang.String) + */ + @Override + public void delete(String name) throws IOException { + File file = new File(getSystemFilePath(name)); + if (!file.canWrite()) + throw new IOException("Can't delete resource/catalogue"); + + // And adding the file. + try { + ourClientManager.getWCClient().doDelete(file, true, false); + } catch (SVNException e) { + throw new IOException("SVN error while deleting the given " + + "resource/catalogue."); + } + } + + public static void main(String[] argv) throws IOException { + ContentManager cm = new SvnContentManager( + "https://cms.labs.jboss.com/trunk/forge/portal-content", + "/home/adamw/jboss/content/trunk/forge/portal-content", + "jbf...@jb...", + "rO@B5oPfff"); + + System.out.println("Adding cat"); + cm.addCatalogue("", "zzz"); + System.out.println("Adding res"); + cm.addResource("zzz", "aaa"); + cm.write("zzz/aaa", "bbb", false); + cm.commit("zzz"); + System.out.println("Deleting res"); + cm.delete("zzz"); + cm.commit("zzz"); + } } Modified: trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java =================================================================== --- trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java 2005-08-18 17:43:48 UTC (rev 896) +++ trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java 2005-08-18 18:05:11 UTC (rev 897) @@ -127,14 +127,12 @@ } public void create() throws Exception { - System.out.println("0"); } @EJB private ForgeTimerLocal timer; public void start() throws Exception { - System.out.println("1"); forgeHelper = new ForgeHelper(); // Getting a root-relative content manager. @@ -145,7 +143,6 @@ nodeWatchers = Collections.synchronizedMap( new HashMap<CacheKey, NodeWatcher>()); toCommit = new HashSet<String>(); - System.out.println("2"); // First repo update & possible checkout. try { cm.update(); @@ -153,17 +150,14 @@ log.warn(e); e.printStackTrace(); } - System.out.println("3"); // Adding blog updater node watcher. addNodeWatcher(null, BlogUpdaterNodeWatcher.class.getName(), new BlogUpdaterNodeWatcher()); // Setting the default timer interval. timerInterval = DEFAULT_TIMER_INTERVAL; - System.out.println("4"); // And starting the timer. timer.scheduleTimer(DEFAULT_TIMER_INTERVAL); - System.out.println("5"); } public void stop() { |