creatorextension/com.nokia.s60tools.creator/src/com/nokia/s60tools/creator/editors/CreatorScriptEditor.java
author dpodwall
Tue, 12 Jan 2010 13:17:53 -0600
changeset 0 61163b28edca
permissions -rw-r--r--
initial EPL conversion
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
     1
/*
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
     3
* All rights reserved.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
     4
* This component and the accompanying materials are made available
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
     6
* which accompanies this distribution, and is available
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
     8
*
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
     9
* Initial Contributors:
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    11
*
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    12
* Contributors:
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    13
*
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    14
* Description:
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    15
*
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    16
*/
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    17
package com.nokia.s60tools.creator.editors;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    18
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    19
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    20
import java.io.BufferedReader;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    21
import java.io.ByteArrayInputStream;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    22
import java.io.FileInputStream;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    23
import java.io.IOException;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    24
import java.io.InputStream;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    25
import java.io.InputStreamReader;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    26
import java.io.PushbackInputStream;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    27
import java.io.UnsupportedEncodingException;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    28
import java.net.URI;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    29
import java.util.Iterator;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    30
import java.util.Set;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    31
import java.util.Vector;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    32
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    33
import org.eclipse.core.resources.IContainer;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    34
import org.eclipse.core.resources.IFile;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    35
import org.eclipse.core.resources.IMarker;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    36
import org.eclipse.core.resources.IResource;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    37
import org.eclipse.core.resources.IResourceChangeEvent;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    38
import org.eclipse.core.resources.IResourceChangeListener;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    39
import org.eclipse.core.resources.IWorkspaceRoot;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    40
import org.eclipse.core.resources.ResourcesPlugin;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    41
import org.eclipse.core.runtime.CoreException;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    42
import org.eclipse.core.runtime.IPath;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    43
import org.eclipse.core.runtime.IProgressMonitor;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    44
import org.eclipse.core.runtime.IStatus;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    45
import org.eclipse.core.runtime.Path;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    46
import org.eclipse.core.runtime.Status;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    47
import org.eclipse.jface.dialogs.ErrorDialog;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    48
import org.eclipse.jface.dialogs.IDialogConstants;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    49
import org.eclipse.jface.dialogs.MessageDialog;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    50
import org.eclipse.jface.wizard.ProgressMonitorPart;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    51
import org.eclipse.swt.SWT;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    52
import org.eclipse.swt.SWTException;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    53
import org.eclipse.swt.events.SelectionAdapter;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    54
import org.eclipse.swt.events.SelectionEvent;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    55
import org.eclipse.swt.events.SelectionListener;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    56
import org.eclipse.swt.graphics.Color;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    57
import org.eclipse.swt.graphics.Font;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    58
import org.eclipse.swt.graphics.FontData;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    59
import org.eclipse.swt.graphics.RGB;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    60
import org.eclipse.swt.graphics.Rectangle;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    61
import org.eclipse.swt.layout.GridData;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    62
import org.eclipse.swt.layout.GridLayout;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    63
import org.eclipse.swt.widgets.Button;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    64
import org.eclipse.swt.widgets.Combo;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    65
import org.eclipse.swt.widgets.Composite;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    66
import org.eclipse.swt.widgets.Display;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    67
import org.eclipse.swt.widgets.Group;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    68
import org.eclipse.swt.widgets.Label;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    69
import org.eclipse.swt.widgets.List;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    70
import org.eclipse.swt.widgets.Shell;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    71
import org.eclipse.ui.IEditorInput;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    72
import org.eclipse.ui.IEditorPart;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    73
import org.eclipse.ui.IEditorSite;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    74
import org.eclipse.ui.IFileEditorInput;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    75
import org.eclipse.ui.IPathEditorInput;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    76
import org.eclipse.ui.IWorkbenchPage;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    77
import org.eclipse.ui.PartInitException;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    78
import org.eclipse.ui.PlatformUI;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    79
import org.eclipse.ui.dialogs.SaveAsDialog;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    80
import org.eclipse.ui.editors.text.TextEditor;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    81
import org.eclipse.ui.ide.FileStoreEditorInput;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    82
import org.eclipse.ui.ide.IDE;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    83
import org.eclipse.ui.part.FileEditorInput;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    84
import org.eclipse.ui.part.MultiPageEditorPart;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    85
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    86
import com.nokia.s60tools.creator.CreatorActivator;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    87
import com.nokia.s60tools.creator.CreatorHelpContextIDs;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    88
import com.nokia.s60tools.creator.components.AbstractComponent;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    89
import com.nokia.s60tools.creator.components.Components;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    90
import com.nokia.s60tools.creator.components.contact.ContactSetVariables;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    91
import com.nokia.s60tools.creator.core.CreatorEditorSettings;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    92
import com.nokia.s60tools.creator.dialogs.AbstractDialog;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    93
import com.nokia.s60tools.creator.dialogs.DialogLauncher;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    94
import com.nokia.s60tools.creator.util.CreatorEditorConsole;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    95
import com.nokia.s60tools.creator.xml.CreatorScriptNotValidException;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    96
import com.nokia.s60tools.creator.xml.CreatorXML;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    97
import com.nokia.s60tools.creator.xml.CreatorXMLParser;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    98
import com.nokia.s60tools.hticonnection.services.HTIServiceFactory;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
    99
import com.nokia.s60tools.util.resource.FileUtils;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   100
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   101
/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   102
 * Creator script editor - Editor area. Stores all components and handles adding, removing and editing a Script.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   103
 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   104
public class CreatorScriptEditor extends MultiPageEditorPart implements IResourceChangeListener, IComponentProvider{
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   105
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   106
	private static final String ADD_TXT = " Add ";
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   107
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   108
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   109
	public static final int COMPONENT_LIST_WIDTH = 500;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   110
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   111
	public static final int EDITOR_DEFAULT_WIDTH = 600;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   112
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   113
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   114
	 * Fixed Width and height parameters to set UI components 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   115
	 * precisely 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   116
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   117
	private static final int COMPONENT_LIST_ITEMS_HEIGHT_HINT = 8;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   118
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   119
	/** The text editor used in page 0. */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   120
	private TextEditor editor;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   121
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   122
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   123
	 * All components
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   124
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   125
	private Components components;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   126
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   127
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   128
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   129
	//Editor window widgets
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   130
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   131
	private List componentsList;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   132
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   133
	private Combo componentCombo;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   134
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   135
	private Button removeBtn;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   136
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   137
	private Button editBtn;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   138
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   139
	private boolean isDirty;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   140
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   141
	private Color white;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   142
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   143
	private boolean isEditLaunched = false;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   144
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   145
	private Button addComponentButton;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   146
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   147
	private Button addContactSetButton;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   148
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   149
	private Button runInDeviceButton = null;	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   150
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   151
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   152
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   153
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   154
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   155
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   156
	 * Creates a multi-page editor example.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   157
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   158
	public CreatorScriptEditor() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   159
		super();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   160
		ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   161
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   162
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   163
	private void setContextSensitiveHelpIDs(){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   164
		 PlatformUI.getWorkbench().getHelpSystem().setHelp(componentCombo, 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   165
		    		CreatorHelpContextIDs.CREATOR_HELP_ADD_COMPONENT);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   166
		 PlatformUI.getWorkbench().getHelpSystem().setHelp(addComponentButton, 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   167
		    		CreatorHelpContextIDs.CREATOR_HELP_ADD_COMPONENT);		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   168
		 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   169
		 PlatformUI.getWorkbench().getHelpSystem().setHelp(editBtn, 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   170
		    		CreatorHelpContextIDs.CREATOR_HELP_MODIFY_COMPONENT);		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   171
		 PlatformUI.getWorkbench().getHelpSystem().setHelp(removeBtn, 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   172
		    		CreatorHelpContextIDs.CREATOR_HELP_MODIFY_COMPONENT);		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   173
		 PlatformUI.getWorkbench().getHelpSystem().setHelp(componentsList, 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   174
		    		CreatorHelpContextIDs.CREATOR_HELP_MODIFY_COMPONENT);		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   175
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   176
		 if(runInDeviceButton != null){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   177
			 PlatformUI.getWorkbench().getHelpSystem().setHelp(runInDeviceButton, 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   178
			    		CreatorHelpContextIDs.RUN_IN_DEVICE_PAGE);					 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   179
		 }
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   180
		 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   181
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   182
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   183
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   184
	 * Create Creator Editor page.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   185
	 * 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   186
	 * Creating all Widgets and setting data from this.xml to them.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   187
	 * Creating listeners for selected Widgets. 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   188
	 * 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   189
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   190
	private void createCreatorScriptEditorPage() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   191
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   192
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   193
		final Composite composite = new Composite(getContainer(), SWT.SIMPLE);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   194
		final Shell shell = composite.getShell();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   195
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   196
		GridLayout gridLayout = new GridLayout();//2, false
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   197
		composite.setLayout(gridLayout);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   198
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   199
		GridData gridData = new GridData();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   200
 		gridData.horizontalAlignment = GridData.FILL;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   201
 		gridData.grabExcessHorizontalSpace = true;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   202
		composite.setLayoutData(gridData);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   203
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   204
		RGB rgbWhite = new RGB(255, 255, 255);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   205
		white = new Color(null, rgbWhite);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   206
		composite.setBackground(white);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   207
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   208
		//Create part of UI where is components to add, contact set adding button and run in device button
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   209
		createButtonsPart(composite, shell);		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   210
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   211
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   212
		//COMPONENTS
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   213
		Group componentsGroup = new Group(composite, SWT.SHADOW_NONE);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   214
		componentsGroup.setText("Components added:");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   215
		GridLayout componentsGrid = new GridLayout(2, false);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   216
		componentsGroup.setBackground(white);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   217
		GridData componentsGridData = new GridData(EDITOR_DEFAULT_WIDTH, SWT.DEFAULT/*GridData.HORIZONTAL_ALIGN_FILL*/);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   218
		componentsGridData.horizontalAlignment = GridData.FILL;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   219
		componentsGridData.grabExcessHorizontalSpace = true;	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   220
		componentsGridData.verticalAlignment = GridData.FILL;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   221
		componentsGridData.grabExcessVerticalSpace = true;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   222
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   223
		componentsGroup.setLayout(componentsGrid);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   224
		componentsGroup.setLayoutData(componentsGridData);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   225
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   226
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   227
		final int listBoxStyleBits = SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   228
		componentsList = new List(componentsGroup,listBoxStyleBits);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   229
		//If font not found or something else unexpected occur, don't fail whole program
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   230
		try {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   231
			componentsList.setFont(getUnicodeFont());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   232
		} catch (Exception e) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   233
			e.printStackTrace();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   234
			CreatorEditorConsole.getInstance().println("Could not set list font to Unicode, reason: " +e.getMessage(), CreatorEditorConsole.MSG_ERROR);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   235
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   236
		GridData listData = new GridData(COMPONENT_LIST_WIDTH, SWT.DEFAULT);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   237
		listData.horizontalAlignment = GridData.FILL;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   238
		listData.grabExcessHorizontalSpace = true;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   239
		listData.verticalAlignment = GridData.FILL;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   240
		listData.grabExcessVerticalSpace = true;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   241
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   242
		int listHeight = componentsList.getItemHeight() * COMPONENT_LIST_ITEMS_HEIGHT_HINT;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   243
		Rectangle trim = componentsList.computeTrim(0, 0, 0, listHeight);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   244
		listData.heightHint = trim.height;		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   245
		componentsList.setLayoutData(listData);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   246
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   247
		componentsList.addSelectionListener(getEnableButtonsListener());	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   248
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   249
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   250
		//
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   251
		//Setting components data to selection box
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   252
		//
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   253
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   254
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   255
		redrawComponentList();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   256
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   257
		Composite btnComp = new Composite(componentsGroup, SWT.SIMPLE);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   258
		btnComp.setLayout(new GridLayout(1, false));
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   259
		GridData btnGrid = new GridData();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   260
		btnGrid.verticalAlignment = SWT.BEGINNING;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   261
		btnGrid.horizontalAlignment = SWT.BEGINNING;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   262
		btnComp.setLayoutData(btnGrid);//GridData.FILL_BOTH	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   263
		btnComp.setBackground(white);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   264
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   265
		removeBtn = new Button(btnComp,SWT.PUSH);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   266
		removeBtn.setText("Remove");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   267
		removeBtn.setEnabled(false);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   268
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   269
		editBtn = new Button(btnComp,SWT.PUSH);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   270
		editBtn.setText("   Edit   ");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   271
		editBtn.setEnabled(false);//By Default edit is not available, but when a component is selected, its enabled 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   272
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   273
		//Open Edit Dialog when Edit button has been pushed
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   274
		editBtn.addSelectionListener(getEditButtonListener(this, shell));			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   275
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   276
		//Adding action to remove Button
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   277
		removeBtn.addSelectionListener(getRemoveComponentListener());			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   278
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   279
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   280
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   281
		int pageIndex = addPage(composite);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   282
		composite.pack();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   283
		setPageText(pageIndex, "Creator Script Editor");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   284
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   285
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   286
	private void createButtonsPart(final Composite composite, final Shell shell) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   287
		//ADD COMPONENT GROUP				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   288
		Group addComponentGroup = new Group(composite, SWT.SHADOW_NONE);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   289
		addComponentGroup.setText("Add a component to script:");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   290
		GridLayout componentGrid = new GridLayout(7, false);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   291
		addComponentGroup.setBackground(white);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   292
		GridData componentGridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   293
		componentGridData.horizontalAlignment = GridData.FILL;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   294
		componentGridData.grabExcessHorizontalSpace = true;		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   295
		addComponentGroup.setLayout(componentGrid);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   296
		addComponentGroup.setLayoutData(componentGridData);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   297
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   298
		//SELECT COMPONENT LABEL
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   299
		Label compoenentLabel = new Label(addComponentGroup, SWT.HORIZONTAL);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   300
		compoenentLabel.setText("Select component to add:");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   301
		compoenentLabel.setLayoutData(new GridData());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   302
		compoenentLabel.setBackground(white);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   303
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   304
		//Components to select
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   305
		componentCombo = new Combo(addComponentGroup, SWT.READ_ONLY | SWT.DROP_DOWN);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   306
		componentCombo.setVisibleItemCount(CreatorEditorSettings.getInstance().getComponents().length);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   307
		componentCombo.setItems(CreatorEditorSettings.getInstance().getComponents());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   308
		componentCombo.setLayoutData(new GridData());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   309
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   310
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   311
		addComponentButton = new Button(addComponentGroup, SWT.PUSH);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   312
		addComponentButton.setText(ADD_TXT);		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   313
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   314
		//add button listener
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   315
		addComponentButton.addSelectionListener(getAddComponentButtonListener(shell, this));		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   316
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   317
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   318
		//Create own button for contact-set:s
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   319
		Label nullText = new Label(addComponentGroup, SWT.HORIZONTAL);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   320
		nullText.setBackground(white);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   321
		nullText.setText("       ");//Just for making some space between buttons.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   322
		addContactSetButton = new Button(addComponentGroup, SWT.PUSH);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   323
		addContactSetButton.setText(ContactSetVariables.ADD_CONTACT_SET_TXT);		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   324
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   325
		//add button listener
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   326
		addContactSetButton.addSelectionListener(getAddNewContactSetComponentListener(shell, this));
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   327
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   328
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   329
		//create button for run in device
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   330
		Label nullText2 = new Label(addComponentGroup, SWT.HORIZONTAL);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   331
		nullText2.setBackground(white);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   332
		nullText2.setText("       ");//Just for making some space between buttons.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   333
		//Checking if HTI is supported at all, if not, not creating button at all.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   334
		if(isHTIAvailable()){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   335
			runInDeviceButton = new Button(addComponentGroup, SWT.PUSH);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   336
			runInDeviceButton.setText("Run in device via HTI");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   337
			runInDeviceButton.addSelectionListener(new RunInDeviceSelectionListener(components.getFileName(), components.getFilePath()));
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   338
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   339
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   340
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   341
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   342
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   343
	 * Checking if HTI connection package is available.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   344
	 * @return <code>true</code> if HTI is available, <code>false</code> otherwise.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   345
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   346
	private boolean isHTIAvailable() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   347
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   348
		try {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   349
			//If HTI is not available, Class HTIServiceFactory does not found and NoClassDefFoundError is thrown.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   350
			//There are different deliverables available and with all, HTI is not bundled with Carbide. 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   351
			HTIServiceFactory
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   352
				.createFTPService(CreatorEditorConsole.getInstance());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   353
		} catch (NoClassDefFoundError e) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   354
			CreatorEditorConsole.getInstance().println("HTI Connection is not available, Run in Device via HTI functionality is disabled.");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   355
			return false;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   356
		}			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   357
		return true;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   358
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   359
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   360
	/* (non-Javadoc)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   361
	 * @see com.nokia.s60tools.creator.editors.IComponentProvider#getAddNewContactSetComponentListener(org.eclipse.swt.widgets.Shell, com.nokia.s60tools.creator.editors.IComponentProvider)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   362
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   363
	public SelectionListener getAddNewContactSetComponentListener(final Shell shell,
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   364
			final IComponentProvider provider) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   365
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   366
		return new SelectionAdapter() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   367
			public void widgetSelected(SelectionEvent event) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   368
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   369
				//tell listeners that a component was added to list	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   370
				IAddComponentListener listener = null;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   371
				if(event.widget != null){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   372
					Object o = event.widget.getData();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   373
					if(o instanceof IAddComponentListener){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   374
						//if listener was provided, passing it through to compont adding
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   375
						listener = (IAddComponentListener)o;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   376
					}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   377
				}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   378
				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   379
				isEditLaunched = false;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   380
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   381
				// Get a dialog by selection type
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   382
				final AbstractDialog aComponentAddDialog = DialogLauncher
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   383
						.getDialog(CreatorEditorSettings.TYPE_CONTACT_SET, shell, provider);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   384
				// Open dialog
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   385
				openAddNewComponentDialog(aComponentAddDialog, listener);				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   386
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   387
		};
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   388
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   389
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   390
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   391
	 * Get listener for Add button
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   392
	 * @param shell
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   393
	 * @return Listener
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   394
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   395
	private SelectionAdapter getAddComponentButtonListener(final Shell shell, final IComponentProvider provider) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   396
		return new SelectionAdapter() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   397
			public void widgetSelected(SelectionEvent event) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   398
				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   399
				isEditLaunched = false;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   400
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   401
				// Get a dialog by selection type
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   402
				final AbstractDialog aComponentAddDialog = DialogLauncher
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   403
						.getDialog(componentCombo.getText(), shell, provider);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   404
				openAddNewComponentDialog(aComponentAddDialog, null);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   405
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   406
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   407
		};
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   408
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   409
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   410
	 * Open a dialog
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   411
	 * @param aComponentAddDialog
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   412
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   413
	private void openAddNewComponentDialog(
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   414
			final AbstractDialog aComponentAddDialog, IAddComponentListener listener) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   415
		// Open dialog
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   416
		aComponentAddDialog.open();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   417
		if (aComponentAddDialog.getReturnCode() == IDialogConstants.OK_ID) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   418
			// After dialog closed, get component(s) created
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   419
			AbstractComponent comp = aComponentAddDialog.getComponent();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   420
			addComponent(comp, listener); 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   421
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   422
		}// else, cancel is pushed
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   423
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   424
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   425
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   426
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   427
	 * Get Listener for enabling buttons or not
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   428
	 * @return Listener
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   429
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   430
	private SelectionAdapter getEnableButtonsListener() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   431
		return new SelectionAdapter() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   432
			public void widgetSelected(SelectionEvent event) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   433
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   434
				boolean buttonsEnabled = componentsList.getSelectionIndex() != -1 ? true : false ;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   435
				removeBtn.setEnabled(buttonsEnabled);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   436
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   437
				//Edit only enabled when one row is selected
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   438
				if(buttonsEnabled && componentsList.getSelection().length == 1){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   439
					editBtn.setEnabled(buttonsEnabled);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   440
				}else{
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   441
					editBtn.setEnabled(false);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   442
				}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   443
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   444
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   445
		};
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   446
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   447
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   448
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   449
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   450
	 * Get Listener for Edit button
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   451
	 * @param shell
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   452
	 * @return Listener
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   453
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   454
	private SelectionAdapter getEditButtonListener(final IComponentProvider provider, final Shell shell) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   455
		return new SelectionAdapter() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   456
			public void widgetSelected(SelectionEvent event) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   457
				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   458
				isEditLaunched = true;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   459
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   460
				//Get a dialog by selection type
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   461
				int compIndex = componentsList.getSelectionIndex();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   462
				AbstractComponent comp = provider.getEditable();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   463
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   464
				final AbstractDialog aComponentEditDialog = DialogLauncher.getDialog(provider, shell) ;//new AddContactDialog(shell);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   465
				//Open dialog
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   466
				aComponentEditDialog.open();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   467
				if (aComponentEditDialog.getReturnCode() == IDialogConstants.OK_ID) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   468
					//After dialog closed, get component(s) created
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   469
					//AbstractComponent editedComp= aComponentEditDialog.getComponent();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   470
					AbstractComponent editedComp= aComponentEditDialog.getComponent();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   471
					
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   472
					//Add component to list and check if its valid
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   473
					if(editedComp.isValid()){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   474
						getComponents().updateComponent(comp, editedComp);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   475
						componentsList.setItem(compIndex, editedComp.toString());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   476
						setDirty(true);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   477
					}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   478
					else{
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   479
						//set error message
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   480
						showErrorDialog("Component is not valid", "Component edited is not valid", "Please edit valid values to component.");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   481
					}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   482
				}//else, cancel is pushed
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   483
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   484
		};
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   485
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   486
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   487
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   488
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   489
	 * Handle component(s) removal
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   490
	 * 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   491
	 * @return Listener
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   492
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   493
	private SelectionAdapter getRemoveComponentListener() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   494
		return new SelectionAdapter() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   495
			public void widgetSelected(SelectionEvent event) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   496
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   497
				int[] indexes = componentsList.getSelectionIndices();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   498
				Vector<AbstractComponent> componentsToBeRemoved = new Vector<AbstractComponent>(indexes.length);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   499
				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   500
				//First just collecting components to be removed, because when Contact-set is removed a 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   501
				//components referenced to that will be changed, and seeking components left requires
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   502
				//component list update to be found after that
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   503
				for (int i = 0; i < indexes.length; i++) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   504
					AbstractComponent comp = getComponentBySelection(indexes[i]);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   505
					componentsToBeRemoved.add(comp);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   506
				}				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   507
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   508
				//actually removing components and references to component to be removed
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   509
				for (Iterator<AbstractComponent> iterator = componentsToBeRemoved.iterator(); iterator.hasNext();) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   510
					AbstractComponent comp = (AbstractComponent) iterator.next();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   511
					//remove references to that component
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   512
					getComponents().removeReferencesToComponent(comp);		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   513
					//remove component
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   514
					getComponents().remove(comp);					
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   515
				}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   516
				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   517
				componentsList.remove(indexes);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   518
				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   519
				//Update component list, because many components may changed				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   520
				redrawComponentList();				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   521
				setDirty(true);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   522
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   523
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   524
		};
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   525
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   526
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   527
	private void addComponentToList(AbstractComponent aComponent, List componentsList) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   528
		componentsList.add(  aComponent.toString());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   529
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   530
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   531
	private void redrawComponentList() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   532
		componentsList.removeAll();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   533
		//Get all component types (Contacts, Connection methods, messages...)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   534
		Set<String> allComponentTypes = getComponents().getComponentTypes();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   535
		//Looping through all component types one by one
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   536
		for (Iterator<String> allCompKeysIt = allComponentTypes.iterator(); allCompKeysIt.hasNext();) {			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   537
			String compType = (String) allCompKeysIt.next();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   538
			Vector<AbstractComponent> allComponentsByType = getComponents().getComponents(compType);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   539
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   540
			//Looping through all components in one component type
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   541
			for (Iterator<AbstractComponent> iterator = allComponentsByType.iterator(); iterator.hasNext();) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   542
				AbstractComponent aComponent = (AbstractComponent) iterator.next();			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   543
				addComponentToList(aComponent, componentsList);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   544
			}			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   545
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   546
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   547
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   548
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   549
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   550
	 * Creates the pages of the multi-page editor.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   551
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   552
	protected void createPages() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   553
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   554
		try {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   555
			createCreatorScriptEditorPage();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   556
			setContextSensitiveHelpIDs();			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   557
		} catch (Exception e) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   558
			CreatorEditorConsole.getInstance().println("Unexpected error occurs: " + e, CreatorEditorConsole.MSG_ERROR);			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   559
			e.printStackTrace();			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   560
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   561
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   562
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   563
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   564
	 * The <code>MultiPageEditorPart</code> implementation of this 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   565
	 * <code>IWorkbenchPart</code> method disposes all nested editors.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   566
	 * Subclasses may extend.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   567
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   568
	public void dispose() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   569
		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   570
		super.dispose();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   571
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   572
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   573
	 * Saves the multi-page editor's document.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   574
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   575
	public void doSave(IProgressMonitor monitor) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   576
		//getEditor(0).doSave(monitor);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   577
				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   578
		InputStream stream = null;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   579
		try {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   580
			IEditorInput editorInput = getEditorInput();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   581
			//Type is IFileEditorInput allways when file is opened from project
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   582
			//If file opened outside project, editor type is IPathEditorInput
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   583
			if (editorInput instanceof IFileEditorInput) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   584
				IFile file;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   585
				//Just making sure that stream is closed before renaming file
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   586
				try {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   587
					stream = openUTF8ContentStream(getComponents().toXMLString());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   588
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   589
					IFileEditorInput iFile = (IFileEditorInput) editorInput;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   590
					file = iFile.getFile();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   591
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   592
					if (file.exists()) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   593
						file.setContents(stream, true, true, monitor);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   594
						file.setCharset(FileUtils.ENCODING_TYPE_UTF_8, monitor);	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   595
					} else {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   596
						file.create(stream, true, monitor);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   597
						file.setCharset(FileUtils.ENCODING_TYPE_UTF_8, monitor);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   598
					}			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   599
				} finally {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   600
					stream.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   601
				}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   602
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   603
			//Else file is opened outside of Carbide project
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   604
			else if (editorInput instanceof IPathEditorInput) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   605
				IPathEditorInput javaInput = (IPathEditorInput) editorInput;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   606
				IPath path = javaInput.getPath();				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   607
				String fileLocation = path.toOSString();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   608
				FileUtils.writeToFile(fileLocation, getComponents().toXMLString(), FileUtils.ENCODING_TYPE_UTF_8);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   609
			}else{// if (editorInput instanceof FileStoreEditorInput) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   610
				FileStoreEditorInput inp = ((FileStoreEditorInput) editorInput);	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   611
				URI uri = inp.getURI();				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   612
				java.io.File fi = new java.io.File(uri);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   613
				String fileLocation = fi.getAbsolutePath();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   614
				FileUtils.writeToFile(fileLocation, getComponents().toXMLString(), FileUtils.ENCODING_TYPE_UTF_8);				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   615
			}				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   616
			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   617
			setDirty(false);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   618
			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   619
		} catch (Exception e) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   620
			showErrorDialog("Errors on save", "Save was not compleate.",
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   621
					e.getMessage());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   622
			e.printStackTrace();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   623
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   624
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   625
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   626
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   627
	 * Saves the multi-page editor's document as another file.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   628
	 * Also updates the text for page 0's tab, and updates this multi-page editor's input
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   629
	 * to correspond to the nested editor's.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   630
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   631
	public void doSaveAs() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   632
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   633
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   634
		try {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   635
			IEditorInput editorInput = getEditorInput();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   636
			SaveAsDialog saveas = new SaveAsDialog(getContainer().getShell());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   637
			//Setting default saveasdialog file name and location
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   638
			//If API name is changed IFileEditorInput is still the same
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   639
			//and if orginal file is not saved yet (xml.isAPINameChanged())
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   640
			//Setting default name to UI as new generated file name instead of old filename and path
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   641
			if (editorInput instanceof IFileEditorInput ) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   642
				IFileEditorInput iFile = (IFileEditorInput) editorInput;				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   643
				saveas.setOriginalFile(iFile.getFile());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   644
			} 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   645
			//Else file is opened outside of Carbide project
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   646
			else if (editorInput instanceof IPathEditorInput) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   647
				IPathEditorInput javaInput = (IPathEditorInput) editorInput;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   648
				IPath path = javaInput.getPath();				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   649
				saveas.setOriginalName(path.lastSegment());				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   650
			}else{// if (editorInput instanceof FileStoreEditorInput) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   651
				FileStoreEditorInput inp = ((FileStoreEditorInput) editorInput);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   652
				saveas.setOriginalName(inp.getName());				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   653
			}			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   654
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   655
			saveas.open();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   656
			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   657
			if (SaveAsDialog.CANCEL == saveas.getReturnCode()) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   658
				return;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   659
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   660
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   661
			if (saveas.getResult() == null
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   662
					|| !saveas.getResult().toString().endsWith(".creatorxml")
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   663
					|| !saveas.getResult().getFileExtension().equals("creatorxml")) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   664
				showErrorDialog("Wrong file type",
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   665
						"Save as was not complete. Please correct file type.",
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   666
						"File type must be .creatorxml");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   667
				return;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   668
			}			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   669
			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   670
			String containerName = saveas.getResult().removeLastSegments(1)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   671
			.toOSString();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   672
			String fileName = saveas.getResult().lastSegment();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   673
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   674
			IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   675
			IResource resource = root.findMember(new Path(containerName));
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   676
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   677
			//This is also check by SaveAsDialog, double check
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   678
			if (resource == null || !resource.exists()
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   679
					|| !(resource instanceof IContainer)) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   680
				showErrorDialog(
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   681
						"Container must exist",
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   682
						"Save as was not complete, container must exist. Please select existing container.",
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   683
						"Conteiner does not exist");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   684
				return;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   685
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   686
			IContainer container = (IContainer) resource;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   687
			final IFile file = container.getFile(new Path(fileName));
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   688
			//Creating temp file because given API name must be found
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   689
			InputStream stream = openUTF8ContentStream(getComponents().toXMLString());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   690
			ProgressMonitorPart monitor = new ProgressMonitorPart(
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   691
					getContainer(), new GridLayout());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   692
			file.create(stream, true, monitor);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   693
			file.setCharset(FileUtils.ENCODING_TYPE_UTF_8, null);			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   694
			stream.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   695
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   696
			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   697
		} catch (Exception e) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   698
			showErrorDialog("Errors on save as", "Save as was not compleate.",
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   699
					e.getMessage());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   700
			e.printStackTrace();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   701
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   702
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   703
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   704
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   705
	 * Open a stream from components in UTF-8 format
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   706
	 * Client must close the opened stream.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   707
	 * @return components XML as stream
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   708
	 * @throws UnsupportedEncodingException 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   709
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   710
	private InputStream openUTF8ContentStream(String string) throws UnsupportedEncodingException {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   711
		return openContentStream(string, FileUtils.ENCODING_TYPE_UTF_8);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   712
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   713
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   714
	 * Open a stream from components in specified character set format
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   715
	 * Client must close the opened stream.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   716
	 * @return components XML as stream
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   717
	 * @throws UnsupportedEncodingException 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   718
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   719
	private InputStream openContentStream(String string, String charset) throws UnsupportedEncodingException {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   720
		if(charset == null){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   721
			charset = FileUtils.ENCODING_TYPE_UTF_8;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   722
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   723
		InputStream in = new ByteArrayInputStream(string.getBytes(charset));	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   724
		return in;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   725
	}		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   726
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   727
	/* (non-Javadoc)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   728
	 * Method declared on IEditorPart
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   729
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   730
	public void gotoMarker(IMarker marker) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   731
		setActivePage(0);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   732
		IDE.gotoMarker(getEditor(0), marker);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   733
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   734
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   735
	 * Checks that the input is an instance of <code>IFileEditorInput, IPathEditorInput or FileStoreEditorInput</code>.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   736
	 * And sets Title and content of file.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   737
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   738
	public void init(IEditorSite site, IEditorInput editorInput)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   739
		throws PartInitException {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   740
		if (!(editorInput instanceof IFileEditorInput)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   741
				&& !(editorInput instanceof IPathEditorInput)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   742
				&& !(editorInput instanceof FileStoreEditorInput) ){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   743
			throw new PartInitException(
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   744
					"Invalid Input: Must be IFileEditorInput or IPathEditorInput, was: "
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   745
							+ editorInput.getClass().getName());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   746
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   747
		setTitle(editorInput);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   748
		setTitleImage(CreatorActivator
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   749
				.getImageForKey(CreatorActivator.CREATOR_SCRIPT_EDITOR_ICON));		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   750
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   751
		parseXMLAndSetComponents(editorInput);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   752
		super.init(site, editorInput);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   753
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   754
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   755
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   756
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   757
	 * When open a file, setting this.xml from file.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   758
	 * If file was old existing file, parsing file and set it to this.xml
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   759
	 * if file was new just created file, creating new xml object and setting
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   760
	 * it to this.xml
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   761
	 * @param input
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   762
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   763
	private void parseXMLAndSetComponents(IEditorInput input) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   764
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   765
		String fileName = "";
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   766
		String filePath = "";
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   767
		try {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   768
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   769
			String xmlString;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   770
			String charSet = null;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   771
			//Type is IFileEditorInput allways when file is opened from project
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   772
			//If file opened outside project in Carbide 1.2 editor type is IPathEditorInput
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   773
			//and in Carbide 1.3 its FileStoreEditorInput
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   774
			if (input instanceof IFileEditorInput) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   775
				IFileEditorInput iFile = (IFileEditorInput) input;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   776
				IFile file = iFile.getFile();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   777
				fileName = file.getName();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   778
				filePath = file.getLocation().toOSString();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   779
				InputStream in = file.getContents();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   780
				//Found out file charset, and opening file contents by that. So also non UTF-8 files is working
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   781
				//Note! If e.g. file is edited in Windows, and charset is cp1252, then "official" (windows-1252) charset name must be in XML file
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   782
				//e.g. <?xml version="1.0" encoding="windows-1252"?>, otherwise parsing XML file will fail.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   783
				charSet = file.getCharset();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   784
				xmlString = getFileContentsWithCharSet(in, charSet);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   785
				in.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   786
				in = null;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   787
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   788
			} else if(input instanceof IPathEditorInput){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   789
				IPath path = ((IPathEditorInput) input).getPath();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   790
				fileName = path.lastSegment();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   791
				filePath = path.toOSString();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   792
				java.io.File fi = path.toFile();				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   793
				FileInputStream in = new FileInputStream(fi);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   794
				xmlString = getFileContentsAsUTF8(in);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   795
				in.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   796
				in = null;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   797
			}else{
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   798
				FileStoreEditorInput inp = ((FileStoreEditorInput) input);	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   799
				URI uri = inp.getURI();				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   800
				java.io.File fi = new java.io.File(uri);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   801
				fileName = fi.getName();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   802
				filePath = fi.getAbsolutePath();				
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   803
				FileInputStream in = new FileInputStream(fi);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   804
				xmlString = getFileContentsAsUTF8(in);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   805
				in.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   806
				in = null;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   807
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   808
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   809
			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   810
			//if file is just created new API metadatafile with wizard
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   811
			//creating new xml object and opening it
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   812
			if (xmlString.startsWith(CreatorXML.NEW_API_CREATOR_FILE_UID)) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   813
				components = new Components();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   814
				setDirty(true);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   815
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   816
			//Otherwise file is old existing metadata file, parsing it and setting 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   817
			//xml to this.xml
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   818
			else {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   819
				components = parseXML(fileName, openContentStream(xmlString, charSet));
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   820
				setDirty(false);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   821
				CreatorEditorConsole.getInstance().println(
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   822
						"Creator Script XML file: '" + fileName
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   823
								+ "' opened.");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   824
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   825
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   826
			components.setFileName(fileName);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   827
			components.setFilePath(filePath);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   828
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   829
		} catch (CreatorScriptNotValidException e) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   830
			//If parsing was ok, but xml was not walid setting xml so user can correct errors
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   831
			CreatorEditorConsole.getInstance().println(
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   832
					"CreatorScriptNotValidException on init: " + e.toString());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   833
			showErrorDialog("Errors on Creator Script XML", "Creator XML file "
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   834
					+ fileName + " could not be parsed.", e.getMessage());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   835
		} catch (Exception e) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   836
			e.printStackTrace();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   837
			CreatorEditorConsole.getInstance().println(
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   838
					"Exception on init: " + e.toString());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   839
			showErrorDialog("Error",
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   840
					"Creator editor could not be opened. Errors on "
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   841
							+ fileName, e.getMessage());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   842
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   843
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   844
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   845
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   846
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   847
	 * Get xml String from stream
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   848
	 * @param is
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   849
	 * @return
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   850
	 * @throws CoreException
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   851
	 * @throws IOException
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   852
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   853
	private String getFileContentsAsUTF8(InputStream is) throws CoreException,
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   854
			IOException {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   855
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   856
		int READ_BYTES = 3;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   857
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   858
		StringBuffer buf = new StringBuffer();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   859
		PushbackInputStream pushIn = new PushbackInputStream(is, READ_BYTES);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   860
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   861
		byte[] bomBytes = new byte[READ_BYTES];//for reading 3 first bytes
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   862
		pushIn.read(bomBytes,0, READ_BYTES);//read 3 bytes
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   863
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   864
		boolean isBomFile = false;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   865
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   866
		//BOM Files starts with 0xEF, 0xBB, 0xBF
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   867
		if(bomBytes[0] == (byte)0xEF && bomBytes[1] == (byte)0xBB && bomBytes[2] == (byte)0xBF){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   868
			isBomFile = true;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   869
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   870
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   871
		//If file was not started with BOM, must put first characters to buffer 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   872
		if (!isBomFile) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   873
			pushIn.unread(bomBytes, 0, READ_BYTES);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   874
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   875
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   876
		InputStreamReader isr = new InputStreamReader(pushIn, FileUtils.ENCODING_TYPE_UTF_8);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   877
		BufferedReader br = new BufferedReader(isr);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   878
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   879
		String line;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   880
		while ((line = br.readLine()) != null) {			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   881
			buf.append(line);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   882
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   883
		String xmlString = buf.toString();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   884
		// Closing streams
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   885
		pushIn.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   886
		br.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   887
		isr.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   888
		return xmlString;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   889
	}	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   890
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   891
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   892
	 * Get xml String from stream
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   893
	 * @param is
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   894
	 * @param character set
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   895
	 * @return
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   896
	 * @throws CoreException
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   897
	 * @throws IOException
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   898
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   899
	private String getFileContentsWithCharSet(InputStream is, String charset) throws CoreException,
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   900
			IOException {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   901
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   902
		if(charset == null){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   903
			charset = FileUtils.ENCODING_TYPE_UTF_8;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   904
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   905
		if(charset.equalsIgnoreCase(FileUtils.ENCODING_TYPE_UTF_8)){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   906
			return getFileContentsAsUTF8(is);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   907
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   908
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   909
		StringBuffer buf = new StringBuffer();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   910
		InputStreamReader isr = new InputStreamReader(is, charset);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   911
		BufferedReader br = new BufferedReader(isr);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   912
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   913
		String line;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   914
		while ((line = br.readLine()) != null) {			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   915
			buf.append(line);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   916
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   917
		String xmlString = buf.toString();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   918
		// Closing streams
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   919
		is.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   920
		br.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   921
		isr.close();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   922
		return xmlString;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   923
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   924
	}		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   925
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   926
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   927
	 * Setting editor title as file name
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   928
	 * @param editorInput
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   929
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   930
	private void setTitle(IEditorInput editorInput) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   931
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   932
		if (editorInput instanceof IFileEditorInput) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   933
			IFileEditorInput iFile = (IFileEditorInput) editorInput;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   934
			IFile file = iFile.getFile();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   935
			setPartName(file.getName());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   936
		} else if (editorInput instanceof IPathEditorInput) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   937
			IPath path = ((IPathEditorInput) editorInput).getPath();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   938
			String filename = path.lastSegment();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   939
			setPartName(filename);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   940
		}else if (editorInput instanceof FileStoreEditorInput) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   941
			FileStoreEditorInput inp = ((FileStoreEditorInput) editorInput);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   942
			String filename = inp.getName();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   943
			setPartName(filename);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   944
		}		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   945
	}	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   946
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   947
	/* (non-Javadoc)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   948
	 * Method declared on IEditorPart.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   949
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   950
	public boolean isSaveAsAllowed() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   951
		return true;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   952
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   953
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   954
	 * Calculates the contents of page 2 when the it is activated.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   955
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   956
	protected void pageChange(int newPageIndex) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   957
		super.pageChange(newPageIndex);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   958
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   959
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   960
	 * Closes all project files on project close.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   961
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   962
	public void resourceChanged(final IResourceChangeEvent event){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   963
		if(event.getType() == IResourceChangeEvent.PRE_CLOSE){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   964
			Display.getDefault().asyncExec(new Runnable(){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   965
				public void run(){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   966
					IWorkbenchPage[] pages = getSite().getWorkbenchWindow().getPages();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   967
					for (int i = 0; i<pages.length; i++){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   968
						if(((FileEditorInput)editor.getEditorInput()).getFile().getProject().equals(event.getResource())){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   969
							IEditorPart editorPart = pages[i].findEditor(editor.getEditorInput());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   970
							pages[i].closeEditor(editorPart,true);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   971
						}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   972
					}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   973
				}            
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   974
			});
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   975
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   976
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   977
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   978
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   979
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   980
	 * Get Arial Unicode MS font
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   981
	 * @return
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   982
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   983
	private Font getUnicodeFont() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   984
		Font defaultFont = componentsList.getFont();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   985
		FontData defaulFD [] = defaultFont.getFontData();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   986
		//Font Arial Unicode MS is Supplied with Microsoft Office 2002 (XP) and Microsoft Office 2003.
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   987
		//@see http://www.alanwood.net/unicode/fonts.html
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   988
		FontData fd = new FontData("Arial Unicode MS", defaulFD[0].getHeight(),  defaulFD[0].getStyle());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   989
		return new Font(Display.getCurrent(), fd);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   990
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   991
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   992
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   993
	 * Parse xml String to XML object
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   994
	 * @param fileName
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   995
	 * @return
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   996
	 * @throws MetadataNotValidException
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   997
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   998
	private Components parseXML(String fileName, InputStream inUTF8)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
   999
			throws CreatorScriptNotValidException {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1000
		CreatorXMLParser parser = new CreatorXMLParser();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1001
		//This can be optimized by sending Reader as parameter instead of Stream,
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1002
		//That will also require logic update when opening file and checking how file was opened 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1003
		//(was it a new file, project file or outside of the project file)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1004
		Components comps = parser.parse(inUTF8);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1005
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1006
		if(parser.wasErrors()){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1007
			showErrorDialog("Errors on parsing", 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1008
					"There was some errors when parsing file: " +fileName, 
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1009
					parser.getErrors());
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1010
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1011
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1012
		return comps;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1013
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1014
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1015
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1016
	/* (non-Javadoc)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1017
	 * @see com.nokia.s60tools.creator.editors.IComponentProvider#getComponents()
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1018
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1019
	public Components getComponents() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1020
		return components;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1021
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1022
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1023
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1024
	 * Get selected component
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1025
	 * @param selectionIndex
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1026
	 * @return Component
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1027
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1028
	private AbstractComponent getComponentBySelection(int selectionIndex) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1029
		String componentToString = componentsList.getItem(selectionIndex);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1030
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1031
//		AbstractComponent comp = (AbstractComponent)componentsList.getData("" +selectionIndex);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1032
		AbstractComponent comp = getComponents().getComponentByComponentString(componentToString);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1033
		return comp;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1034
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1035
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1036
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1037
	 * Show an error dialog
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1038
	 * @param title
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1039
	 * @param message
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1040
	 * @param errors
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1041
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1042
	private void showErrorDialog(String title, String message, String errors) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1043
		Status status = new Status(IStatus.ERROR,
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1044
				"com.nokia.s60tools.metadataeditor", 0, errors, null);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1045
		Shell sh;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1046
		if (getContainer() != null) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1047
			try {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1048
				sh = getContainer().getShell();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1049
			} catch (SWTException e) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1050
				sh = CreatorActivator.getCurrentlyActiveWbWindowShell();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1051
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1052
		} else {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1053
			sh = CreatorActivator.getCurrentlyActiveWbWindowShell();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1054
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1055
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1056
		ErrorDialog.openError(sh, title, message, status);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1057
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1058
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1059
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1060
	 * Show an information dialog
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1061
	 * @param title
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1062
	 * @param message
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1063
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1064
	@SuppressWarnings("unused")
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1065
	private void showInformationDialog(String title, String message) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1066
		Shell sh;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1067
		if (getContainer() != null) {			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1068
			try {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1069
				sh = getContainer().getShell();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1070
			} catch (SWTException e) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1071
				sh = CreatorActivator.getCurrentlyActiveWbWindowShell();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1072
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1073
			
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1074
		} else {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1075
			sh = CreatorActivator.getCurrentlyActiveWbWindowShell();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1076
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1077
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1078
		MessageDialog.openInformation(sh, title, message);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1079
	}	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1080
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1081
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1082
	 * If data is modified, editor is dirty and can be saved
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1083
	 * NOTE: If editor data is changed and then changed back to original
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1084
	 * data contents, status still remain as dirty
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1085
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1086
	public boolean isDirty() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1087
		return this.isDirty;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1088
	}	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1089
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1090
	/**
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1091
	 * If editor contents is modified, save is allowed
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1092
	 * @param isDirty
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1093
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1094
	private void setDirty(boolean isDirty) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1095
		this.isDirty = isDirty;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1096
		if(runInDeviceButton!=null){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1097
			runInDeviceButton.setEnabled(!isDirty);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1098
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1099
		if (isDirty) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1100
			firePropertyChange(PROP_DIRTY);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1101
		} else {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1102
			firePropertyChange(PROP_INPUT);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1103
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1104
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1105
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1106
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1107
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1108
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1109
	/* (non-Javadoc)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1110
	 * @see com.nokia.s60tools.creator.editors.IComponentProvider#getComponents(java.lang.String)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1111
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1112
	public Vector<AbstractComponent> getComponents(String type) {		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1113
		return getComponents().getComponents(type);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1114
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1115
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1116
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1117
	/* (non-Javadoc)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1118
	 * @see com.nokia.s60tools.creator.editors.IComponentProvider#getEditable()
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1119
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1120
	public AbstractComponent getEditable() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1121
		//Get a dialog by selection type
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1122
		int compIndex = componentsList.getSelectionIndex();
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1123
		AbstractComponent comp = null;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1124
		if(compIndex != -1){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1125
			comp = getComponentBySelection(compIndex);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1126
		}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1127
		return comp;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1128
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1129
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1130
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1131
	public boolean isInEditMode() {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1132
		return isEditLaunched ;
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1133
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1134
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1135
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1136
	/* (non-Javadoc)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1137
	 * @see com.nokia.s60tools.creator.editors.IComponentProvider#addComponent(com.nokia.s60tools.creator.components.AbstractComponent)
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1138
	 */
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1139
	public void addComponent(AbstractComponent comp, IAddComponentListener listener) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1140
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1141
		//Adding a component to list, currently using outside of editor only when a contact set is created by dialog, not by editor
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1142
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1143
		if (comp.isValid()) {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1144
			getComponents().addComponent(comp);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1145
			addComponentToList(comp, componentsList);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1146
			setDirty(true);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1147
			if(listener != null){
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1148
				// tell listeners that a component was added to list
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1149
				listener.componentAdded(comp);
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1150
			}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1151
		} else {
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1152
			// Error handling
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1153
			showErrorDialog("Component is not valid",
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1154
					"Component added is not valid",
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1155
					"Not valid component");
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1156
		}		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1157
		
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1158
	}
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1159
	
61163b28edca initial EPL conversion
dpodwall
parents:
diff changeset
  1160
}