Java tutorial
package npanday.assembler.impl; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import npanday.assembler.AssemblyInfoException; import npanday.assembler.AssemblyInfoMarshaller; import npanday.assembler.AssemblyInfo; import npanday.assembler.AssemblyInfo.TargetFramework; import npanday.model.assembly.plugins.AssemblyPlugin; import java.io.OutputStream; import java.io.IOException; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Map.Entry; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.StringUtils; /** * Provides services for writing out the AssemblyInfo entries using the bracket convention [assembly: * * @author Shane Isbell */ final class DefaultAssemblyInfoMarshaller implements AssemblyInfoMarshaller { /** * The assembly plugin model that contains information used in writing of the AssemblyInfo class. */ private AssemblyPlugin plugin; /** * @see AssemblyInfoMarshaller#marshal(npanday.assembler.AssemblyInfo, org.apache.maven.project.MavenProject, * java.io.OutputStream) */ public void marshal(AssemblyInfo assemblyInfo, MavenProject mavenProject, OutputStream outputStream) throws AssemblyInfoException, IOException { StringBuffer sb = new StringBuffer(); sb.append("using System.Reflection;\r\n").append("using System.Runtime.CompilerServices;\r\n"); appendEntry(sb, "Description", assemblyInfo.getDescription()); appendEntry(sb, "Title", assemblyInfo.getTitle()); appendEntry(sb, "Company", assemblyInfo.getCompany()); appendEntry(sb, "Product", assemblyInfo.getProduct()); if (assemblyInfo.getCopyright() != null) { appendEntry(sb, "Copyright", assemblyInfo.getCopyright().replace("\"", "\\")); } appendEntry(sb, "Trademark", assemblyInfo.getTrademark()); appendEntry(sb, "Culture", assemblyInfo.getCulture()); appendEntry(sb, "Version", assemblyInfo.getVersion()); appendEntry(sb, "InformationalVersion", assemblyInfo.getInformationalVersion()); appendEntry(sb, "Configuration", assemblyInfo.getConfiguration()); appendEntry(sb, "KeyName", assemblyInfo.getKeyName()); if (assemblyInfo.getKeyFile() != null) { appendEntry(sb, "KeyFile", assemblyInfo.getKeyFile().getAbsolutePath().replace("\\", "\\\\")); } TargetFramework targetFramework = assemblyInfo.getTargetFramework(); if (targetFramework != null) { String frameworkName = targetFramework.getFrameworkName(); String frameworkDisplayName = targetFramework.getFrameworkDisplayName(); sb.append("[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute").append("(\"") .append(frameworkName).append("\""); if (frameworkDisplayName != null) { sb.append(",FrameworkDisplayName=\"").append(frameworkDisplayName).append("\""); } sb.append(")]").append("\r\n"); } boolean wroteCustomStringAttribute = false; for (Entry<String, String> e : assemblyInfo.getCustomStringAttributes().entrySet()) { if (StringUtils.isEmpty(e.getValue())) continue; sb.append(createCustomStringEntry(e.getKey(), e.getValue())); wroteCustomStringAttribute = true; } if (wroteCustomStringAttribute) { final String customClass = "\n" + // "[System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple = true)]\n" + // "class CustomStringAttribute : System.Attribute {\n" + // " public CustomStringAttribute(string name, string value) {\n" + // " }\n" + // "}\n"; // sb.append(customClass); } FileOutputStream man = null; try { if (outputStream == null) { String src = mavenProject.getBuild().getDirectory() + "/build-sources"; String groupIdAsDir = mavenProject.getGroupId().replace(".", File.separator); File file = new File(src + "/META-INF/" + groupIdAsDir); file.mkdirs(); man = new FileOutputStream(src + "/META-INF/" + groupIdAsDir + File.separator + "AssemblyInfo." + plugin.getExtension()); outputStream = man; } outputStream.write(sb.toString().getBytes()); } catch (IOException e) { throw new AssemblyInfoException("NPANDAY-022-000: Failed to generate AssemblyInfo", e); } finally { if (man != null) { man.close(); } } } /** * @see AssemblyInfoMarshaller#init(npanday.model.assembly.plugins.AssemblyPlugin) */ public void init(AssemblyPlugin plugin) { this.plugin = plugin; } /** * @see AssemblyInfoMarshaller#unmarshall(java.io.InputStream) */ public AssemblyInfo unmarshall(InputStream inputStream) throws IOException, AssemblyInfoException { AssemblyInfo assemblyInfo = new AssemblyInfo(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { if (!line.trim().startsWith("//")) { String[] tokens = line.split("[:]"); if (tokens.length == 2) { String[] assemblyTokens = tokens[1].split("[(]"); String name = assemblyTokens[0].trim(); String value = assemblyTokens[1].trim().split("[\"]")[1].trim(); setAssemblyInfo(assemblyInfo, name, value); } } } return assemblyInfo; } /** * Sets the specified value within the specified assembly info * * @param assemblyInfo the assembly info to set information on * @param name the name of the assembly info field: AssemblyTitle, AssemblyDescription, ... * @param value the value associated with the specified name * @throws IOException if the assembly info is invalid */ private void setAssemblyInfo(AssemblyInfo assemblyInfo, String name, String value) throws AssemblyInfoException { if (!name.startsWith("Assembly")) { throw new AssemblyInfoException( "NPANDAY-022-001: Invalid assembly info parameter: Name = " + name + ", Value = " + value); } if (name.equals("AssemblyDescription")) { assemblyInfo.setDescription(value); } else if (name.equals("AssemblyInformationalVersion")) { assemblyInfo.setInformationalVersion(value); } else if (name.equals("AssemblyTitle")) { assemblyInfo.setTitle(value); } else if (name.equals("AssemblyCompany")) { assemblyInfo.setCompany(value); } else if (name.equals("AssemblyProduct")) { assemblyInfo.setProduct(value); } else if (name.equals("AssemblyCopyright")) { assemblyInfo.setCopyright(value); } else if (name.equals("AssemblyTrademark")) { assemblyInfo.setTrademark(value); } else if (name.equals("AssemblyCulture")) { assemblyInfo.setCulture(value); } else if (name.equals("AssemblyVersion")) { assemblyInfo.setVersion(value); } else if (name.equals("AssemblyConfiguration")) { assemblyInfo.setConfiguration(value); } else if (name.equals("AssemblyKeyFile")) { assemblyInfo.setConfiguration(value); } else if (name.equals("AssemblyKeyName")) { assemblyInfo.setConfiguration(value); } } /** * Appends an assembly entry with a name-value pair surrounded by brackets. * * @param sb the string buffer to be appended * @param name the name of the assembly entry * @param value the value of the assembly entry */ private void appendEntry(StringBuffer sb, String name, String value) { if (value != null) { sb.append("[assembly: Assembly").append(name).append("(\"").append(value).append("\")]").append("\r\n"); } } private String createCustomStringEntry(String name, String value) { return "[assembly: CustomStringAttribute(\"" + name + "\", \"" + value + "\")]\r\n"; } }