Changeset 88 for java/main/src/main/java/com/framsticks/gui/Browser.java
- Timestamp:
- 06/30/13 12:48:20 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/gui/Browser.java
r85 r88 2 2 3 3 import com.framsticks.core.*; 4 import com.framsticks.observers.Endpoint; 5 import com.framsticks.observers.Observer; 4 import com.framsticks.params.annotations.AutoAppendAnnotation; 5 import com.framsticks.params.annotations.FramsClassAnnotation; 6 import com.framsticks.params.annotations.ParamAnnotation; 6 7 import com.framsticks.util.Logging; 8 import com.framsticks.util.dispatching.AbstractJoinable; 7 9 import com.framsticks.util.dispatching.Dispatcher; 10 import com.framsticks.util.dispatching.Dispatching; 8 11 import com.framsticks.util.dispatching.Future; 9 10 import org.apache.commons.configuration.Configuration; 11 import org.apache.commons.lang.ArrayUtils; 12 import com.framsticks.util.dispatching.Joinable; 13 import com.framsticks.util.dispatching.JoinableCollection; 14 import com.framsticks.util.dispatching.JoinableParent; 15 import com.framsticks.util.dispatching.JoinableState; 16 17 import javax.swing.*; 18 12 19 import org.apache.log4j.Logger; 13 14 import javax.swing.*;15 20 16 21 import java.awt.Dimension; 17 22 import java.util.ArrayList; 18 import java.util.HashSet;19 23 import java.util.List; 20 import java.util. Set;24 import java.util.Map; 21 25 import com.framsticks.util.dispatching.RunAt; 22 26 … … 24 28 * @author Piotr Sniegowski 25 29 */ 26 public class Browser extends Observer { 30 @FramsClassAnnotation 31 public class Browser extends AbstractJoinable implements Dispatcher<Browser>, Entity, JoinableParent { 27 32 28 33 private static final Logger log = Logger.getLogger(Browser.class.getName()); 29 34 30 protected final Set<Frame> frames = new HashSet<Frame>(); 35 protected JoinableCollection<Frame> frames = new JoinableCollection<Frame>().setObservableName("frames"); 36 protected JoinableCollection<Instance> instances = new JoinableCollection<Instance>().setObservableName("instances"); 37 31 38 protected MainFrame mainFrame; 32 39 public List<PanelProvider> panelProviders = new ArrayList<PanelProvider>(); 33 40 protected Dimension defaultFrameDimension; 34 41 42 String name; 43 35 44 public void addFrame(Frame frame) { 36 45 frames.add(frame); … … 38 47 39 48 public Browser() { 49 setName("browser"); 40 50 JPopupMenu.setDefaultLightWeightPopupEnabled(false); 41 51 addPanelProvider(new StandardPanelProvider()); 42 } 43 44 @Override 45 public void configure(Configuration config) { 46 super.configure(config); 47 48 defaultFrameDimension = new Dimension(config.getInteger("size.width", 1000), config.getInteger("size.height", 500)); 49 50 for (String name : config.getStringArray("panel_providers")) { 51 try { 52 Class<?> c = Class.forName(name); 53 if (ArrayUtils.indexOf(c.getInterfaces(), PanelProvider.class) == -1) { 54 continue; 55 } 56 PanelProvider p = (PanelProvider)c.newInstance(); 57 addPanelProvider(p); 58 } catch (Exception e) { 59 log.error("failed to load PanelProvider " + name + ": " + e); 60 } 61 } 62 63 // for (final String path : config.getStringArray("resolve_paths")) { 64 // invokeLater() 65 // autoResolvePath(path, new Future<Path>() { 66 // @Override 67 // public void result(Path p, Exception e) { 68 // Logging.log(log, "auto resolve path", path, e); 69 // } 70 // }); 71 // } 72 } 73 52 53 mainFrame = new MainFrame(Browser.this); 54 addFrame(mainFrame); 55 } 56 57 @AutoAppendAnnotation 74 58 public void addPanelProvider(PanelProvider panelProvider) { 75 59 log.debug("added panel provider of type: " + panelProvider.getClass().getCanonicalName()); … … 77 61 } 78 62 63 @AutoAppendAnnotation 64 public void addInstance(Instance instance) { 65 log.info("adding instance: " + instance); 66 instances.add(instance); 67 } 68 79 69 public void autoResolvePath(final String path, final Future<Path> future) { 80 final Instance i = endpoints.get("localhost").getInstance();70 final Instance i = instances.get("localhost"); 81 71 i.invokeLater(new RunAt<Instance>() { 82 72 @Override … … 110 100 } 111 101 112 @Override 113 public void run() { 114 super.run(); 115 102 protected void firstTask() { 116 103 assert isActive(); 104 log.info("executing first task"); 117 105 118 106 try { … … 135 123 javax.swing.JFrame.setDefaultLookAndFeelDecorated(true); 136 124 137 mainFrame = new MainFrame(Browser.this);138 addFrame(mainFrame);139 125 140 126 for (Frame f : frames) { … … 142 128 } 143 129 144 for (final Endpoint e : getEndpoints().values()) {145 e.invokeLater(new RunAt<Instance>() {130 for (final Instance i : instances) { 131 i.invokeLater(new RunAt<Instance>() { 146 132 @Override 147 133 public void run() { 148 final Path p = e.getInstance().getRootPath();134 final Path p = i.getRootPath(); 149 135 invokeLater(new RunAt<Browser>() { 150 136 @Override 151 137 public void run() { 152 mainFrame.addRootPath( (BrowserEndpoint) e,p);138 mainFrame.addRootPath(p); 153 139 } 154 140 }); … … 158 144 159 145 for (Frame f : frames) { 160 f. setVisible(true);146 f.getSwing().setVisible(true); 161 147 } 162 148 … … 169 155 //assert instance.isActive(); 170 156 171 172 /* 173 final TreeNode parentTreeNode = (TreeNode) child.getParent().getUserObject(); 174 if (parentTreeNode == null) { 175 Dispatching.invokeDispatch(this, manager, new Runnable() { 176 @Override 177 public void run() { 178 createTreeNodeForChild(child); 179 } 180 }); 181 return; 182 } 183 log.debug(child.getClass().getSimpleName() + " created: " + child); 184 185 186 invokeLater(new Runnable() { 157 /* 158 final TreeNode parentTreeNode = (TreeNode) child.getParent().getUserObject(); 159 if (parentTreeNode == null) { 160 Dispatching.invokeDispatch(this, manager, new Runnable() { 161 @Override 162 public void run() { 163 createTreeNodeForChild(child); 164 } 165 }); 166 return; 167 } 168 log.debug(child.getClass().getSimpleName() + " created: " + child); 169 170 171 invokeLater(new Runnable() { 172 @Override 173 public void run() { 174 parentTreeNode.getOrCreateChildTreeNodeFor(child); 175 } 176 }); 177 */ 178 } 179 180 @Override 181 protected void joinableStart() { 182 Dispatching.use(frames, this); 183 Dispatching.use(instances, this); 184 185 invokeLater(new RunAt<Browser>() { 187 186 @Override 188 187 public void run() { 189 parentTreeNode.getOrCreateChildTreeNodeFor(child);188 firstTask(); 190 189 } 191 190 }); 192 */ 193 } 194 195 196 @Override 197 protected Endpoint createEndpoint() { 198 return new BrowserEndpoint(); 199 } 200 201 @Override 202 public Dispatcher<Entity> createDefaultDispatcher() { 203 return SwingDispatcher.getInstance(); 191 } 192 193 /** 194 * @return the instances 195 */ 196 public Map<String, Instance> getInstances() { 197 return instances.getObservables(); 204 198 } 205 199 … … 211 205 } 212 206 207 /** 208 * @return the name 209 */ 210 @ParamAnnotation 211 public String getName() { 212 return name; 213 } 214 215 /** 216 * @param name the name to set 217 */ 218 @ParamAnnotation 219 public void setName(String name) { 220 this.name = name; 221 } 222 223 @Override 224 public boolean isActive() { 225 return SwingDispatcher.getInstance().isActive(); 226 } 227 228 @Override 229 public void invokeLater(RunAt<? extends Browser> runnable) { 230 SwingDispatcher.getInstance().invokeLater(runnable); 231 } 232 233 @Override 234 protected void joinableJoin() throws InterruptedException { 235 Dispatching.join(frames); 236 Dispatching.join(instances); 237 // super.join(); 238 } 239 240 @Override 241 protected void joinableInterrupt() { 242 Dispatching.drop(frames, this); 243 Dispatching.drop(instances, this); 244 } 245 246 @Override 247 public void childChangedState(Joinable joinable, JoinableState state) { 248 if (joinable == frames) { 249 proceedToState(state); 250 } 251 252 } 253 254 @Override 255 protected void joinableFinish() { 256 // TODO Auto-generated method stub 257 258 } 259 260 @Override 261 public String toString() { 262 return getName(); 263 } 264 265 266 // @Override 267 // public boolean isDone() { 268 // return frames.isDone() && instances.isDone(); 269 // } 213 270 }
Note: See TracChangeset
for help on using the changeset viewer.