alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Java example source code file (FileTreeCreatorVC7.java)

This example Java source code file (FileTreeCreatorVC7.java) is included in the alvinalexander.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Learn more about this Java project at its project page.

Java - Java tags/keywords

basicfileattributes, buildconfig, continue, dirattributes, fileconfiguration, filetreecreatorvc7, filevisitresult, ioexception, name, override, string, tool, useprecompiledheader, util, vector

The FileTreeCreatorVC7.java Java example source code

import static java.nio.file.FileVisitResult.CONTINUE;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Stack;
import java.util.Vector;

public class FileTreeCreatorVC7 extends FileTreeCreator {

      public FileTreeCreatorVC7(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatform wg) {
         super(startDir, allConfigs, wg);
      }

      @Override
      public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
         DirAttributes currentFileAttr = attributes.peek().clone();
         boolean usePch = false;
         boolean disablePch = false;
         boolean useIgnore = false;
         String fileName = file.getFileName().toString();

         // usePch applies to all configs for a file.
         if (fileName.equals(BuildConfig.getFieldString(null, "UseToGeneratePch"))) {
            usePch = true;
         }

         for (BuildConfig cfg : allConfigs) {
            if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) {
               useIgnore = true;
               currentFileAttr.setIgnore(cfg);
            } else if (cfg.matchesIgnoredPath(file.toAbsolutePath().toString())) {
               useIgnore = true;
               currentFileAttr.setIgnore(cfg);
            }

            if (cfg.lookupHashFieldInContext("DisablePch", fileName) != null) {
               disablePch = true;
               currentFileAttr.setDisablePch(cfg);
            }

            Vector<String> rv = new Vector();
            cfg.collectRelevantVectors(rv, "AdditionalFile");
            for(String addFile : rv) {
               if (addFile.equals(fileName)) {
                  // supress any ignore
                  currentFileAttr.removeFromIgnored(cfg);
               }
            }
         }

         if (!useIgnore && !disablePch && !usePch) {
            wg.tag("File", new String[] { "RelativePath", vcProjLocation.relativize(file).toString()});
         } else {
            wg.startTag(
                  "File",
                  new String[] { "RelativePath", vcProjLocation.relativize(file).toString()});

            for (BuildConfig cfg : allConfigs) {
               boolean ignore = currentFileAttr.hasIgnore(cfg);
               String [] fileConfAttr;

               if (ignore) {
                  fileConfAttr = new String[] {"Name", cfg.get("Name"), "ExcludedFromBuild", "TRUE" };
               } else {
                  fileConfAttr = new String[] {"Name", cfg.get("Name")};
               }

               if (!disablePch && !usePch && !ignore) {
                  continue;
               } else if (!disablePch && !usePch) {
                  wg.tag("FileConfiguration", fileConfAttr);
               } else {
                  wg.startTag("FileConfiguration", fileConfAttr);
                  if (usePch) {
                     // usePch always applies to all configs, might not always be so.
                     wg.tag("Tool", new String[] {
                           "Name", "VCCLCompilerTool", "UsePrecompiledHeader",
                     "1" });
                     assert(!disablePch);
                  }
                  if (disablePch) {
                     if (currentFileAttr.hasDisablePch(cfg)) {
                        wg.tag("Tool", new String[] {
                              "Name", "VCCLCompilerTool", "UsePrecompiledHeader",
                        "0" });
                     }
                     assert(!usePch);
                  }
                  wg.endTag();
               }
            }
            wg.endTag();
         }

         return CONTINUE;
      }

      @Override
      public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs)
            throws IOException {
         Boolean hide = false;
         DirAttributes newAttr = attributes.peek().clone();

         String rPath;
         if (path.toAbsolutePath().toString().equals(this.startDir.toAbsolutePath().toString())){
            rPath = startDir.toString();
         } else {
            rPath = path.getFileName().toString();
         }

         // check per config ignorePaths!
         for (BuildConfig cfg : allConfigs) {
            if (cfg.matchesIgnoredPath(path.toAbsolutePath().toString())) {
               newAttr.setIgnore(cfg);
            }

            // Hide is always on all configs. And additional files are never hiddden
            if (cfg.matchesHidePath(path.toAbsolutePath().toString())) {
               hide = true;
               break;
            }
         }

         if (!hide) {
            wg.startTag("Filter", new String[] {
                  "Name", rPath});

            attributes.push(newAttr);
            return super.preVisitDirectory(path, attrs);
         } else {
            return FileVisitResult.SKIP_SUBTREE;
         }
      }

      @Override
      public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
         //end matching attributes set by ignorepath
         wg.endTag();
         attributes.pop();

         return CONTINUE;
      }

      @Override
      public FileVisitResult visitFileFailed(Path file, IOException exc) {
         return CONTINUE;
      }

      public void writeFileTree() throws IOException {
         Files.walkFileTree(this.startDir, this);
      }
   }

Other Java examples (source code examples)

Here is a short list of links related to this Java FileTreeCreatorVC7.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.