1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.uruma.rcp.configuration;
17
18 import java.io.ByteArrayInputStream;
19 import java.io.StringWriter;
20 import java.io.UnsupportedEncodingException;
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import org.eclipse.core.internal.registry.ExtensionRegistry;
25 import org.eclipse.core.runtime.IContributor;
26 import org.eclipse.core.runtime.IExtensionRegistry;
27 import org.eclipse.core.runtime.Platform;
28 import org.osgi.framework.Bundle;
29 import org.seasar.uruma.core.UrumaMessageCodes;
30 import org.seasar.uruma.log.UrumaLogger;
31 import org.seasar.uruma.rcp.configuration.extension.MenusBuilder;
32 import org.seasar.uruma.rcp.configuration.extension.PerspectivesBuilder;
33 import org.seasar.uruma.rcp.configuration.extension.ViewsBuilder;
34
35
36
37
38
39
40 public class ContributionBuilder {
41 private static final int BUFFER_SIZE = 4096;
42
43 private static final UrumaLogger logger = UrumaLogger
44 .getLogger(ContributionBuilder.class);
45
46 private static final List<ExtensionBuilder> builders = new ArrayList<ExtensionBuilder>();
47
48 private static String content;
49
50 static {
51 builders.add(new MenusBuilder());
52 builders.add(new ViewsBuilder());
53 builders.add(new PerspectivesBuilder());
54 }
55
56 private ContributionBuilder() {
57
58 }
59
60
61
62
63
64
65
66
67
68 public static void build(final IContributor contributor,
69 final List<Extension> extensions) {
70 buildExtensions(extensions);
71
72 IExtensionRegistry registry = Platform.getExtensionRegistry();
73 StringWriter writer = new StringWriter(BUFFER_SIZE);
74
75 writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
76 writer.write("<?eclipse version=\"3.2\"?>\n");
77 writer.write("<plugin>\n");
78
79 for (Extension extension : extensions) {
80 extension.setLevel(1);
81 extension.writeConfiguration(writer);
82 }
83
84 writer.write("</plugin>\n");
85
86 content = writer.getBuffer().toString();
87
88 if (logger.isTraceEnabled()) {
89 logger.log(UrumaMessageCodes.CREATE_CONTRIBUTION, content);
90 }
91
92 ByteArrayInputStream is = null;
93 try {
94 is = new ByteArrayInputStream(content.getBytes("UTF-8"));
95 } catch (UnsupportedEncodingException ignore) {
96 }
97
98 Object token = ((ExtensionRegistry) registry).getTemporaryUserToken();
99 registry.addContribution(is, contributor, false, null, null, token);
100 }
101
102 protected static void buildExtensions(final List<Extension> extensions) {
103 for (ExtensionBuilder builder : builders) {
104 Extension[] extensionArray = builder.buildExtension();
105 for (Extension extension : extensionArray) {
106 extensions.add(extension);
107 }
108 }
109 }
110
111
112
113
114
115
116 public static String getContent() {
117 return content;
118 }
119 }