alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*******************************************************************************
 * Copyright (c) 2005, 2006 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
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.pde.internal.ui.nls;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Properties;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.pde.core.IModel;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.internal.core.PDEManager;

public class ModelChange {

	private static final String DEFAULT_LOCALIZATION_PREFIX = "plugin"; //$NON-NLS-1$
	public static final String LOCALIZATION_FILE_SUFFIX = ".properties"; //$NON-NLS-1$

	private ModelChangeFile fXMLCoupling;
	private ModelChangeFile fMFCoupling;

	private IPluginModelBase fParent;
	private boolean fPreSelected;

	private String fBundleLocalization;
	private Properties fProperties;
	private boolean fReloadProperties = true;

	protected static boolean modelLoaded(IModel model) {
		try {
			model.load();
		} catch (CoreException e) {
		}
		return (model.isLoaded());
	}

	public ModelChange(IPluginModelBase parent, boolean preSelected) {
		fParent = parent;
		fPreSelected = preSelected;
		fBundleLocalization = PDEManager.getBundleLocalization(fParent);
		if (fBundleLocalization == null)
			fBundleLocalization = DEFAULT_LOCALIZATION_PREFIX;
	}

	public void addChange(IFile file, ModelChangeElement change) {
		if (change == null || file == null)
			return;
		String ext = file.getFileExtension();
		if (ext.equalsIgnoreCase("xml")) //$NON-NLS-1$
			addXMLChange(file, change);
		else if (ext.equalsIgnoreCase("MF")) //$NON-NLS-1$
			addMFChange(file, change);
		else
			return;
	}

	private void addXMLChange(IFile file, ModelChangeElement change) {
		if (fXMLCoupling == null) {
			fXMLCoupling = new ModelChangeFile(file, this);
		}
		if (!fXMLCoupling.getFile().equals(file)) {
			return;
		}
		fXMLCoupling.add(change);
	}

	private void addMFChange(IFile file, ModelChangeElement change) {
		if (fMFCoupling == null) {
			fMFCoupling = new ModelChangeFile(file, this);
		}
		fMFCoupling.add(change);
	}

	public IFile[] getChangeFiles() {
		IFile xmlFile = fXMLCoupling != null ? fXMLCoupling.getFile() : null;
		IFile mfFile = fMFCoupling != null ? fMFCoupling.getFile() : null;
		if (xmlFile != null && mfFile != null)
			return new IFile[] {xmlFile, mfFile};
		if (xmlFile != null)
			return new IFile[] {xmlFile};
		if (mfFile != null)
			return new IFile[] {mfFile};
		return new IFile[0];
	}

	public IFile getPropertiesFile() {
		IProject project = fParent.getUnderlyingResource().getProject();
		return project.getFile(getBundleLocalization() + LOCALIZATION_FILE_SUFFIX);
	}

	public Properties getProperties() {
		if (fProperties == null || fReloadProperties) {
			try {
				fProperties = new Properties();
				IFile propertiesFile = getPropertiesFile();
				if (propertiesFile != null && propertiesFile.exists()) {
					InputStream stream = propertiesFile.getContents();
					fProperties.load(stream);
					stream.close();
				}
			} catch (CoreException e) {
			} catch (IOException e) {
			}
			fReloadProperties = false;
		}
		return fProperties;
	}

	public ArrayList getChangesInFile(IFile file) {
		if (fXMLCoupling != null && file == fXMLCoupling.getFile())
			return fXMLCoupling.getChanges();
		if (fMFCoupling != null && file == fMFCoupling.getFile())
			return fMFCoupling.getChanges();
		return null;
	}

	public int getNumberOfChangesInFile(IFile file) {
		if (fXMLCoupling != null && file == fXMLCoupling.getFile())
			return fXMLCoupling.getNumChanges();
		if (fMFCoupling != null && file == fMFCoupling.getFile())
			return fMFCoupling.getNumChanges();
		return 0;
	}

	public boolean wasPreSelected() {
		return fPreSelected;
	}

	public IPluginModelBase getParentModel() {
		return fParent;
	}

	public ModelChangeFile[] getModelChangeFiles() {
		if (fXMLCoupling != null && fMFCoupling != null)
			return new ModelChangeFile[] {fXMLCoupling, fMFCoupling};
		if (fXMLCoupling != null)
			return new ModelChangeFile[] {fXMLCoupling};
		if (fMFCoupling != null)
			return new ModelChangeFile[] {fMFCoupling};
		return new ModelChangeFile[0];
	}

	public void setBundleLocalization(String bundleLocalization) {
		if (bundleLocalization == null || bundleLocalization.endsWith(LOCALIZATION_FILE_SUFFIX))
			throw new IllegalArgumentException();
		if (bundleLocalization.equals(fBundleLocalization))
			return;
		fBundleLocalization = bundleLocalization;
		fReloadProperties = true;
	}

	public String getBundleLocalization() {
		return fBundleLocalization;
	}

	public boolean localizationSet() {
		String localization = PDEManager.getBundleLocalization(fParent);
		return localization != null && localization.length() > 0;
	}
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.