[Yanel-commits] rev 57579 - in public/yanel/trunk/src/build: java/org/wyona/yanel/ant targets

ioannis at wyona.com ioannis at wyona.com
Wed Mar 30 18:57:28 CEST 2011


Author: ioannis
Date: 2011-03-30 18:57:27 +0200 (Wed, 30 Mar 2011)
New Revision: 57579

Modified:
   public/yanel/trunk/src/build/java/org/wyona/yanel/ant/AddRealmTask.java
   public/yanel/trunk/src/build/targets/add-third-party-realm.xml
Log:
Implemented the add-realm task

Modified: public/yanel/trunk/src/build/java/org/wyona/yanel/ant/AddRealmTask.java
===================================================================
--- public/yanel/trunk/src/build/java/org/wyona/yanel/ant/AddRealmTask.java	2011-03-30 16:46:49 UTC (rev 57578)
+++ public/yanel/trunk/src/build/java/org/wyona/yanel/ant/AddRealmTask.java	2011-03-30 16:57:27 UTC (rev 57579)
@@ -1,30 +1,81 @@
 /*
- *
+ * Adding a new (third party) realm to a Yanel instance
  */
 package org.wyona.yanel.ant;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.types.Path;
+import org.apache.commons.io.FileUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.wyona.commons.xml.XMLHelper;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.w3c.dom.Document;
+
 /**
  * Add a third party realm to the local realm configuration
  */
 public class AddRealmTask extends Task {
 
-    private Path newRealmConfig;
+	private Path newRealmConfig;
     private String newRealmMountPoint;
     private String newRealmId;
-
-    /**
-     *
-     */
+    private Path defaultRealmsXml;
+    private Path localRealmsXml;
+    
     public void execute() throws BuildException {
-        log("Not implemented yet!");
-        log("New (third party) realm configuration: " + newRealmConfig);
+    	log("New (third party) realm configuration: " + newRealmConfig);
         log("New (third party) realm mount point: " + newRealmMountPoint);
         log("New (third party) realm id: " + newRealmId);
-        //RealmManager rm = new RealmManager();
+        
+        log("defaultRealmsXml: " + defaultRealmsXml);
+        log("localRealmsXml: " + localRealmsXml);
+        
+        if (!new File(localRealmsXml.toString()).exists()) {
+        	try {
+        		FileUtils.copyFile(new File(defaultRealmsXml.toString()), new File(localRealmsXml.toString()));
+        	} catch (IOException e) {
+        		log("Exception: " + e.getMessage());
+        	}
+        }
+        
+        try {
+        	Document doc = XMLHelper.readDocument(new FileInputStream(new File(localRealmsXml.toString())));
+        	Element rootElement = doc.getDocumentElement();
+        	// TODO check if realm with this id already exists
+              	
+        	Element realm = doc.createElementNS(rootElement.getNamespaceURI(), "realm");
+        	realm.setAttribute("id", newRealmId);
+        	realm.setAttribute("mount-point", newRealmMountPoint);
+        	realm.appendChild(doc.createTextNode("\n  ")); // formatting
+        	
+        	Element config = doc.createElementNS(rootElement.getNamespaceURI(), "config");
+        	String configSrcAttribute = newRealmConfig.toString();
+        	if (!configSrcAttribute.endsWith("/")) {
+        		configSrcAttribute += "/";
+        	}
+        	config.setAttribute("src", configSrcAttribute);
+        	      	
+        	realm.appendChild(config);
+        	realm.appendChild(doc.createTextNode("\n")); // formatting
+        	rootElement.appendChild(doc.createComment("\nAnt Generated Entry Using:\n./build.sh add-realm -Drealm-config=" + newRealmConfig + " -Drealm-mount-point=" + newRealmMountPoint + " -Drealm-id=" + newRealmId + "\n"));
+        	rootElement.appendChild(doc.createTextNode("\n")); // formatting
+        	rootElement.appendChild(realm);
+        	rootElement.appendChild(doc.createTextNode("\n\n")); // formatting
+
+        	log("Write new file: " + localRealmsXml);
+        	XMLHelper.writeDocument(doc, new FileOutputStream(localRealmsXml.toString()));
+        	        	
+        } catch (Exception e) {
+        	log("Exception: " + e.getMessage());
+        }
+
     }
 
     /**
@@ -47,8 +98,19 @@
     public void setNewRealmId(String newRealmId) {
         this.newRealmId = newRealmId;
     }
+    
+    /**
+     * Ant file task attribute default realms.xml path
+     */
+    public void setDefaultRealmsXml(Path defaultRealmsXml) {
+        this.defaultRealmsXml = defaultRealmsXml;
+    }
+    
+    /**
+     * Ant file task attribute local realms.xml path
+     */
+    public void setLocalRealmsXml(Path localRealmsXml) {
+        this.localRealmsXml = localRealmsXml;
+    }
   
 }
-
-
-// TODO in the execude methods check whethere or not the directory exists
\ No newline at end of file

Modified: public/yanel/trunk/src/build/targets/add-third-party-realm.xml
===================================================================
--- public/yanel/trunk/src/build/targets/add-third-party-realm.xml	2011-03-30 16:46:49 UTC (rev 57578)
+++ public/yanel/trunk/src/build/targets/add-third-party-realm.xml	2011-03-30 16:57:27 UTC (rev 57579)
@@ -6,16 +6,20 @@
   <target name="add-realm" description="Add third party realm" depends="init, build-add-realm-task">
     <echo>Add third party realm ${realm-config} to local config ${local.config.home}</echo>
 
-    <taskdef name="addrealm" classpath="${yanel.source.home}/build/classes" classname="org.wyona.yanel.ant.AddRealmTask"/>
+    <taskdef name="addrealm" classpath="${yanel.source.home}/build/classes" classname="org.wyona.yanel.ant.AddRealmTask">
+      <classpath refid="classpath.taskdef.merge-resource-types-configs"/>
+      <!--TODO use add-third-party-realm classpath -->
+    </taskdef>
 
-    <addrealm newrealmconfig="${realm-config}" newrealmmountpoint="${realm-mount-point}" newrealmid="${realm-id}"/>
+    <addrealm newrealmconfig="${realm-config}" newrealmmountpoint="${realm-mount-point}" newrealmid="${realm-id}" defaultrealmsxml="${yanel.source.home}/conf/realms.xml" localrealmsxml="${local.config.home}/local.realms.xml"/>
   	 	
   </target>
 
   <target name="build-add-realm-task" depends="init, compile-core">
     <javac srcdir="${yanel.source.home}/src/build/java"
            encoding="${javac.encoding}"
-           destdir="${yanel.source.home}/build/classes"
-    />
+           destdir="${yanel.source.home}/build/classes">
+     <classpath refid="classpath.compile"/>
+   </javac>
   </target>
 </project>



More information about the Yanel-commits mailing list