diff -r 000000000000 -r 522a326673b6 sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/NodeListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/NodeListener.java Thu Mar 11 19:08:43 2010 +0200 @@ -0,0 +1,102 @@ +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +package com.symbian.smt.gui; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspaceRunnable; +import org.eclipse.core.resources.ProjectScope; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.preferences.IScopeContext; +import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener; +import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent; + +public class NodeListener { + + public NodeListener(final IProject project) { + IScopeContext projectScope = new ProjectScope(project); + + // if name changed in properties + projectScope.getNode(Activator.PLUGIN_ID).addPreferenceChangeListener( + new IPreferenceChangeListener() { + + public void preferenceChange(PreferenceChangeEvent event) { + String key = event.getKey(); + try { + if (key.equals(PersistentSettingsEnums.OUTPUT_NAME + .toString()) + && event.getNewValue() != null) { + final IFile oldfile = project + .getFile((String) event.getOldValue()); + final IFile newfile = project + .getFile((String) event.getNewValue()); + + project.getWorkspace().run( + new IWorkspaceRunnable() { + public void run( + IProgressMonitor monitor) { + if (oldfile.exists()) { + try { + newfile + .create( + oldfile + .getContents(true), + false, + null); + newfile + .setDerived(true); + oldfile.delete(true, + null); + } catch (CoreException e) { + Logger.log(e + .getMessage(), + e); + } + } + } + }, null); + + } else { + Boolean alreadyHasMarker = false; + IMarker[] mMarkers = project.findMarkers( + IMarker.MESSAGE, false, 0); + + for (IMarker aMarker : mMarkers) { + if (aMarker.getAttribute(IMarker.MESSAGE) != null) { + if (aMarker.getAttribute( + IMarker.MESSAGE).equals( + "properties changed")) { + alreadyHasMarker = true; + } + } + } + + if (!alreadyHasMarker) { + IMarker marker = project + .createMarker(IMarker.MESSAGE); + marker.setAttribute(IMarker.MESSAGE, + "properties changed"); + } + } + } catch (CoreException e) { + Logger.log(e.getMessage(), e); + } + } + }); + } +}