Package nexj.core.tools

Source Code of nexj.core.tools.MetadataTool

// Copyright 2010 NexJ Systems Inc. This software is licensed under the terms of the Eclipse Public License 1.0
package nexj.core.tools;

import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import nexj.core.meta.Metadata;
import nexj.core.meta.MetadataLoaderDispatcher;
import nexj.core.meta.xml.XMLMetadataHelper;
import nexj.core.meta.xml.XMLMetadataLoader;
import nexj.core.util.IOUtil;
import nexj.core.util.Logger;
import nexj.core.util.SysUtil;
import nexj.core.util.URLUtil;
import nexj.core.util.XMLUtil;

/**
* Tool for manipulating metadata descriptors.
*/
public class MetadataTool extends GenericTool
{
   /**
    * The logger.
    */
   private final static Logger s_logger = Logger.getLogger(MetadataTool.class);

   /**
    * @see nexj.core.tools.GenericTool#execute(java.lang.String)
    */
   protected void execute(String sCommand) throws Exception
   {
      if (sCommand.equals("merge"))
      {
         URL rootURL = XMLMetadataHelper.getURL(URLUtil.toURL(getRequiredProperty("root.url")), true);
         URL baseURL = null;

         String sBaseURL = getProperty("base.url");

         if (sBaseURL != null)
         {
            baseURL = XMLMetadataHelper.getURL(URLUtil.toURL(sBaseURL), true);
         }

         String sOutFile = getRequiredProperty("out.file");

         XMLMetadataHelper helper = new XMLMetadataHelper(rootURL, baseURL, null, null);

         List rootList = null;
         String sRootListFile = getProperty("root.list");

         if (sRootListFile != null)
         {
            rootList = new ArrayList();
         }

         List baseList = null;
         String sBaseListFile = getProperty("base.list");

         if (sBaseListFile != null)
         {
            baseList = new ArrayList();
         }

         String sXML = XMLUtil.formatXML(
            helper.mergeDescriptorElements(baseList, rootList));

         Writer writer = null;

         try
         {
            writer = IOUtil.openBufferedWriter(new File(sOutFile), XMLUtil.ENCODING);
            writer.write(sXML);
            writer.close();
            writer = null;

            if (sBaseListFile != null)
            {
               writer = IOUtil.openBufferedWriter(new File(sBaseListFile), XMLUtil.ENCODING);
               write(writer, baseList);
               writer.close();
               writer = null;
            }

            if (sRootListFile != null)
            {
               writer = IOUtil.openBufferedWriter(new File(sRootListFile), XMLUtil.ENCODING);
               write(writer, rootList);
               writer.close();
               writer = null;
            }
         }
         finally
         {
            if (writer != null)
            {
               try
               {
                  writer.close();
               }
               catch (IOException e)
               {
               }
            }
         }
      }
      else if (sCommand.equals("sort"))
      {
         URL rootURL = XMLMetadataHelper.getURL(URLUtil.toURL(getRequiredProperty("root.url")), true);
         URL baseURL = null;

         String sBaseURL = getProperty("base.url");

         if (sBaseURL != null)
         {
            baseURL = XMLMetadataHelper.getURL(URLUtil.toURL(sBaseURL), true);
         }

         String sOutFile = getRequiredProperty("out.file");
         XMLMetadataHelper helper = new XMLMetadataHelper(rootURL, baseURL, null, null);
         List jarList = (List)helper.addMixinsTo(new ArrayList());
         Writer writer = null;

         Collections.reverse(jarList);

         try
         {
            writer = IOUtil.openBufferedWriter(new File(sOutFile), XMLUtil.ENCODING);

            for (int i = 0; i < jarList.size(); i++)
            {
               writer.write((String)jarList.get(i));
               writer.write('\n');
            }

            writer.close();
            writer = null;
         }
         finally
         {
            if (writer != null)
            {
               try
               {
                  writer.close();
               }
               catch (IOException e)
               {
               }
            }
         }
      }
      else if (sCommand.equals("validate"))
      {
         Properties properties = new Properties(SysUtil.getConfigProperties());
         String sBase = getProperty("base.url");

         if (sBase == null)
         {
            sBase = "";
         }

         properties.setProperty(XMLMetadataLoader.BASE_URL_PROPERTY, sBase);

         Metadata metadata = new MetadataLoaderDispatcher().load(getRequiredProperty("root.url"),
            properties, XMLMetadataLoader.VALIDATED_ONLY, null);

         s_logger.info("Version: " + metadata.getVersion());
         s_logger.info("Revision: " + metadata.getRevision());
         s_logger.info("Checksum: " + metadata.getChecksum());
         s_logger.info("Name: " + metadata.getName());
         s_logger.info("Namespace: " + metadata.getNamespace());

         s_logger.info("");
         s_logger.info("Base");
         s_logger.info("Version: " + metadata.getBaseVersion());
         s_logger.info("Checksum: " + metadata.getBaseChecksum());
         s_logger.info("Namespace: " + metadata.getBaseNamespace());

         s_logger.debug("");
         s_logger.debug("Statistics");
         s_logger.debug("Channels: " + metadata.getChannelCount());
         s_logger.debug("Channel Types: " + metadata.getChannelTypeCount());
         s_logger.debug("Class Aspects: " + metadata.getClassAspectCount());
         s_logger.debug("Data Sources: " + metadata.getDataSourceCount());
         s_logger.debug("Flow Macros: " + metadata.getFlowMacroCount());
         s_logger.debug("Formats: " + metadata.getFormatCount());
         s_logger.debug("Interfaces: " + metadata.getInterfaceCount());
         s_logger.debug("Locales: " + metadata.getLocaleCount());
         s_logger.debug("Messages: " + metadata.getMessageCount());
         s_logger.debug("Primitive Privileges: " + metadata.getPrimitivePrivilegeCount());
         s_logger.debug("Transformations: " + metadata.getTransformationCount());
      }
      else
      {
         throw new IllegalArgumentException("Invalid command \"" + sCommand + "\"");
      }
   }

   /**
    * Writes a collection to a character stream.
    * @param writer The character stream writer.
    * @param col The collection to write.
    */
   protected static void write(Writer writer, Collection col) throws IOException
   {
      for (Iterator itr = col.iterator(); itr.hasNext();)
      {
         writer.write(String.valueOf(itr.next()));
         writer.write(SysUtil.LINE_SEP);
      }
   }

   /**
    * @see nexj.core.tools.GenericTool#getOptionUsage()
    */
   protected String[] getOptionUsage()
   {
      return new String[]
      {
         "-Dout.file=<output file>",
         "-Droot.list=<root output list file>",
         "-Dbase.list=<base output list file>",
         "-Droot.url=<root repository URL>",
         "-Dbase.url=<base repository URL>",
      };
   }

   /**
    * @see nexj.core.tools.GenericTool#getCommandUsage()
    */
   protected String[] getCommandUsage()
   {
      return new String[]
      {
         "merge - merges the metadata descriptors",
         "sort - generates topological ordering of repository jars, base and root urls must be jar entries"
      };
   }

   public static void main(String[] args)
   {
      new MetadataTool().run(args);
   }
}
TOP

Related Classes of nexj.core.tools.MetadataTool

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.