1 17 18 package org.sape.carbon.core.config.node.link; 19 20 import org.sape.carbon.core.config.Config; 21 import org.sape.carbon.core.config.format.ConfigurationFormatException; 22 import org.sape.carbon.core.config.node.ConfigurationDocument; 23 import org.sape.carbon.core.config.node.Folder; 24 import org.sape.carbon.core.config.node.Node; 25 import org.sape.carbon.core.config.node.NodeCreationException; 26 import org.sape.carbon.core.config.node.NodeIOException; 27 import org.sape.carbon.core.config.node.NodeNotFoundException; 28 29 40 public class GenericLinkNodeFactory implements LinkNodeFactory { 41 42 55 public LinkNode getInstance( 56 Node parent, 57 String name, 58 ConfigurationDocument linkConfigurationDoc) 59 throws NodeCreationException { 60 61 try { 62 63 GenericLinkNodeConfiguration linkConfiguration = 64 (GenericLinkNodeConfiguration) 65 linkConfigurationDoc.readConfiguration(); 66 67 String targetNodeName = linkConfiguration.getTargetNodeName(); 68 69 if (!targetNodeName.startsWith(String.valueOf(Node.DELIMITER))) { 70 targetNodeName = parent.getAbsoluteName() 72 + Node.DELIMITER 73 + targetNodeName; 74 } 75 76 Node targetNode = Config.getInstance().fetchNode(targetNodeName); 77 78 if (targetNode instanceof Folder) { 79 return new FolderLinkImpl(linkConfigurationDoc, 80 (Folder) targetNode); 81 82 } else if (targetNode instanceof ConfigurationDocument) { 83 return new ConfigurationDocumentLinkImpl(linkConfigurationDoc, 84 (ConfigurationDocument) targetNode); 85 86 } else { 87 throw new NodeCreationException( 88 this.getClass(), 89 parent, name, 90 "target node was of an unknown type"); 91 } 92 93 } catch (ClassCastException cce) { 94 throw new NodeCreationException( 95 this.getClass(), 96 parent, name, 97 "linkConfigurationDoc did not contain a " 98 + "GenericLinkNodeConfiguration", cce); 99 100 } catch (NodeIOException nioe) { 101 throw new NodeCreationException( 102 this.getClass(), 103 parent, name, 104 "problem reading GenericLinkNodeConfiguration", nioe); 105 106 } catch (ConfigurationFormatException cfe) { 107 throw new NodeCreationException( 108 this.getClass(), 109 parent, name, 110 "problem reading GenericLinkNodeConfiguration", cfe); 111 112 } catch (NodeNotFoundException nnfe) { 113 throw new NodeCreationException( 114 this.getClass(), 115 parent, name, 116 "target node was not found", nnfe); 117 } 118 } 119 120 } 121 | Popular Tags |