1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-01 14:15:23 +02:00

[372674] Enhancement - Preserve state of Remote Monitor view

This commit is contained in:
David McKnight 2012-03-08 17:42:27 +00:00
parent 1768999c02
commit d194b3a2a6
6 changed files with 509 additions and 31 deletions

View file

@ -25,8 +25,8 @@
* David Dykstal (IBM) - [188150] adding "go up one level" tooltip
* David Dykstal (IBM) - [233678] title string is constructed by concatenation, should be substituted
* David McKnight (IBM) - [248922] [dnd] Remote to local overwrite copy does not work
* Anna Dushistova (MontaVista) - [352072] RSE attempts to use proxy where it should not
*******************************************************************************/
* David McKnight (IBM) - [372674] Enhancement - Preserve state of Remote Monitor view
*******************************************************************************/
package org.eclipse.rse.internal.ui;
@ -1052,6 +1052,9 @@ public class SystemResources extends NLS
// collision dialog when copying from RSE resources to Eclipse resources
public static String RESID_COLLISION_DUPLICATE_RESOURCE_TITLE;
public static String RESID_COLLISION_OVERWRITE_RESOURCE_MESSAGE;
public static String RESID_RESTORE_RSE_TABLE_JOB;
public static String RESID_RESTORE_RSE_MONITOR_JOB;
static {
// load message values from bundle file

View file

@ -29,6 +29,7 @@
# David McKnight (IBM) - [248922] [dnd] Remote to local overwrite copy does not work
# David McKnight (IBM) - [287066] TVT35:TCT635: PLK: dots at ends of tooltips
# Anna Dushistova (MontaVista) - [352072] RSE attempts to use proxy where it should not
# David McKnight (IBM) - [372674] Enhancement - Preserve state of Remote Monitor view
################################################################################
# NLS_MESSAGEFORMAT_VAR
@ -1099,3 +1100,7 @@ SystemTypeFieldEditor_true=true
# collision dialog when copying from RSE to eclipse workspace
RESID_COLLISION_DUPLICATE_RESOURCE_TITLE=Resource Exists
RESID_COLLISION_OVERWRITE_RESOURCE_MESSAGE=The resource {0} already exists. Do you want to overwrite it?
RESID_RESTORE_RSE_TABLE_JOB=Restoring RSE table...
RESID_RESTORE_RSE_MONITOR_JOB=Restoring RSE monitor...

View file

@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (c) 2002, 2011 IBM Corporation and others. All rights reserved.
* Copyright (c) 2002, 2012 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
@ -47,6 +47,7 @@
* David McKnight (IBM) - [341240] Remote Systems Details view not remembering locked/unlocked state between sessions
* David McKnight (IBM) - [341244] folder selection input to unlocked Remote Systems Details view sometimes fails
* David McKnight (IBM) - [363829] Closing Eclipse with a populated Remote System Details view forces a remote system connection
* David McKnight (IBM) - [372674] Enhancement - Preserve state of Remote Monitor view
*******************************************************/
package org.eclipse.rse.internal.ui.view;
@ -681,7 +682,7 @@ public class SystemTableViewPart extends ViewPart
private IMemento _rmemento;
public RestoreStateRunnable(IMemento memento)
{
super("Restore RSE Table"); //$NON-NLS-1$
super(SystemResources.RESID_RESTORE_RSE_TABLE_JOB);
_rmemento = memento;
}
@ -1839,9 +1840,7 @@ public class SystemTableViewPart extends ViewPart
{
RestoreStateRunnable rsr = new RestoreStateRunnable(memento);
rsr.setRule(RSECorePlugin.getTheSystemRegistry());
rsr.setSystem(true);
rsr.schedule();
rsr.schedule();
}
/**

View file

@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (c) 2002, 2011 IBM Corporation and others. All rights reserved.
* Copyright (c) 2002, 2012 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
@ -19,6 +19,7 @@
* Kevin Doyle (IBM) - [212940] Duplicate Help Context Identifiers
* David McKnight (IBM) - [225506] [api][breaking] RSE UI leaks non-API types
* David McKnight (IBM) - [330398] RSE leaks SWT resources
* David McKnight (IBM) - [372674] Enhancement - Preserve state of Remote Monitor view
********************************************************************************/
package org.eclipse.rse.internal.ui.view.monitor;
@ -109,12 +110,10 @@ FocusListener
try
{
Thread.sleep(interval);
doQuery();
// while (_querying)
// {
// Thread.sleep(100);
// }
doRedraw();
if (isPollingEnabled()){
doQuery();
doRedraw();
}
}
catch (InterruptedException e)
{
@ -299,6 +298,14 @@ FocusListener
//setActionHandlers();
}
public void setPollingInterval(int interval){
_pollingInterval = interval;
if (_scale != null){
_scaleValue.setText(_pollingInterval + "s"); //$NON-NLS-1$
_scale.setSelection(_pollingInterval);
}
}
public int getPollingInterval()
{
return _pollingInterval;
@ -316,6 +323,16 @@ FocusListener
public void setPollingEnabled(boolean flag)
{
_isPolling = flag;
if (_pollCheckbox != null){
_pollCheckbox.setSelection(_isPolling);
_scale.setEnabled(_isPolling);
_scaleValue.setEnabled(_isPolling);
if (_pollingThread == null){
_pollingThread = new PollingThread();
_pollingThread.start();
}
}
}
public void setEnabled(boolean flag)
@ -490,10 +507,11 @@ FocusListener
public void updateTitle(IAdaptable object)
{
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)object.getAdapter(ISystemViewElementAdapter.class);
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)object.getAdapter(ISystemViewElementAdapter.class);
if (adapter != null){
String title = adapter.getText(object);
_tabFolderPage.setText(title);
}
}
public String getTitle()

View file

@ -28,6 +28,8 @@ import org.eclipse.rse.ui.view.SystemTableView;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
@ -48,7 +50,7 @@ public class MonitorViewWorkbook extends Composite
{
super(parent, SWT.NONE);
_folder = new CTabFolder(this, SWT.NONE);
_folder = new CTabFolder(this, SWT.NULL);
_folder.setLayout(new TabFolderLayout());
_folder.setLayoutData(new GridData(GridData.FILL_BOTH));
setLayout(new FillLayout());
@ -157,8 +159,10 @@ public class MonitorViewWorkbook extends Composite
if (_folder.getItemCount() > 0)
{
int index = _folder.getSelectionIndex();
CTabItem item = _folder.getItem(index);
return (MonitorViewPage) item.getData();
if (index >= 0){
CTabItem item = _folder.getItem(index);
return (MonitorViewPage) item.getData();
}
}
return null;
}
@ -223,7 +227,7 @@ public class MonitorViewWorkbook extends Composite
{
MonitorViewPage monitorViewPage = new MonitorViewPage(_viewPart);
CTabItem titem = new CTabItem(_folder, SWT.NULL);
CTabItem titem = new CTabItem(_folder, SWT.CLOSE);
setTabTitle(root, titem);
titem.setData(monitorViewPage);
@ -240,6 +244,23 @@ public class MonitorViewWorkbook extends Composite
_viewPart.getSite().registerContextMenu(ISystemContextMenuConstants.RSE_CONTEXT_MENU, viewer.getContextMenuManager(), viewer);
}
monitorViewPage.setFocus();
titem.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
Object source = e.getSource();
if (source instanceof CTabItem) {
CTabItem currentItem = (CTabItem) source;
Object data = currentItem.getData();
if (data instanceof MonitorViewPage) {
MonitorViewPage page = (MonitorViewPage)data;
page.setPollingEnabled(false); // stop polling
page.dispose();
}
updateActionStates();
}
}
});
}
private void setTabTitle(IAdaptable root, CTabItem titem)

View file

@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (c) 2002, 2011 IBM Corporation and others. All rights reserved.
* Copyright (c) 2002, 2012 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
@ -23,14 +23,23 @@
* Zhou Renjian (Kortide) - [282239] Monitor view does not update icon according to connection status
* David McKnight (IBM) - [294663] bad cast in monitor view part refresh action
* David McKnight (IBM) - [340912] inconsistencies with columns in RSE table viewers
* David McKnight (IBM) - [372674] Enhancement - Preserve state of Remote Monitor view
********************************************************************************/
package org.eclipse.rse.internal.ui.view.monitor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.action.IToolBarManager;
@ -48,13 +57,19 @@ import org.eclipse.rse.core.events.ISystemRemoteChangeListener;
import org.eclipse.rse.core.events.ISystemResourceChangeEvent;
import org.eclipse.rse.core.events.ISystemResourceChangeEvents;
import org.eclipse.rse.core.events.ISystemResourceChangeListener;
import org.eclipse.rse.core.filters.ISystemFilterReference;
import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.model.IRSECallback;
import org.eclipse.rse.core.model.ISystemContainer;
import org.eclipse.rse.core.model.ISystemProfile;
import org.eclipse.rse.core.model.ISystemRegistry;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.internal.ui.SystemPropertyResources;
import org.eclipse.rse.internal.ui.SystemResources;
import org.eclipse.rse.services.clientserver.messages.SystemMessage;
import org.eclipse.rse.ui.ISystemIconConstants;
import org.eclipse.rse.ui.RSEUIPlugin;
import org.eclipse.rse.ui.SystemPreferencesManager;
import org.eclipse.rse.ui.SystemWidgetHelpers;
import org.eclipse.rse.ui.dialogs.SystemPromptDialog;
import org.eclipse.rse.ui.messages.ISystemMessageLine;
@ -65,6 +80,8 @@ import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
import org.eclipse.rse.ui.view.SystemTableView;
import org.eclipse.rse.ui.view.SystemTableViewProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
@ -81,9 +98,12 @@ import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.ISelectionService;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.CellEditorActionHandler;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
@ -104,14 +124,290 @@ public class SystemMonitorViewPart
IRSEViewPart,
ISelectionProvider
{
class RestoreStateRunnable implements Runnable
class RestoreStateRunnable extends Job
{
public void run()
{
}
private IMemento _rmemento;
public RestoreStateRunnable(IMemento memento)
{
super(SystemResources.RESID_RESTORE_RSE_MONITOR_JOB);
_rmemento = memento;
}
public IStatus run(IProgressMonitor monitor)
{
try {
IStatus wstatus = RSECorePlugin.waitForInitCompletion();
if (!wstatus.isOK() && wstatus.getSeverity() == IStatus.ERROR){
return wstatus;
}
}
catch (InterruptedException e){
return Status.CANCEL_STATUS;
}
Integer tabCountInt = _memento.getInteger(TAG_MONITOR_TAB_COUNT_ID);
if (tabCountInt != null){
int tabCount = tabCountInt.intValue();
for (int i = 0; i < tabCount && !monitor.isCanceled(); i++){
restoreTab(i, monitor);
}
}
return Status.OK_STATUS;
}
protected void restoreTab(int index, IProgressMonitor monitor){
final IMemento memento = _rmemento;
// matches new format for column width memento
// new code - as of RSE 3.1
final HashMap cachedColumnWidths = new HashMap();
// set the cached column widths (for later use)
String columnWidths = memento.getString(TAG_MONITOR_TAB_COLUMN_WIDTHS_ID+index);
if (columnWidths != null){
if (columnWidths.indexOf(";") > 0){ //$NON-NLS-1$
// parse out set of columns
String[] columnSets = columnWidths.split(";"); //$NON-NLS-1$
for (int i = 0; i < columnSets.length; i++){
String columnSet = columnSets[i];
// parse out columns for set
String[] pair = columnSet.split("="); //$NON-NLS-1$
String key = pair[0];
// parse out widths
String widthArray = pair[1];
String[] widthStrs = widthArray.split(","); //$NON-NLS-1$
int[] widths = new int[widthStrs.length];
for (int w = 0; w < widths.length; w++){
widths[w] = Integer.parseInt(widthStrs[w]);
}
cachedColumnWidths.put(key, widths);
}
}
}
Boolean pollingOnBool = memento.getBoolean(TAG_MONITOR_TAB_POLLING_ON_ID+index);
Integer pollingIntervalInteger = memento.getInteger(TAG_MONITOR_TAB_POLLING_INTERVAL_ID+index);
boolean pollingOn = false;
int pollingInterval = 100;
if (pollingOnBool != null){
pollingOn = pollingOnBool.booleanValue();
}
if (pollingIntervalInteger != null){
pollingInterval = pollingIntervalInteger.intValue();
}
String profileId = memento.getString(TAG_MONITOR_TAB_PROFILE_ID+index);
String connectionId = memento.getString(TAG_MONITOR_TAB_CONNECTION_ID+index);
String subsystemId = memento.getString(TAG_MONITOR_TAB_SUBSYSTEM_ID+index);
final String filterID = memento.getString(TAG_MONITOR_TAB_FILTER_ID+index);
final String objectID = memento.getString(TAG_MONITOR_TAB_OBJECT_ID+index);
ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry();
Object input = null;
if (subsystemId == null){
if (connectionId != null){
ISystemProfile profile = registry.getSystemProfile(profileId);
input = registry.getHost(profile, connectionId);
}
else{
// 191288 we now use registry instead of registry ui as input
input = registry;
}
}
else {
// from the subsystem ID determine the profile, system and subsystem
final ISubSystem subsystem = registry.getSubSystem(subsystemId);
if (subsystem != null) {
if (filterID == null && objectID == null) {
input = subsystem;
}
else {
if (!subsystem.isConnected()) {
try {
final Object finInput = input;
final boolean fpollingOn = pollingOn;
final int fpollingInterval = pollingInterval;
subsystem.connect(false, new IRSECallback() {
public void done(IStatus status, Object result) {
// this needs to be done on the main thread
// so doing an asynchExec()
runOnceConnected(new NullProgressMonitor(), finInput, subsystem, filterID, objectID, cachedColumnWidths, fpollingOn, fpollingInterval);
}
});
}
catch (Exception e) {
}
}
else {
runOnceConnected(monitor, input, subsystem, filterID, objectID, cachedColumnWidths, pollingOn, pollingInterval);
}
return;
} // end else
} // end if (subsystem != null)
} // end else
if (input != null){
runWithInput(monitor, input, cachedColumnWidths, pollingOn, pollingInterval);
}
}
public IStatus runOnceConnected(IProgressMonitor monitor, Object input, ISubSystem subsystem, String filterID, String objectID,
HashMap cachedColumnWidths, boolean pollingOn, int pollingInterval)
{
if (monitor.isCanceled()){
return Status.CANCEL_STATUS;
}
if (subsystem.isConnected()) {
if (filterID != null) {
try {
input = subsystem.getObjectWithAbsoluteName(filterID, monitor);
}
catch (Exception e) {
//ignore
}
}
else {
if (objectID != null) {
try {
input = subsystem.getObjectWithAbsoluteName(objectID, monitor);
}
catch (Exception e) {
return Status.CANCEL_STATUS;
}
}
} // end else
} // end if (subsystem.isConnected)
if (input != null){
runWithInput(monitor, input, cachedColumnWidths, pollingOn, pollingInterval);
return Status.OK_STATUS;
}
else {
return Status.CANCEL_STATUS;
}
}
private class WaitForAdapterJob extends Job {
private IAdaptable _input;
private HashMap _cachedColumnWidths;
private boolean _pollingOn;
private int _pollingInterval;
public WaitForAdapterJob(IAdaptable input, HashMap cachedColumnWidths, boolean pollingOn, int pollingInterval){
super(SystemResources.RESID_RESTORE_RSE_MONITOR_JOB);
_input = input;
_cachedColumnWidths = cachedColumnWidths;
_pollingOn = pollingOn;
_pollingInterval = pollingInterval;
}
protected IStatus run(IProgressMonitor monitor) {
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)_input.getAdapter(ISystemViewElementAdapter.class);
while (adapter == null || monitor.isCanceled()){
try {
synchronized (_input){
_input.wait(1000);
}
} catch (InterruptedException e) {
}
adapter = (ISystemViewElementAdapter)_input.getAdapter(ISystemViewElementAdapter.class);
}
if (monitor.isCanceled()){
return Status.CANCEL_STATUS;
}
// got an adapter now
// set input needs to be run on the main thread
Display.getDefault().asyncExec(new Runnable()
{
public void run(){
addItemToMonitor(_input);
MonitorViewPage page = _folder.getCurrentTabItem(); // get the viewer
// restore column widths
page.getViewer().setCachedColumnWidths(_cachedColumnWidths);
// restoring polling
page.setPollingEnabled(_pollingOn);
page.setPollingInterval(_pollingInterval);
}
});
return Status.OK_STATUS;
}
}
public IStatus runWithInput(IProgressMonitor monitor, Object input, HashMap cachedColumnWidths, boolean pollingOn, int pollingInterval)
{
if (input != null && input instanceof IAdaptable){
final IAdaptable mementoInput = (IAdaptable) input;
final HashMap fcachedColumnWidths = cachedColumnWidths;
final boolean fpollingOn = pollingOn;
final int fpollingInterval = pollingInterval;
if (mementoInput != null)
{
// first make sure the adapter factories are ready
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)mementoInput.getAdapter(ISystemViewElementAdapter.class);
if (adapter == null){
WaitForAdapterJob job = new WaitForAdapterJob(mementoInput, cachedColumnWidths, pollingOn, pollingInterval);
job.schedule();
}
else {
// set input needs to be run on the main thread
Display.getDefault().asyncExec(new Runnable(){
public void run(){
addItemToMonitor(mementoInput);
MonitorViewPage page = _folder.getCurrentTabItem(); // get the viewer
// restore column widths
page.getViewer().setCachedColumnWidths(fcachedColumnWidths);
// restoring polling
page.setPollingEnabled(fpollingOn);
page.setPollingInterval(fpollingInterval);
}
});
}
}
}
return Status.OK_STATUS;
}
}
// Restore memento tags
public static final String TAG_MONITOR_TAB_COUNT_ID = "monitorTabCountID"; //$NON-NLS-1$
public static final String TAG_MONITOR_TAB_PROFILE_ID = "monitorTabProfileID_"; //$NON-NLS-1$
public static final String TAG_MONITOR_TAB_CONNECTION_ID = "monitorTabConnectionID_"; //$NON-NLS-1$
public static final String TAG_MONITOR_TAB_SUBSYSTEM_ID = "monitorTabSubsystemID_"; //$NON-NLS-1$
public static final String TAG_MONITOR_TAB_OBJECT_ID = "monitorTabObjectID_"; //$NON-NLS-1$
public static final String TAG_MONITOR_TAB_FILTER_ID = "monitorTabFilterID_"; //$NON-NLS-1$
// Subset memento tags
public static final String TAG_MONITOR_TAB_SUBSET_ID = "monitorTabSubsetID_"; //$NON-NLS-1$
// polling
public static final String TAG_MONITOR_TAB_POLLING_ON_ID = "monitorTabPollingOnID_"; //$NON-NLS-1$
public static final String TAG_MONITOR_TAB_POLLING_INTERVAL_ID= "monitorTabPollingIntervalID_"; // $NON-NLS-1$
// layout memento tags
public static final String TAG_MONITOR_TAB_COLUMN_WIDTHS_ID = "monitorTabColumnWidths_"; //$NON-NLS-1$
class PositionToAction extends BrowseAction
{
class PositionToDialog extends SystemPromptDialog
@ -669,8 +965,15 @@ class SubSetAction extends BrowseAction
public static final String ID = "org.eclipse.rse.ui.view.monitorView"; //$NON-NLS-1$
// matches id in plugin.xml, view tag
private IMemento _memento = null;
public void setFocus()
{
if (_folder.getInput() == null){
if (_memento != null){
restoreState(_memento);
}
}
_folder.showCurrentPage();
}
@ -713,10 +1016,6 @@ class SubSetAction extends BrowseAction
registry.addSystemResourceChangeListener(this);
registry.addSystemRemoteChangeListener(this);
RestoreStateRunnable restore = new RestoreStateRunnable();
Display.getCurrent().asyncExec(restore);
getSite().setSelectionProvider(this);
selectionListener = new ISelectionChangedListener() {
public void selectionChanged (SelectionChangedEvent event)
@ -1166,5 +1465,138 @@ class SubSetAction extends BrowseAction
menuManager.add(_subsetAction);
}
private void restoreState(IMemento memento)
{
RestoreStateRunnable rsr = new RestoreStateRunnable(memento);
rsr.setRule(RSECorePlugin.getTheSystemRegistry());
rsr.schedule();
}
/**
* Initializes this view with the given view site. A memento is passed to
* the view which contains a snapshot of the views state from a previous
* session. Where possible, the view should try to recreate that state
* within the part controls.
* <p>
* The parent's default implementation will ignore the memento and initialize
* the view in a fresh state. Subclasses may override the implementation to
* perform any state restoration as needed.
*/
public void init(IViewSite site, IMemento memento) throws PartInitException
{
super.init(site, memento);
if (memento != null && SystemPreferencesManager.getRememberState()){
_memento = memento;
}
}
protected void saveTabState(IMemento memento, CTabItem item, int index){
MonitorViewPage page = (MonitorViewPage) item.getData();
Object input = page.getInput();
if (input != null){
if (input instanceof ISystemRegistry){
}
else if (input instanceof IHost){
IHost connection = (IHost) input;
String connectionID = connection.getAliasName();
String profileID = connection.getSystemProfileName();
memento.putString(TAG_MONITOR_TAB_CONNECTION_ID+index, connectionID);
memento.putString(TAG_MONITOR_TAB_PROFILE_ID+index, profileID);
}
else{
ISystemViewElementAdapter va = (ISystemViewElementAdapter) ((IAdaptable) input).getAdapter(ISystemViewElementAdapter.class);
ISubSystem subsystem = va.getSubSystem(input);
if (subsystem != null){
ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry();
String subsystemID = registry.getAbsoluteNameForSubSystem(subsystem);
String profileID = subsystem.getHost().getSystemProfileName();
String connectionID = subsystem.getHost().getAliasName();
String objectID = va.getAbsoluteName(input);
memento.putString(TAG_MONITOR_TAB_PROFILE_ID+index, profileID);
memento.putString(TAG_MONITOR_TAB_CONNECTION_ID+index, connectionID);
memento.putString(TAG_MONITOR_TAB_SUBSYSTEM_ID+index, subsystemID);
if (input instanceof ISystemFilterReference){
memento.putString(TAG_MONITOR_TAB_FILTER_ID+index, objectID);
memento.putString(TAG_MONITOR_TAB_OBJECT_ID+index, null);
}
else if (input instanceof ISubSystem){
memento.putString(TAG_MONITOR_TAB_OBJECT_ID+index, null);
memento.putString(TAG_MONITOR_TAB_FILTER_ID+index, null);
}
else {
memento.putString(TAG_MONITOR_TAB_OBJECT_ID+index, objectID);
memento.putString(TAG_MONITOR_TAB_FILTER_ID+index, null);
}
}
}
boolean isConnected = false;
// don't reconnect
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)((IAdaptable)input).getAdapter(ISystemViewElementAdapter.class);
if (adapter != null){
ISubSystem ss = adapter.getSubSystem(input);
if (ss != null){
isConnected = ss.isConnected();
}
}
SystemTableView viewer = page.getViewer();
if (isConnected){ // calling this requires a connect so only do it if already connected
viewer.inputChanged(input, input);
}
Map cachedColumnWidths = viewer.getCachedColumnWidths();
StringBuffer columnWidths = new StringBuffer();
Iterator keyIter = cachedColumnWidths.keySet().iterator();
while (keyIter.hasNext()){
String key = (String)keyIter.next();
int[] widths = (int[])cachedColumnWidths.get(key);
columnWidths.append(key);
columnWidths.append('=');
for (int w = 0; w < widths.length; w++){
columnWidths.append(widths[w]);
if (w != widths.length - 1){
columnWidths.append(',');
}
}
// always append this, even with last item
columnWidths.append(';');
}
memento.putString(TAG_MONITOR_TAB_COLUMN_WIDTHS_ID+index, columnWidths.toString());
memento.putBoolean(TAG_MONITOR_TAB_POLLING_ON_ID+index, page.isPollingEnabled());
memento.putInteger(TAG_MONITOR_TAB_POLLING_INTERVAL_ID+index, page.getPollingInterval());
}
}
/**
* Method declared on IViewPart.
*/
public void saveState(IMemento memento)
{
super.saveState(memento);
if (!SystemPreferencesManager.getRememberState())
return;
if (_folder != null){
CTabFolder flder = _folder.getFolder();
int itemCount = flder.getItemCount();
memento.putInteger(TAG_MONITOR_TAB_COUNT_ID, itemCount);
for (int i = 0; i < itemCount; i++){
CTabItem item = flder.getItem(i);
saveTabState(memento, item, i);
}
}
}
}