Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package ca.carleton.gcrc.couch.command;
  
  import java.io.File;
  import java.util.List;
  import java.util.Stack;
  import java.util.Vector;
 
 
 public class CommandUpdate implements Command {
 
 		,AtlasProperties atlasProperties
 		) throws Exception {
 		
 		CouchDb couchDb = CommandSupport.createCouchDb(gsatlasProperties);
 		
 		DocumentUpdateProcess updateProcess = new DocumentUpdateProcess(couchDb);
 		updateProcess.setListener(l);
 		
 		return updateProcess;
 	}
 
 	public String getCommandString() {
 		return "update";
 	}
 
 	public boolean matchesKeyword(String keyword) {
 		ifgetCommandString().equalsIgnoreCase(keyword) ) {
 			return true;
 		}
 		return false;
 	}
 
 	public boolean requiresAtlasDir() {
 		return true;
 	}
 
 	public void reportHelp(PrintStream ps) {
 		ps.println("Nunaliit2 Atlas Framework - Update Command");
 		ps.println();
 		ps.println("The update command packages the content found in the atlas");
 		ps.println("directory and uploads it to the CouchDB instance associated");
 		ps.println("with the atlas.");
 		ps.println();
 		ps.println("Command Syntax:");
 		ps.println("  nunaliit [<global-options>] update");
 		ps.println();
 		ps.println("Global Options");
 		CommandHelp.reportGlobalSettingAtlasDir(ps);
 	}
 
 	public void runCommand(
 		,Stack<StringargumentStack
 		) throws Exception {
 		
 		File atlasDir = gs.getAtlasDir();
 
 		// Load properties for atlas
 		AtlasProperties atlasProperties = AtlasProperties.fromAtlasDir(atlasDir);
 
 		// Prepare update process
 		DocumentUpdateProcess updateProcess = 
 				CommandUpdate.createDocumentUpdateProcess(gsatlasProperties);
 		
 		// Update site design document
 		try {
 			pushSiteDesign(gsatlasDiratlasPropertiesupdateProcess);
 		} catch(Exception e) {
 			throw new Exception("Unable to upload site design document"e);
 		}
 		
 		// Update atlas design document
 		try {
 			pushAtlasDesign(gsatlasDiratlasPropertiesupdateProcess);
catch(Exception e) {
			throw new Exception("Unable to upload atlas design document"e);
		}
		// Update mobile design document
		try {
			pushMobileDesign(gsatlasDiratlasPropertiesupdateProcess);
catch(Exception e) {
			throw new Exception("Unable to upload mobile design document"e);
		}
		// Update documents from atlas directory
		try {
			File docsDir = new File(atlasDir"docs");
			pushDocuments(gsatlasDiratlasPropertiesupdateProcessdocsDir);
catch(Exception e) {
			throw new Exception("Unable to upload atlas documents"e);
		}
		// Update documents from atlas framework
		try {
			File docsDir = PathComputer.computeInitializeDocsDir(gs.getInstallDir());
			pushDocuments(gsatlasDiratlasPropertiesupdateProcessdocsDir);
			docsDir = PathComputer.computeUpdateDocsDir(gs.getInstallDir());
			pushDocuments(gsatlasDiratlasPropertiesupdateProcessdocsDir);
catch(Exception e) {
			throw new Exception("Unable to upload documents from framework"e);
		}
	}
	private void pushSiteDesign(
		,File atlasDir
		,AtlasProperties atlasProperties
		,DocumentUpdateProcess updateProcess
throws Exception {
		// Create _design/site document...
		Document doc = null;
		{
			List<FSEntrymergedEntries = new Vector<FSEntry>();
			// htdocs from atlas project
			{
				File htdocsDir = new File(atlasDir"htdocs");
				ifhtdocsDir.exists() && htdocsDir.isDirectory() ) {
					FSEntry positionedHtDocs = FSEntryFile.getPositionedFile("d/_attachments"htdocsDir);
					mergedEntries.add(positionedHtDocs);
				}
			}
			// site from atlas project
			{
				File siteDir = new File(atlasDir"site");
				ifsiteDir.exists() && siteDir.isDirectory() ) {
					FSEntry siteEntry = new FSEntryFile(siteDir);
					mergedEntries.add(siteEntry);
				}
			}
			// Create atlas designator
			{
				StringWriter sw = new StringWriter();
				PrintWriter pw = new PrintWriter(sw);
				pw.println("var n2atlas = {");
				pw.println("\tname: \""+atlasProperties.getAtlasName()+"\"");
				pw.println("};");
				pw.println("if( typeof(exports) === 'object' ) {");
				pw.println("\texports.name = n2atlas.name;");
				pw.println("};");
				FSEntry f = FSEntryBuffer.getPositionedBuffer("a/vendor/nunaliit2/atlas.js"sw.toString());
				mergedEntries.add(f);
				f = FSEntryBuffer.getPositionedBuffer("a/_attachments/lib/atlas.js"sw.toString());
				mergedEntries.add(f);
			}
			// Template for _design/site
			{
				File siteDesignDocDir = PathComputer.computeSiteDesignDirgs.getInstallDir() );
				ifsiteDesignDocDir.exists() && siteDesignDocDir.isDirectory() ){
					FSEntry templateDir = new FSEntryFile(siteDesignDocDir);
					mergedEntries.add(templateDir);
else {
					throw new Exception("Unable to find internal template for _design/site");
				}
			}
			FSEntry merged = new FSEntryMerged(mergedEntries);
			doc = DocumentFile.createDocument(merged);
		}
		// Update document
		updateProcess.update(doc);
	}
	private void pushAtlasDesign(
		,File atlasDir
		,AtlasProperties atlasProperties
		,DocumentUpdateProcess updateProcess
throws Exception {
		// Update javascript libraries and CSS libraries, if in development mode
		{
			File installDir = gs.getInstallDir();
			File nunaliitDir = PathComputer.computeNunaliitDir(installDir);
			ifnull != nunaliitDir ) {
				jsProcess.generate(nunaliitDir);
				cssProcess.generate(nunaliitDir);
			}
		}
		// Create _design/atlas document...
		Document doc = null;
		{
			File installDir = gs.getInstallDir();
			List<FSEntryentries = new Vector<FSEntry>();
			// Force identifier
			{
				FSEntry f = FSEntryBuffer.getPositionedBuffer("a/_id.txt""_design/atlas");
				entries.add(f);
			}
			// Create atlas designator
			{
				StringWriter sw = new StringWriter();
				PrintWriter pw = new PrintWriter(sw);
				pw.println("var n2atlas = {");
				pw.println("\tname: \""+atlasProperties.getAtlasName()+"\"");
				pw.println("};");
				pw.println("if( typeof(exports) === 'object' ) {");
				pw.println("\texports.name = n2atlas.name;");
				pw.println("};");
				FSEntry f = FSEntryBuffer.getPositionedBuffer("a/vendor/nunaliit2/atlas.js"sw.toString());
				entries.add(f);
				f = FSEntryBuffer.getPositionedBuffer("a/_attachments/lib/atlas.js"sw.toString());
				entries.add(f);
			}
			// Atlas design template
			{
				File atlasDesignDir = PathComputer.computeAtlasDesignDir(installDir);
				ifnull == atlasDesignDir ) {
					throw new Exception("Can not find _design/atlas template");
else {
					FSEntryFile f = new FSEntryFile(atlasDesignDir);
					entries.add(f);
				}
			}
			// Nunaliit2 javascript library
			{
				File n2Dir = PathComputer.computeNunaliit2JavascriptDir(installDir);
				ifnull == n2Dir ) {
					throw new Exception("Can not find nunaliit2 javascript library");
else {
					// Libraries
					{
						FSEntry f = FSEntryFile.getPositionedFile("a/_attachments/nunaliit2"n2Dir);
						entries.add(f);
					}
					// Vendor file 'n2.couchUtils.js'
					{
						File file = new File(n2Dir,"n2.couchUtils.js");
						FSEntry f = FSEntryFile.getPositionedFile("a/vendor/nunaliit2/n2.couchUtils.js"file);
						entries.add(f);
					}
					// Vendor file 'n2.couchTiles.js'
					{
						File file = new File(n2Dir,"n2.couchTiles.js");
						FSEntry f = FSEntryFile.getPositionedFile("a/vendor/nunaliit2/n2.couchTiles.js"file);
						entries.add(f);
					}
				}
			}
			// External javascript library
			{
				File externalDir = PathComputer.computeExternalJavascriptDir(installDir);
				ifnull == externalDir ) {
					throw new Exception("Can not find external javascript library");
else {
					FSEntry f = FSEntryFile.getPositionedFile("a/_attachments/js-external"externalDir);
					entries.add(f);
				}
			}
			// Install language
			{
				FSEntry f = FSEntryBuffer.getPositionedBuffer("a/language.txt""javascript");
				entries.add(f);
			}
			// Create FSEntry to load document
			FSEntryMerged mergedEntry = new FSEntryMerged(entries);
			doc = DocumentFile.createDocument(mergedEntrymergedEntry);
		}
		// Update document
		updateProcess.update(doc);
	}
	private void pushMobileDesign(
		,File atlasDir
		,AtlasProperties atlasProperties
		,DocumentUpdateProcess updateProcess
throws Exception {
		// Create _design/mobile document...
		Document doc = null;
		{
			File installDir = gs.getInstallDir();
			List<FSEntryentries = new Vector<FSEntry>();
			// Force identifier
			{
				FSEntry f = FSEntryBuffer.getPositionedBuffer("a/_id.txt""_design/mobile");
				entries.add(f);
			}
			// Create atlas designator
			{
				StringWriter sw = new StringWriter();
				PrintWriter pw = new PrintWriter(sw);
				pw.println("var n2atlas = {");
				pw.println("\tname: \""+atlasProperties.getAtlasName()+"\"");
				pw.println("};");
				pw.println("if( typeof(exports) === 'object' ) {");
				pw.println("\texports.name = n2atlas.name;");
				pw.println("};");
				FSEntry f = FSEntryBuffer.getPositionedBuffer("a/vendor/nunaliit2/atlas.js"sw.toString());
				entries.add(f);
			}
			// Nunaliit2 vendor libraries
			{
				File n2Dir = PathComputer.computeNunaliit2JavascriptDir(installDir);
				ifnull == n2Dir ) {
					throw new Exception("Can not find nunaliit2 javascript library");
else {
					// Vendor file 'n2.couchUtils.js'
					{
						File file = new File(n2Dir,"n2.couchUtils.js");
						FSEntry f = FSEntryFile.getPositionedFile("a/vendor/nunaliit2/n2.couchUtils.js"file);
						entries.add(f);
					}
					// Vendor file 'n2.couchTiles.js'
					{
						File file = new File(n2Dir,"n2.couchTiles.js");
						FSEntry f = FSEntryFile.getPositionedFile("a/vendor/nunaliit2/n2.couchTiles.js"file);
						entries.add(f);
					}
				}
			}
			// Mobile design content
			{
				File mobileDesignDir = PathComputer.computeMobileDesignDir(gs.getInstallDir());
				FSEntry f = new FSEntryFile(mobileDesignDir);
				entries.add(f);
			}
			// Create FSEntry to load document
			FSEntryMerged mergedEntry = new FSEntryMerged(entries);
			doc = DocumentFile.createDocument(mergedEntrymergedEntry);
		}
		// Update document
		updateProcess.update(doc);
	}
	private void pushDocuments(
		,File atlasDir
		,AtlasProperties atlasProperties
		,DocumentUpdateProcess updateProcess
		,File docsDir
throws Exception {
		ifdocsDir.exists() && docsDir.isDirectory() ){
			// Iterate over each subdirectory, attempting to
			// load each document
			String[] subDirNames = docsDir.listgs.getFilenameFilter() );
			for(String subDirName : subDirNames){
				File subDir = new File(docsDirsubDirName);
				ifsubDir.exists() && subDir.isDirectory() ) {
					// OK, let's create a document based on this
					Document doc = null;
					try {
						FSEntryFile entry = new FSEntryFile(subDir);
						doc = DocumentFile.createDocument(entry);
catch(Exception e){
						throw new Exception("Unable to read document at: "+subDir.getName(), e);
					}
					// Update document to database
					try {
						updateProcess.update(doc);
catch(Exception e) {
						throw new Exception("Unable to update database with document at: "+subDir.getName(), e);
					}
				}
			}
		}
	}
New to GrepCode? Check out our FAQ X