/*******************************************************************************
* Copyright (c) 2013, 2015 Willink Transformations 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:
* E.D.Willink - initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.xtext.oclinecore.ui.wizards;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.resource.ASResource;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.OCL;
import org.eclipse.ocl.xtext.base.ui.wizards.AbstractFileDialog;
import org.eclipse.ocl.xtext.base.ui.wizards.AbstractFileNewWizardPage;
import org.eclipse.ocl.xtext.base.utilities.BaseCSResource;
import org.eclipse.ocl.xtext.oclinecore.ui.messages.OCLinEcoreUIMessages;
/**
* Wizard allowing the user to create a new OCLinEcore file.
*/
public class EcoreWithOCLFileNewWizard extends AbstractOCLinEcoreFileNewWizard
{
private static final Logger logger = Logger.getLogger(EcoreWithOCLFileNewWizard.class);
@Override
protected @NonNull EcoreWithOCLFileDialog createDialog(@NonNull AbstractFileNewWizardPage wizardPage, @Nullable IResource initialSelection) {
return new EcoreWithOCLFileDialog(this, wizardPage, initialSelection);
}
@Override
public @NonNull
String getInitialContentsAsString(@NonNull IFile newFile, @NonNull AbstractFileDialog dialog) {
URI ecoreURI = URI.createPlatformResourceURI(newFile.getFullPath().toString(), true);
URI oclInEcoreURI = ecoreURI.trimFileExtension().appendFileExtension("oclinecore");
String initialContentsAsString = super.getInitialContentsAsString(newFile, dialog);
@SuppressWarnings("null") OCL ocl = OCL.newInstance(EPackage.Registry.INSTANCE);
ResourceSet resourceSet2 = ocl.getResourceSet();
BaseCSResource csResource = ClassUtil.nonNullState((BaseCSResource) resourceSet2.createResource(oclInEcoreURI));
try {
ByteArrayInputStream inputStream = new ByteArrayInputStream(initialContentsAsString.getBytes());
csResource.load(inputStream, null);
ASResource asResource = ocl.cs2as(csResource);
Resource eResource = ocl.as2ecore(asResource, ecoreURI);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
eResource.save(outputStream, null);
@SuppressWarnings("null")@NonNull String string = outputStream.toString();
return string;
} catch (IOException e) {
logger.error("Failed to create " + ecoreURI, e);
}
return initialContentsAsString;
}
@Override
public @NonNull String getNewFileExtension() {
return "ecore";
}
@SuppressWarnings("null")
@Override
public @NonNull String getNewFileLabel() {
return OCLinEcoreUIMessages.Ecore_NewWizardPage_fileNameLabel;
}
@SuppressWarnings("null")
@Override
public @NonNull String getPageDescription() {
return OCLinEcoreUIMessages.Ecore_NewWizardPage_pageDescription;
}
@SuppressWarnings("null")
@Override
public @NonNull String getPageSummary() {
return OCLinEcoreUIMessages.Ecore_NewWizardPage_pageSummary;
}
@SuppressWarnings("null")
@Override
public @NonNull String getPageTitle() {
return OCLinEcoreUIMessages.Ecore_NewWizardPage_pageTitle;
}
}