View Javadoc
1 /* 2 * Copyright (c) 2003 3 * Information Desire GmbH 4 * All rights reserved. 5 */ 6 package com.infodesire.infobit.external.impl; 7 8 import com.infodesire.infobit.InfobitException; 9 import com.infodesire.infobit.InfobitSecurityException; 10 11 import com.infodesire.infobit.data.Infobit; 12 13 import org.apache.commons.logging.Log; 14 import org.apache.commons.logging.LogFactory; 15 16 import java.util.Collection; 17 import java.util.HashSet; 18 import java.util.HashMap; 19 import java.util.Map; 20 import java.util.Set; 21 import java.util.TreeMap; 22 23 /*** 24 * This class represents a script version in the dependency graph of content and 25 * nodes. 26 * 27 * @author peter2 28 * @created 1. September 2003 29 * @version $Revision: 1.1 $ 30 */ 31 class ScriptNode extends ContentNode { 32 33 private final static Log _log = LogFactory.getLog(ScriptNode.class); 34 35 /*** 36 * The name of the template infobit 37 */ 38 private InfobitNode _templateNode; 39 40 /*** 41 * The template infobit, to be set on resolution 42 */ 43 private Infobit _template; 44 45 /*** 46 * Maps reference names to buffer representation of target infobits. Map of 47 * <code>String</code> to {@link InfobitNode}. 48 */ 49 private Map _linkedNodes = new HashMap(); 50 51 /*** 52 * Inversion of {@link _linkedNodes}, maps <code>String</code> to {@link 53 * InfobitNode}. 54 */ 55 private Map _linkedKeys = new HashMap(); 56 57 /*** 58 * Resolution of referenced infobit nodes. Maps every key of {@link 59 * #_linkedNodes} to the bound {@link InfobitNode}s. 60 */ 61 private Map _links = new TreeMap(); 62 63 64 /*** 65 * Gets the root dependency and the dependcy implied by the the template. 66 * 67 * @return The Dependencies value 68 */ 69 Collection getDependencies() { 70 if (_templateNode == null) { 71 String m = "unresolved template dependency: " + 72 _templateNode.getName(); 73 _log.fatal(m); 74 throw new IllegalStateException(m); 75 } 76 77 Collection dep = super.getDependencies(); 78 dep.add(_templateNode); 79 dep.addAll(_linkedNodes.values()); 80 81 return dep; 82 } 83 84 85 /*** 86 * Defines the template dependency. 87 * 88 * @param node The new TemplateNode value 89 */ 90 void setTemplateNode(InfobitNode node) { 91 _templateNode = node; 92 } 93 94 95 /*** 96 * Adds a link to the script. The link target is treated as a dependency to 97 * resolve. 98 * 99 * @param key The key which <code>value</code> is linked to 100 * @param value The value linked to <code>key</code> 101 */ 102 void addLink(String key, InfobitNode value) { 103 _linkedNodes.put(key, value); 104 _linkedKeys.put(value, key); 105 } 106 107 108 /*** 109 * Resolves the root and the template dependency. 110 * 111 * @param dependency Description of Parameter 112 * @param value Description of Parameter 113 */ 114 void resolveDependency(BufferNode dependency, Object value) { 115 if (dependency == _templateNode) { 116 _template = (Infobit) value; 117 } 118 else if (_linkedNodes.values().contains(dependency)) { 119 InfobitNode node = (InfobitNode) dependency; 120 String key = (String) _linkedKeys.get(node); 121 Infobit resolved = (Infobit) value; 122 _links.put(key, resolved); 123 } 124 else { 125 super.resolveDependency(dependency, value); 126 } 127 } 128 129 130 /*** 131 * DOCUMENT METHOD 132 * 133 * @return The created version 134 * @exception InfobitException Description of Exception 135 * @exception InfobitSecurityException Description of Exception 136 */ 137 Object persistBuffer() throws InfobitException, InfobitSecurityException { 138 if (_infobit == null) { 139 String m = "Unresolved infobit dependency"; 140 _log.fatal(m); 141 throw new IllegalStateException(m); 142 } 143 144 if (_links.size() < _linkedNodes.size()) { 145 String m = "Unresolved link dependencies"; 146 _log.fatal(m); 147 throw new IllegalStateException(m); 148 } 149 150 _manager.createScript(_infobit, _name, _template, _links, _keywords); 151 152 return resolveVersion(); 153 } 154 155 }

This page was automatically generated by Maven