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:

http://dive4elements.wald.intevation.org