/** * Creates a compilation unit. * * @exception ModelException if unable to create the compilation unit. */ protected void executeOperation() throws ModelException { try { // beginTask(Messages.operation_createUnitProgress, 2); ModelElementDelta delta = newModelElementDelta(); ISourceModule unit = getSourceModule(); IScriptFolder pkg = (IScriptFolder) getParentElement(); IContainer folder = (IContainer) pkg.getResource(); worked(1); IFile compilationUnitFile = folder.getFile(new Path(fName)); if (compilationUnitFile.exists()) { // update the contents of the existing unit if fForce is true if (force) { IBuffer buffer = unit.getBuffer(); if (buffer == null) return; buffer.setContents(fSource); unit.save(new NullProgressMonitor(), false); resultElements = new IModelElement[] {unit}; if (!Util.isExcluded(unit) && unit.getParent().exists()) { for (int i = 0; i < resultElements.length; i++) { delta.changed(resultElements[i], IModelElementDelta.F_CONTENT); } addDelta(delta); } } else { throw new ModelException( new ModelStatus( IModelStatusConstants.NAME_COLLISION, Messages.bind( Messages.status_nameCollision, compilationUnitFile.getFullPath().toString()))); } } else { try { String encoding = null; try { encoding = folder.getDefaultCharset(); // get folder encoding as file is not accessible } catch (CoreException ce) { // use no encoding } InputStream stream = new ByteArrayInputStream( encoding == null ? fSource.getBytes() : fSource.getBytes(encoding)); createFile(folder, unit.getElementName(), stream, force); resultElements = new IModelElement[] {unit}; if (!Util.isExcluded(unit) && unit.getParent().exists()) { for (int i = 0; i < resultElements.length; i++) { delta.added(resultElements[i]); } addDelta(delta); } } catch (IOException e) { throw new ModelException(e, IModelStatusConstants.IO_EXCEPTION); } } worked(1); } finally { done(); } }
/** * Execute the operation - creates the new script folder and any side effect folders. * * @exception ModelException if the operation is unable to complete */ @Override protected void executeOperation() throws ModelException { ModelElementDelta delta = null; IProjectFragment root = (IProjectFragment) getParentElement(); beginTask(Messages.operation_createScriptFolderProgress, this.pkgName.segmentCount()); IContainer parentFolder = (IContainer) root.getResource(); IPath sideEffectPackageName = Path.EMPTY; ArrayList<IScriptFolder> results = new ArrayList<IScriptFolder>(this.pkgName.segmentCount()); int i; for (i = 0; i < this.pkgName.segmentCount(); i++) { String subFolderName = this.pkgName.segment(i); sideEffectPackageName = sideEffectPackageName.append(subFolderName); IResource subFolder = parentFolder.findMember(subFolderName); if (subFolder == null) { createFolder(parentFolder, subFolderName, force); parentFolder = parentFolder.getFolder(new Path(subFolderName)); IScriptFolder addedFrag = root.getScriptFolder(sideEffectPackageName); if (!Util.isExcluded(parentFolder, root)) { if (delta == null) { delta = newModelElementDelta(); } delta.added(addedFrag); } results.add(addedFrag); } else { parentFolder = (IContainer) subFolder; } worked(1); } if (results.size() > 0) { this.resultElements = new IModelElement[results.size()]; results.toArray(this.resultElements); if (delta != null) { addDelta(delta); } } done(); }