/**
  * 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();
 }