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() {
|