Mercurial > dive4elements > framework
comparison artifact-database/src/main/java/de/intevation/artifactdatabase/ProxyArtifact.java @ 58:39fec7d714dc
Added a real artifact proxy class to be more flexible with artifact replacements
in artifact databases.
artifacts/trunk@359 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 23 Nov 2009 11:15:44 +0000 |
parents | |
children | 85d996328c8a |
comparison
equal
deleted
inserted
replaced
57:cf9848c85755 | 58:39fec7d714dc |
---|---|
1 package de.intevation.artifactdatabase; | |
2 | |
3 import org.w3c.dom.Document; | |
4 | |
5 import de.intevation.artifacts.Artifact; | |
6 import de.intevation.artifacts.CallContext; | |
7 import de.intevation.artifacts.ArtifactFactory; | |
8 | |
9 import org.apache.log4j.Logger; | |
10 | |
11 import java.io.IOException; | |
12 import java.io.OutputStream; | |
13 | |
14 /** | |
15 * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) | |
16 */ | |
17 public class ProxyArtifact | |
18 extends DefaultArtifact | |
19 { | |
20 public static final Object REPLACE_PROXY = new Object(); | |
21 | |
22 private static Logger logger = Logger.getLogger(ProxyArtifact.class); | |
23 | |
24 protected Artifact proxied; | |
25 | |
26 public ProxyArtifact() { | |
27 } | |
28 | |
29 public ProxyArtifact(Artifact proxied) { | |
30 this.proxied = proxied; | |
31 } | |
32 | |
33 public Artifact getProxied() { | |
34 return proxied; | |
35 } | |
36 | |
37 public void setProxied(Artifact proxied) { | |
38 this.proxied = proxied; | |
39 } | |
40 | |
41 protected void checkReplacement(CallContext callContext) { | |
42 Object replacement = callContext.getContextValue(REPLACE_PROXY); | |
43 if (replacement instanceof Artifact) { | |
44 setProxied((Artifact)replacement); | |
45 } | |
46 } | |
47 | |
48 public String hash() { | |
49 return proxied != null | |
50 ? proxied.hash() | |
51 : super.hash(); | |
52 } | |
53 | |
54 public Document describe(Document data, CallContext context) { | |
55 try { | |
56 return proxied != null | |
57 ? proxied.describe(data, context) | |
58 : super.describe(data, context); | |
59 } | |
60 finally { | |
61 checkReplacement(context); | |
62 } | |
63 } | |
64 | |
65 public Document advance(Document target, CallContext context) { | |
66 try { | |
67 return proxied != null | |
68 ? proxied.advance(target, context) | |
69 : super.advance(target, context); | |
70 } | |
71 finally { | |
72 checkReplacement(context); | |
73 } | |
74 } | |
75 | |
76 public Document feed(Document target, CallContext context) { | |
77 try { | |
78 return proxied != null | |
79 ? proxied.feed(target, context) | |
80 : super.feed(target, context); | |
81 } | |
82 finally { | |
83 checkReplacement(context); | |
84 } | |
85 } | |
86 | |
87 public void out( | |
88 Document format, | |
89 OutputStream out, | |
90 CallContext context | |
91 ) | |
92 throws IOException | |
93 { | |
94 try { | |
95 if (proxied != null) { | |
96 proxied.out(format, out, context); | |
97 } | |
98 else { | |
99 super.out(format, out, context); | |
100 } | |
101 } | |
102 finally { | |
103 checkReplacement(context); | |
104 } | |
105 } | |
106 | |
107 public void endOfLife(Object context) { | |
108 if (proxied != null) { | |
109 proxied.endOfLife(context); | |
110 } | |
111 else { | |
112 super.endOfLife(context); | |
113 } | |
114 } | |
115 } | |
116 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: |