| 1 | |
|
| 2 | |
|
| 3 | |
|
| 4 | |
|
| 5 | |
|
| 6 | |
|
| 7 | |
|
| 8 | |
|
| 9 | |
|
| 10 | |
|
| 11 | |
|
| 12 | |
|
| 13 | |
|
| 14 | |
|
| 15 | |
|
| 16 | |
package org.seasar.uruma.core.impl; |
| 17 | |
|
| 18 | |
import java.util.ArrayList; |
| 19 | |
import java.util.HashMap; |
| 20 | |
import java.util.List; |
| 21 | |
import java.util.Map; |
| 22 | |
|
| 23 | |
import org.eclipse.jface.window.WindowManager; |
| 24 | |
import org.eclipse.swt.widgets.Shell; |
| 25 | |
import org.seasar.framework.container.annotation.tiger.Binding; |
| 26 | |
import org.seasar.framework.container.annotation.tiger.BindingType; |
| 27 | |
import org.seasar.framework.container.annotation.tiger.Component; |
| 28 | |
import org.seasar.framework.util.AssertionUtil; |
| 29 | |
import org.seasar.uruma.binding.context.ApplicationContextBinder; |
| 30 | |
import org.seasar.uruma.binding.context.ApplicationContextDef; |
| 31 | |
import org.seasar.uruma.component.Template; |
| 32 | |
import org.seasar.uruma.component.jface.WindowComponent; |
| 33 | |
import org.seasar.uruma.context.ApplicationContext; |
| 34 | |
import org.seasar.uruma.context.ContextFactory; |
| 35 | |
import org.seasar.uruma.context.WindowContext; |
| 36 | |
import org.seasar.uruma.context.impl.ApplicationContextImpl; |
| 37 | |
import org.seasar.uruma.core.TemplateManager; |
| 38 | |
import org.seasar.uruma.core.UrumaMessageCodes; |
| 39 | |
import org.seasar.uruma.core.UrumaWindowManager; |
| 40 | |
import org.seasar.uruma.desc.PartActionDesc; |
| 41 | |
import org.seasar.uruma.desc.PartActionDescFactory; |
| 42 | |
import org.seasar.uruma.log.UrumaLogger; |
| 43 | |
import org.seasar.uruma.ui.UrumaApplicationWindow; |
| 44 | |
|
| 45 | |
|
| 46 | |
|
| 47 | |
|
| 48 | |
|
| 49 | |
|
| 50 | |
|
| 51 | |
@Component |
| 52 | 128 | public class UrumaWindowManagerImpl implements UrumaWindowManager { |
| 53 | 4 | private static final UrumaLogger logger = UrumaLogger |
| 54 | |
.getLogger(UrumaWindowManager.class); |
| 55 | |
|
| 56 | 128 | private WindowManager windowManager = new WindowManager(); |
| 57 | |
|
| 58 | 128 | private Map<String, WindowComponent> windowMap = new HashMap<String, WindowComponent>(); |
| 59 | |
|
| 60 | 128 | private List<UrumaApplicationWindow> windowList = new ArrayList<UrumaApplicationWindow>(); |
| 61 | |
|
| 62 | 128 | private TemplateManager templateManager = new TemplateManagerImpl(); |
| 63 | |
|
| 64 | |
|
| 65 | |
|
| 66 | |
|
| 67 | |
@Binding(bindingType = BindingType.MUST) |
| 68 | |
public ApplicationContext applicationContext; |
| 69 | |
|
| 70 | |
|
| 71 | |
|
| 72 | |
|
| 73 | |
public void close(final String windowId) { |
| 74 | 112 | UrumaApplicationWindow window = findWindow(windowId); |
| 75 | 112 | if (window != null) { |
| 76 | 112 | logger.log(UrumaMessageCodes.CLOSE_WINDOW, windowId); |
| 77 | |
|
| 78 | 112 | windowList.remove(window); |
| 79 | 112 | windowMap.remove(windowId); |
| 80 | 112 | ((ApplicationContextImpl) applicationContext) |
| 81 | |
.disposeWindowContext(windowId); |
| 82 | |
|
| 83 | 112 | Shell shell = window.getShell(); |
| 84 | 112 | if (shell != null && !shell.isDisposed()) { |
| 85 | 0 | shell.close(); |
| 86 | |
} |
| 87 | |
} |
| 88 | 112 | } |
| 89 | |
|
| 90 | |
|
| 91 | |
|
| 92 | |
|
| 93 | |
|
| 94 | |
public UrumaApplicationWindow openWindow(final String templatePath, |
| 95 | |
final boolean modal) { |
| 96 | 112 | Template template = loadTemplate(templatePath); |
| 97 | 112 | UrumaApplicationWindow window = createWindow(); |
| 98 | 112 | WindowComponent windowComponent = (WindowComponent) template |
| 99 | |
.getRootComponent(); |
| 100 | 112 | String windowId = windowComponent.getId(); |
| 101 | |
|
| 102 | 112 | WindowContext windowContext = ContextFactory.createWindowContext( |
| 103 | |
applicationContext, windowId); |
| 104 | |
|
| 105 | 112 | logger.log(UrumaMessageCodes.INIT_WINDOW, windowId); |
| 106 | 112 | window.init(windowContext, windowComponent, modal); |
| 107 | |
|
| 108 | 112 | if (modal) { |
| 109 | 112 | window.setBlockOnOpen(true); |
| 110 | |
} |
| 111 | 112 | windowManager.add(window); |
| 112 | |
|
| 113 | 112 | logger.log(UrumaMessageCodes.OPEN_WINDOW, windowId); |
| 114 | 112 | window.open(); |
| 115 | 112 | return window; |
| 116 | |
} |
| 117 | |
|
| 118 | |
protected Template loadTemplate(final String path) { |
| 119 | 112 | Template template = templateManager.getTemplate(path); |
| 120 | 112 | WindowComponent window = (WindowComponent) template.getRootComponent(); |
| 121 | 112 | windowMap.put(window.getId(), window); |
| 122 | 112 | return template; |
| 123 | |
} |
| 124 | |
|
| 125 | |
|
| 126 | |
|
| 127 | |
|
| 128 | |
|
| 129 | |
public int openDialog(final String templatePath, final Object parentAction) { |
| 130 | |
|
| 131 | |
|
| 132 | 0 | if (parentAction != null) { |
| 133 | 0 | PartActionDesc desc = PartActionDescFactory |
| 134 | |
.getPartActionDesc(parentAction.getClass()); |
| 135 | 0 | List<ApplicationContextDef> defs = desc |
| 136 | |
.getApplicationContextDefList(); |
| 137 | 0 | ApplicationContextBinder.exportObjects(parentAction, defs, |
| 138 | |
applicationContext); |
| 139 | |
} |
| 140 | |
|
| 141 | 0 | openWindow(templatePath, true); |
| 142 | |
|
| 143 | |
|
| 144 | 0 | if (parentAction != null) { |
| 145 | 0 | PartActionDesc desc = PartActionDescFactory |
| 146 | |
.getPartActionDesc(parentAction.getClass()); |
| 147 | 0 | List<ApplicationContextDef> defs = desc |
| 148 | |
.getApplicationContextDefList(); |
| 149 | 0 | ApplicationContextBinder.importObjects(parentAction, defs, |
| 150 | |
applicationContext); |
| 151 | |
} |
| 152 | 0 | return 0; |
| 153 | |
} |
| 154 | |
|
| 155 | |
protected UrumaApplicationWindow createWindow() { |
| 156 | 112 | UrumaApplicationWindow window = new UrumaApplicationWindow(this); |
| 157 | 112 | windowList.add(window); |
| 158 | 112 | return window; |
| 159 | |
} |
| 160 | |
|
| 161 | |
protected UrumaApplicationWindow findWindow(final String windowId) { |
| 162 | 112 | AssertionUtil.assertNotNull("windowId", windowId); |
| 163 | |
|
| 164 | 112 | for (UrumaApplicationWindow window : windowList) { |
| 165 | 112 | if (windowId.equals(window.getWindowId())) { |
| 166 | 112 | return window; |
| 167 | |
} |
| 168 | |
} |
| 169 | 0 | return null; |
| 170 | |
} |
| 171 | |
} |