/**
* 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 - Initial API and implementation
*/
package org.eclipse.emf.importer.ui.contribution.base;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.converter.ui.contribution.base.ModelConverterPackagePage;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.importer.ImporterPlugin;
import org.eclipse.emf.importer.ModelImporter;
/**
* @since 2.2.0
*/
public class ModelImporterPackagePage extends ModelConverterPackagePage implements IModelImporterPage
{
public ModelImporterPackagePage(ModelImporter modelImporter, String pageName)
{
super(modelImporter, pageName);
setDescription(ImporterPlugin.INSTANCE.getString("_UI_PackageSelection_description"));
}
public ModelImporter getModelImporter()
{
return (ModelImporter)getModelConverter();
}
@Override
protected void adjustEPackagesTableViewer(CheckboxTableViewer ePackagesTableViewer)
{
super.adjustEPackagesTableViewer(ePackagesTableViewer);
createEPackagesTableEditor();
}
@Override
protected boolean validateEPackageData(EPackage ePackage, String data)
{
return validateEcoreModelFileName(data, null);
}
@Override
protected void setEPackageData(EPackage ePackage, String data)
{
ModelImporter.EPackageImportInfo ePackageInfo = getModelImporter().getEPackageImportInfo(ePackage);
ePackageInfo.setEcoreFileName(data);
}
@Override
protected String getEPackageData(EPackage ePackage)
{
return getModelImporter().getEPackageImportInfo(ePackage).getEcoreFileName();
}
@Override
protected String getLabel(EPackage ePackage)
{
String result = super.getLabel(ePackage);
String basePackage = getModelImporter().getEPackageImportInfo(ePackage).getBasePackage();
if (basePackage != null)
{
result = basePackage + "." + result;
}
return result;
}
@Override
protected String getEPackageDataColumnLabel()
{
return ImporterPlugin.INSTANCE.getString("_UI_EcoreFileName_label");
}
@Override
protected void validate()
{
super.validate();
if (getErrorMessage() == null)
{
List<EPackage> tableCheckedEPackages = getCheckedEPackages();
for (EPackage ePackage : tableCheckedEPackages)
{
String fileName = getModelImporter().getEPackageImportInfo(ePackage).getEcoreFileName();
if (!validateEcoreModelFileName(fileName, ePackage.getName()))
{
return;
}
}
setErrorMessage(checkEcoreFileNames());
}
}
@Override
protected String getPackagesLabel()
{
return ImporterPlugin.INSTANCE.getString("_UI_RootPackages_label");
}
protected boolean validateEcoreModelFileName(String fileName, String packageName)
{
Diagnostic diagnostic = getModelImporter().checkEcoreModelFileName(fileName, packageName);
handleDiagnostic(diagnostic);
return diagnostic.getSeverity() == Diagnostic.OK;
}
/**
* Checks the ecore file names and returns null if everything is
* OK or the error message otherwise.
* @return String
*/
protected String checkEcoreFileNames()
{
Set<String> fileNames = new HashSet<String>();
int checkedCount = 0;
Table table = ePackagesCheckboxTableViewer.getTable();
TableItem[] tableItems = table.getItems();
for (int i = 0; i < tableItems.length; i++)
{
if (tableItems[i].getChecked())
{
checkedCount++;
fileNames.add(tableItems[i].getText(1));
}
}
return fileNames.size() < checkedCount ? ImporterPlugin.INSTANCE.getString("_UI_DuplicateEcoreNames_message") : null;
}
@Override
protected void addReferencedGenModels(List<GenModel> genModels)
{
super.addReferencedGenModels(genModels);
if (getModelImporter().getOriginalGenModel() != null)
{
LOOP:
for (GenPackage genPackage : getModelImporter().getOriginalGenModel().getUsedGenPackages())
{
GenModel genModel = genPackage.getGenModel();
if (genModel != null)
{
URI genModelURI = genModel.eResource().getURI();
for (GenModel otherGenModel : genModels)
{
if (genModelURI.equals(otherGenModel.eResource().getURI()))
{
continue LOOP;
}
}
genModels.add(genModel);
}
}
}
}
}