@Override protected boolean processResources() { if (domain != null) { for (URI uri : getURIs()) { try { if (!processResource(domain.getResourceSet().getResource(uri, true))) { return false; } } catch (RuntimeException exception) { EMFEditUIPlugin.INSTANCE.log(exception); } } } return true; }
/** * Creates and, if it already exists, loads the specified resource. This implementation verifies * that a resource can be opened for that URI, that the resource is not the object's current * container, and that it is not read-only in the editing domain. If there is an existing resource * with that URI, it prompts before overriding or adding to it. * * @see org.eclipse.emf.common.ui.dialogs.ResourceDialog#processResources() */ protected boolean processResources() { URI uri = URI.createURI(getURIText()); ResourceSet resourceSet = domain.getResourceSet(); Resource resource = resourceSet.getResource(uri, false); boolean resourceInSet = resource != null; if (resource == currentResource) { MessageDialog.openError( getShell(), EMFEditUIPlugin.INSTANCE.getString("_UI_InvalidURI_label"), EMFEditUIPlugin.INSTANCE.getString("_WARN_AlreadyInResource")); return false; } if (domain.isReadOnly(resource)) { MessageDialog.openError( getShell(), EMFEditUIPlugin.INSTANCE.getString("_UI_InvalidURI_label"), EMFEditUIPlugin.INSTANCE.getString("_WARN_ReadOnlyResource")); return false; } boolean resourceExists = false; try { InputStream stream = resourceSet.getURIConverter().createInputStream(uri); if (stream != null) { resourceExists = true; stream.close(); } } catch (IOException exception) { // Do nothing } boolean resourceBad = false; if (!resourceInSet) { resource = resourceSet.createResource(uri); if (resource == null) { MessageDialog.openError( getShell(), EMFEditUIPlugin.INSTANCE.getString("_UI_InvalidURI_label"), EMFEditUIPlugin.INSTANCE.getString("_WARN_CannotCreateResource")); return false; } if (resourceExists) { try { resource = resourceSet.getResource(uri, true); } catch (RuntimeException exception) { EMFEditUIPlugin.INSTANCE.log(exception); resourceBad = resource.getContents().isEmpty(); } } } boolean result = true; if (resourceBad) { result = MessageDialog.openQuestion( getShell(), EMFEditUIPlugin.INSTANCE.getString("_UI_ExistingResource_label"), EMFEditUIPlugin.INSTANCE.getString("_WARN_ReplaceResource")); } else if (resourceExists) { result = MessageDialog.openQuestion( getShell(), EMFEditUIPlugin.INSTANCE.getString("_UI_ExistingResource_label"), EMFEditUIPlugin.INSTANCE.getString("_WARN_AddToResource")); } if (!result && !resourceInSet) { resource.unload(); resourceSet.getResources().remove(resource); } else { this.controlResource = resource; } return result; }