1 /*******************************************************************************
2  * Copyright (c) 2015 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  ******************************************************************************/
14 
15 package org.eclipse.ui.internal.e4.migration;
16 
17 import java.util.ArrayList;
18 import java.util.List;
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.graphics.Rectangle;
21 import org.eclipse.ui.IMemento;
22 import org.eclipse.ui.XMLMemento;
23 import org.eclipse.ui.internal.IWorkbenchConstants;
24 
25 public class WindowReader extends MementoReader {
26 	public static final String STATUS_LINE_MANAGER_ID = "org.eclipse.jface.action.StatusLineManager"; //$NON-NLS-1$
27 
WindowReader(IMemento memento)28 	WindowReader(IMemento memento) {
29 		super(memento);
30 	}
31 
getBounds()32 	Rectangle getBounds() {
33 		Rectangle windowBounds = new Rectangle(0, 0, 0, 0);
34 		Integer bigInt = getInteger(IWorkbenchConstants.TAG_X);
35 		windowBounds.x = bigInt == null ? 0 : bigInt.intValue();
36 		bigInt = getInteger(IWorkbenchConstants.TAG_Y);
37 		windowBounds.y = bigInt == null ? 0 : bigInt.intValue();
38 		bigInt = getInteger(IWorkbenchConstants.TAG_WIDTH);
39 		windowBounds.width = bigInt == null ? 0 : bigInt.intValue();
40 		bigInt = getInteger(IWorkbenchConstants.TAG_HEIGHT);
41 		windowBounds.height = bigInt == null ? 0 : bigInt.intValue();
42 		return windowBounds;
43 	}
44 
isMaximized()45 	boolean isMaximized() {
46 		return getBoolean(IWorkbenchConstants.TAG_MAXIMIZED, false);
47 
48 	}
49 
isMinimized()50 	boolean isMinimized() {
51 		return getBoolean(IWorkbenchConstants.TAG_MINIMIZED, false);
52 
53 	}
54 
isCoolbarVisible()55 	boolean isCoolbarVisible() {
56 		IMemento trimLayoutMem = getChild(IWorkbenchConstants.TAG_TRIM);
57 		if (trimLayoutMem == null) {
58 			return false;
59 		}
60 
61 		boolean visible = false;
62 		IMemento[] trimAreas = trimLayoutMem.getChildren(IWorkbenchConstants.TAG_TRIM_AREA);
63 		IMemento topTrim = null;
64 		for (IMemento trimArea : trimAreas) {
65 			// ITrimManager.TOP == SWT.TOP
66 			if (SWT.TOP == trimArea.getInteger(IMemento.TAG_ID)) {
67 				topTrim = trimArea;
68 				break;
69 			}
70 		}
71 		if (topTrim != null) {
72 			IMemento[] trimItems = topTrim.getChildren(IWorkbenchConstants.TAG_TRIM_ITEM);
73 			for (IMemento trimItem : trimItems) {
74 				if ("org.eclipse.ui.internal.WorkbenchWindow.topBar".equals(trimItem //$NON-NLS-1$
75 						.getString(IMemento.TAG_ID))) {
76 					visible = true;
77 					break;
78 				}
79 			}
80 		}
81 		return visible;
82 	}
83 
isStatusBarVisible()84 	boolean isStatusBarVisible() {
85 		return getStatusBar() != null;
86 	}
87 
getStatusBar()88 	private IMemento getStatusBar() {
89 		IMemento trimLayoutMem = getChild(IWorkbenchConstants.TAG_TRIM);
90 		if (trimLayoutMem == null) {
91 			return null;
92 		}
93 
94 		IMemento[] trimAreas = trimLayoutMem.getChildren(IWorkbenchConstants.TAG_TRIM_AREA);
95 		for (IMemento trimArea : trimAreas) {
96 			// ITrimManager.TOP == SWT.TOP
97 			if (SWT.BOTTOM == trimArea.getInteger(IMemento.TAG_ID)) {
98 				return trimArea;
99 			}
100 		}
101 		return null;
102 	}
103 
hasStatusLine()104 	boolean hasStatusLine() {
105 		IMemento statusBar = getStatusBar();
106 		if (statusBar != null) {
107 			IMemento[] trimItemMems = statusBar.getChildren(IWorkbenchConstants.TAG_TRIM_ITEM);
108 			for (IMemento trimItemMem : trimItemMems) {
109 				if (STATUS_LINE_MANAGER_ID.equals(trimItemMem.getID())) {
110 					return true;
111 				}
112 			}
113 		}
114 		return false;
115 	}
116 
isWelcomePageOpen()117 	boolean isWelcomePageOpen() {
118 		return (getChild(IWorkbenchConstants.TAG_INTRO) != null);
119 	}
120 
getPerspectiveReaders()121 	List<PerspectiveReader> getPerspectiveReaders() {
122 		List<PerspectiveReader> perspectives = new ArrayList<>();
123 		IMemento perspContainer = getPerspectiveContainer();
124 		if (perspContainer != null) {
125 			IMemento[] perspectiveMems = perspContainer.getChildren(IWorkbenchConstants.TAG_PERSPECTIVE);
126 			for (IMemento perspectiveMem : perspectiveMems) {
127 				PerspectiveReader perspective = new PerspectiveReader(perspectiveMem);
128 				perspectives.add(perspective);
129 			}
130 		}
131 		return perspectives;
132 	}
133 
getPerspectiveContainer()134 	private IMemento getPerspectiveContainer() {
135 		IMemento perspContainer = null;
136 		IMemento page = getPage();
137 		if (page != null) {
138 			perspContainer = page.getChild(IWorkbenchConstants.TAG_PERSPECTIVES);
139 		}
140 		return perspContainer;
141 	}
142 
isSelected()143 	boolean isSelected() {
144 		IMemento page = getPage();
145 		if (page == null) {
146 			return false;
147 		}
148 		Boolean selected = page.getBoolean(IWorkbenchConstants.TAG_FOCUS);
149 		return selected == null ? false : selected.booleanValue();
150 	}
151 
getActivePerspectiveId()152 	String getActivePerspectiveId() {
153 		String activePerspectiveId = null;
154 		IMemento perspContainer = getPerspectiveContainer();
155 		if (perspContainer != null) {
156 			activePerspectiveId = perspContainer.getString(IWorkbenchConstants.TAG_ACTIVE_PERSPECTIVE);
157 		}
158 		return activePerspectiveId;
159 	}
160 
getEditorStacks()161 	List<InfoReader> getEditorStacks() {
162 		IMemento editorArea = getEditorArea();
163 		List<InfoReader> readers = new ArrayList<>();
164 		if (editorArea != null) {
165 			IMemento[] editorStackMems = editorArea.getChildren(IWorkbenchConstants.TAG_INFO);
166 			for (IMemento memento : editorStackMems) {
167 				readers.add(new InfoReader(memento));
168 			}
169 		}
170 		return readers;
171 	}
172 
getDefaultFastViewSide()173 	public Integer getDefaultFastViewSide() {
174 		Integer defaultFastViewSide = null;
175 		IMemento fastViewData = getChild("fastViewData"); //$NON-NLS-1$
176 		if (fastViewData != null) {
177 			defaultFastViewSide = fastViewData.getInteger(IWorkbenchConstants.TAG_FAST_VIEW_SIDE);
178 		}
179 		return defaultFastViewSide;
180 	}
181 
getEditorArea()182 	private IMemento getEditorArea() {
183 		IMemento editors = getEditorsMemento();
184 		if (editors != null) {
185 			return editors.getChild(IWorkbenchConstants.TAG_AREA);
186 		}
187 		return null;
188 	}
189 
getEditors()190 	List<EditorReader> getEditors() {
191 		List<EditorReader> readers = new ArrayList<>();
192 		IMemento editors = getEditorsMemento();
193 		if (editors != null) {
194 			IMemento[] editorMems = editors.getChildren(IWorkbenchConstants.TAG_EDITOR);
195 			for (IMemento memento : editorMems) {
196 				readers.add(new EditorReader(memento));
197 			}
198 		}
199 		return readers;
200 	}
201 
getEditorsMemento()202 	private IMemento getEditorsMemento() {
203 		IMemento page = getPage();
204 		if (page == null) {
205 			return null;
206 		}
207 		return page.getChild(IWorkbenchConstants.TAG_EDITORS);
208 	}
209 
getViews()210 	List<ViewReader> getViews() {
211 		List<ViewReader> readers = new ArrayList<>();
212 		IMemento page = getPage();
213 		if (page == null) {
214 			return readers;
215 		}
216 		IMemento editors = page.getChild(IWorkbenchConstants.TAG_VIEWS);
217 		if (editors != null) {
218 			IMemento[] editorMems = editors.getChildren(IWorkbenchConstants.TAG_VIEW);
219 			for (IMemento memento : editorMems) {
220 				readers.add(new ViewReader(memento));
221 			}
222 		}
223 		return readers;
224 	}
225 
getPage()226 	private IMemento getPage() {
227 		return getChild(IWorkbenchConstants.TAG_PAGE);
228 	}
229 
230 	static class EditorReader extends MementoReader {
231 
EditorReader(IMemento memento)232 		private EditorReader(IMemento memento) {
233 			super(memento);
234 		}
235 
getLabel()236 		String getLabel() {
237 			return getString(IWorkbenchConstants.TAG_TITLE);
238 		}
239 
getType()240 		String getType() {
241 			return getString(IWorkbenchConstants.TAG_ID);
242 		}
243 
getStackId()244 		String getStackId() {
245 			return getString(IWorkbenchConstants.TAG_WORKBOOK);
246 		}
247 
isSelected()248 		boolean isSelected() {
249 			return getBoolean(IWorkbenchConstants.TAG_FOCUS);
250 		}
251 
252 	}
253 
254 	static class ViewReader extends MementoReader {
255 
ViewReader(IMemento memento)256 		private ViewReader(IMemento memento) {
257 			super(memento);
258 		}
259 
getId()260 		String getId() {
261 			return getString(IWorkbenchConstants.TAG_ID);
262 		}
263 
getLabel()264 		String getLabel() {
265 			return getString(IWorkbenchConstants.TAG_PART_NAME);
266 		}
267 
getViewState()268 		IMemento getViewState() {
269 			IMemento viewStateMem = getChild(IWorkbenchConstants.TAG_VIEW_STATE);
270 			if (viewStateMem == null) {
271 				return null;
272 			}
273 			return createRenamedCopy(viewStateMem, IWorkbenchConstants.TAG_VIEW);
274 		}
275 
createRenamedCopy(IMemento memento, String newName)276 		private XMLMemento createRenamedCopy(IMemento memento, String newName) {
277 			XMLMemento newMem = XMLMemento.createWriteRoot(newName);
278 			newMem.putMemento(memento);
279 			return newMem;
280 		}
281 
282 	}
283 
284 }
285