- Moved the ISWFWriterFactory from swc.io to swf.io. - Renamed SWFWriterAndSizeReporter to SizeReportWritingSWFWriter. - Added support for the advanced-telemetry commandline option. - Added a flexmojos testcase for the advanced-telemetry option.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/2c4f6311 Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/2c4f6311 Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/2c4f6311 Branch: refs/heads/feature/flexmojos-tests Commit: 2c4f631174ce2e5661e95651042e7ba14cb49f82 Parents: 142af18 Author: Christofer Dutz <[email protected]> Authored: Fri Oct 31 14:41:27 2014 +0100 Committer: Christofer Dutz <[email protected]> Committed: Fri Oct 31 14:41:27 2014 +0100 ---------------------------------------------------------------------- .../org/apache/flex/compiler/clients/ASC.java | 7 +- .../org/apache/flex/compiler/clients/COMPC.java | 10 +- .../org/apache/flex/compiler/clients/MXMLC.java | 14 +- .../apache/flex/compiler/clients/Optimizer.java | 9 +- .../flex/compiler/config/Configuration.java | 37 +- .../internal/config/TargetSettings.java | 5 + .../flex/compiler/targets/ITargetSettings.java | 10 +- .../apache/flex/swc/io/ISWFWriterFactory.java | 33 -- .../apache/flex/swc/io/SWCDirectoryWriter.java | 24 +- .../src/org/apache/flex/swc/io/SWCWriter.java | 17 +- .../org/apache/flex/swc/io/SWCWriterBase.java | 25 +- compiler/src/org/apache/flex/swf/ISWF.java | 17 + compiler/src/org/apache/flex/swf/SWF.java | 18 +- compiler/src/org/apache/flex/swf/TagType.java | 1 + .../src/org/apache/flex/swf/io/ISWFWriter.java | 8 +- .../apache/flex/swf/io/ISWFWriterFactory.java | 34 ++ .../src/org/apache/flex/swf/io/SWFDump.java | 69 +-- .../src/org/apache/flex/swf/io/SWFReader.java | 74 +-- .../src/org/apache/flex/swf/io/SWFWriter.java | 117 ++--- .../flex/swf/io/SWFWriterAndSizeReporter.java | 478 ------------------- .../flex/swf/io/SizeReportWritingSWFWriter.java | 477 ++++++++++++++++++ .../flex/swf/tags/EnableTelemetryTag.java | 40 ++ .../advanced-telemetry-not-supported/pom.xml | 68 +++ .../src/main/flex/TestApplication.mxml | 25 + flexmojos-tests/pom.xml | 5 + 25 files changed, 868 insertions(+), 754 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/compiler/clients/ASC.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/compiler/clients/ASC.java b/compiler/src/org/apache/flex/compiler/clients/ASC.java index fbb0f7d..a2028c5 100644 --- a/compiler/src/org/apache/flex/compiler/clients/ASC.java +++ b/compiler/src/org/apache/flex/compiler/clients/ASC.java @@ -145,6 +145,11 @@ public class ASC } @Override + public boolean isTelemetryEnabled() { + return false; + } + + @Override public boolean isOptimized() { return getOptimize(); @@ -704,7 +709,7 @@ public class ASC * Compile one source file. Each source file has its own symbol table. * * @param workspace workspace - * @param sourceFilename source filename + * @param sourceFilenames source filename * @throws InterruptedException compiler thread error * @return true compiled without problem */ http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/compiler/clients/COMPC.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/compiler/clients/COMPC.java b/compiler/src/org/apache/flex/compiler/clients/COMPC.java index 988e8d8..6216855 100644 --- a/compiler/src/org/apache/flex/compiler/clients/COMPC.java +++ b/compiler/src/org/apache/flex/compiler/clients/COMPC.java @@ -42,7 +42,7 @@ import org.apache.flex.swc.ISWC; import org.apache.flex.swc.io.ISWCWriter; import org.apache.flex.swc.io.SWCDirectoryWriter; import org.apache.flex.swc.io.SWCWriter; -import org.apache.flex.swf.io.SWFWriterAndSizeReporter; +import org.apache.flex.swf.io.SizeReportWritingSWFWriter; import org.apache.flex.utils.FilenameNormalization; /** @@ -155,8 +155,8 @@ public class COMPC extends MXMLC { final String path = FilenameNormalization.normalize(outputOptionValue); final ISWCWriter swcWriter = new SWCDirectoryWriter(path, useCompression, - targetSettings.isDebugEnabled(), - SWFWriterAndSizeReporter.getSWFWriterFactory(targetSettings.getSizeReport())); + targetSettings.isDebugEnabled(), targetSettings.isTelemetryEnabled(), + SizeReportWritingSWFWriter.getSWFWriterFactory(targetSettings.getSizeReport())); swcWriter.write(swc); long endTime = System.nanoTime(); String seconds = String.format("%5.3f", (endTime - startTime) / 1e9); @@ -170,8 +170,8 @@ public class COMPC extends MXMLC else { final ISWCWriter swcWriter = new SWCWriter(outputOptionValue, useCompression, - targetSettings.isDebugEnabled(), - SWFWriterAndSizeReporter.getSWFWriterFactory(targetSettings.getSizeReport())); + targetSettings.isDebugEnabled(), targetSettings.isTelemetryEnabled(), + SizeReportWritingSWFWriter.getSWFWriterFactory(targetSettings.getSizeReport())); swcWriter.write(swc); final File outputFile = new File(outputOptionValue); long endTime = System.nanoTime(); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/compiler/clients/MXMLC.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/compiler/clients/MXMLC.java b/compiler/src/org/apache/flex/compiler/clients/MXMLC.java index 9181c82..c10d826 100644 --- a/compiler/src/org/apache/flex/compiler/clients/MXMLC.java +++ b/compiler/src/org/apache/flex/compiler/clients/MXMLC.java @@ -84,11 +84,11 @@ import org.apache.flex.compiler.tree.as.IASNode; import org.apache.flex.compiler.tree.as.IFileNode; import org.apache.flex.compiler.units.ICompilationUnit; import org.apache.flex.compiler.units.ICompilationUnit.UnitType; -import org.apache.flex.swc.io.ISWFWriterFactory; +import org.apache.flex.swf.io.ISWFWriterFactory; import org.apache.flex.swf.Header; import org.apache.flex.swf.ISWF; import org.apache.flex.swf.io.ISWFWriter; -import org.apache.flex.swf.io.SWFWriterAndSizeReporter; +import org.apache.flex.swf.io.SizeReportWritingSWFWriter; import org.apache.flex.utils.FilenameNormalization; import com.google.common.base.Function; @@ -850,9 +850,10 @@ public class MXMLC targetSettings.useCompression(), targetSettings.getSWFVersion(), targetSettings.isDebugEnabled()); - final ISWFWriterFactory writerFactory = SWFWriterAndSizeReporter.getSWFWriterFactory( + final ISWFWriterFactory writerFactory = SizeReportWritingSWFWriter.getSWFWriterFactory( targetSettings.getSizeReport()); - final ISWFWriter writer = writerFactory.createSWFWriter(swf, compression, targetSettings.isDebugEnabled()); + final ISWFWriter writer = writerFactory.createSWFWriter(swf, compression, + targetSettings.isDebugEnabled(), targetSettings.isTelemetryEnabled()); return writer.writeTo(outputFile); } @@ -1141,9 +1142,10 @@ public class MXMLC targetSettings.useCompression(), targetSettings.getSWFVersion(), targetSettings.isDebugEnabled()); - final ISWFWriterFactory writerFactory = SWFWriterAndSizeReporter.getSWFWriterFactory( + final ISWFWriterFactory writerFactory = SizeReportWritingSWFWriter.getSWFWriterFactory( targetSettings.getSizeReport()); - final ISWFWriter writer = writerFactory.createSWFWriter(swfTarget, compression, targetSettings.isDebugEnabled()); + final ISWFWriter writer = writerFactory.createSWFWriter(swfTarget, compression, + targetSettings.isDebugEnabled(), targetSettings.isTelemetryEnabled()); // Write out the SWF, counting how many bytes were written. final CountingOutputStream output = http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/compiler/clients/Optimizer.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/compiler/clients/Optimizer.java b/compiler/src/org/apache/flex/compiler/clients/Optimizer.java index eaa442a..9fadf6d 100644 --- a/compiler/src/org/apache/flex/compiler/clients/Optimizer.java +++ b/compiler/src/org/apache/flex/compiler/clients/Optimizer.java @@ -46,12 +46,12 @@ import org.apache.flex.compiler.problems.FileNotFoundProblem; import org.apache.flex.compiler.problems.ICompilerProblem; import org.apache.flex.compiler.targets.ITargetProgressMonitor; import org.apache.flex.compiler.targets.ITargetSettings; -import org.apache.flex.swc.io.ISWFWriterFactory; +import org.apache.flex.swf.io.ISWFWriterFactory; import org.apache.flex.swf.Header; import org.apache.flex.swf.ISWF; import org.apache.flex.swf.io.ISWFWriter; import org.apache.flex.swf.io.SWFReader; -import org.apache.flex.swf.io.SWFWriterAndSizeReporter; +import org.apache.flex.swf.io.SizeReportWritingSWFWriter; import com.google.common.collect.ImmutableSet; import java.io.BufferedInputStream; @@ -138,9 +138,10 @@ public class Optimizer { Header.Compression compression = Header.decideCompression(true, swf.getVersion(), false); - final ISWFWriterFactory writerFactory = SWFWriterAndSizeReporter.getSWFWriterFactory( + final ISWFWriterFactory writerFactory = SizeReportWritingSWFWriter.getSWFWriterFactory( targetSettings.getSizeReport()); - final ISWFWriter writer = writerFactory.createSWFWriter(optimizedSWF, compression, targetSettings.isDebugEnabled()); + final ISWFWriter writer = writerFactory.createSWFWriter(optimizedSWF, compression, + targetSettings.isDebugEnabled(), targetSettings.isTelemetryEnabled()); int swfSize = writer.writeTo(outputFile); long endTime = System.nanoTime(); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/compiler/config/Configuration.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/compiler/config/Configuration.java b/compiler/src/org/apache/flex/compiler/config/Configuration.java index 893dead..1dc5417 100644 --- a/compiler/src/org/apache/flex/compiler/config/Configuration.java +++ b/compiler/src/org/apache/flex/compiler/config/Configuration.java @@ -5755,7 +5755,42 @@ public class Configuration { this.warnOnFlexOnlyOptionUsage = value; } - + + private boolean enableTelemetry = false; + + /** + * + * @return True if telemetry is enabled, false otherwise. + */ + public boolean isEnableTelemetry() { + return enableTelemetry; + } + + /** + * Controls if the flash runtime should allow providing advanced telemetry options + * to external tools. + * + * @param enableTelemetry True to enable telemetry, false to disable. The default ist to disable. + */ + public void setEnableTelemetry(boolean enableTelemetry) { + this.enableTelemetry = enableTelemetry; + } + + /** + * Turns on the advanced telemetry options of the flash runtime to allow clients like scout to + * connect. + * + * Remark: Internally and in the spec this option is called "enable telemetry" but by tools + * and the commandline it's referenced by advanced-telemetry. + */ + @Config(advanced = true) + @Mapping({"compiler", "advanced-telemetry"}) + @FlexOnly + public void setEnableTelemetry(ConfigurationValue cv, boolean enableTelemetry) throws CannotOpen + { + this.enableTelemetry = enableTelemetry; + } + private void processDeprecatedAndRemovedOptions(ConfigurationBuffer configurationBuffer) { for (final String var : configurationBuffer.getVars()) http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/compiler/internal/config/TargetSettings.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/compiler/internal/config/TargetSettings.java b/compiler/src/org/apache/flex/compiler/internal/config/TargetSettings.java index aef9e94..0d84e88 100644 --- a/compiler/src/org/apache/flex/compiler/internal/config/TargetSettings.java +++ b/compiler/src/org/apache/flex/compiler/internal/config/TargetSettings.java @@ -83,6 +83,11 @@ public class TargetSettings implements ITargetSettings return configuration.isDebuggingEnabled(); } + @Override + public boolean isTelemetryEnabled() { + return configuration.isEnableTelemetry(); + } + /** * @return the optimized */ http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/compiler/targets/ITargetSettings.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/compiler/targets/ITargetSettings.java b/compiler/src/org/apache/flex/compiler/targets/ITargetSettings.java index a33c0b7..7300b02 100644 --- a/compiler/src/org/apache/flex/compiler/targets/ITargetSettings.java +++ b/compiler/src/org/apache/flex/compiler/targets/ITargetSettings.java @@ -46,7 +46,15 @@ public interface ITargetSettings * included, false otherwise. */ boolean isDebugEnabled(); - + + /** + * Returns true if the target file has advanced telemetry + * enabled. + * @return true if the target file has advanced telemetry + * enabled, false otherwise. + */ + boolean isTelemetryEnabled(); + /** * Returns true if the target should be optimized. * http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swc/io/ISWFWriterFactory.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swc/io/ISWFWriterFactory.java b/compiler/src/org/apache/flex/swc/io/ISWFWriterFactory.java deleted file mode 100644 index 6e8be9d..0000000 --- a/compiler/src/org/apache/flex/swc/io/ISWFWriterFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * - * 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. - * - */ - -package org.apache.flex.swc.io; - -import org.apache.flex.swf.Header; -import org.apache.flex.swf.ISWF; -import org.apache.flex.swf.io.ISWFWriter; - -/** - * A factory interface for creating {@link ISWFWriter}. - */ -public interface ISWFWriterFactory -{ - - ISWFWriter createSWFWriter(ISWF swf, Header.Compression useCompression, boolean enableDebug); -} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swc/io/SWCDirectoryWriter.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swc/io/SWCDirectoryWriter.java b/compiler/src/org/apache/flex/swc/io/SWCDirectoryWriter.java index 8d415dc..26f8029 100644 --- a/compiler/src/org/apache/flex/swc/io/SWCDirectoryWriter.java +++ b/compiler/src/org/apache/flex/swc/io/SWCDirectoryWriter.java @@ -38,7 +38,8 @@ import org.apache.flex.swc.ISWCFileEntry; import org.apache.flex.swc.ISWCLibrary; import org.apache.flex.swf.ISWF; import org.apache.flex.swf.io.ISWFWriter; -import org.apache.flex.swf.io.SWFWriterAndSizeReporter; +import org.apache.flex.swf.io.ISWFWriterFactory; +import org.apache.flex.swf.io.SizeReportWritingSWFWriter; /** * Write a SWC model to an open directory. {@code compc} can be configured to @@ -59,7 +60,7 @@ public class SWCDirectoryWriter extends SWCWriterBase */ public SWCDirectoryWriter(String path) { - this(path, true, true, SWFWriterAndSizeReporter.getSWFWriterFactory(null)); + this(path, true, true, false, SizeReportWritingSWFWriter.getSWFWriterFactory(null)); } /** @@ -75,9 +76,10 @@ public class SWCDirectoryWriter extends SWCWriterBase public SWCDirectoryWriter(String path, boolean compressLibrarySWF, boolean enableDebug, + boolean enableTelemetry, ISWFWriterFactory swfWriterFactory) { - super(compressLibrarySWF, enableDebug, swfWriterFactory); + super(compressLibrarySWF, enableDebug, enableTelemetry, swfWriterFactory); this.directory = new File(path); } @@ -104,16 +106,18 @@ public class SWCDirectoryWriter extends SWCWriterBase assert path != null : "Expect SWF path"; final OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(new File(directory, path))); - ISWFWriter swfWriter = swfWriterFactory.createSWFWriter(swf, - getLibrarySWFCompression(), enableDebug); + final DigestOutputStream digestStream = getDigestOutputStream(library, outputStream); - + + ISWFWriter swfWriter = swfWriterFactory.createSWFWriter(swf, + getLibrarySWFCompression(), enableDebug, enableTelemetry); swfWriter.writeTo(digestStream != null ? digestStream : outputStream); swfWriter.close(); outputStream.close(); - if (digestStream != null) + if (digestStream != null) { addDigestToLibrary(digestStream, library); + } } @Override @@ -121,8 +125,9 @@ public class SWCDirectoryWriter extends SWCWriterBase { final File file = new File(directory, fileEntry.getPath()).getAbsoluteFile(); final File parentFolder = file.getParentFile(); - if (!parentFolder.isDirectory()) + if (!parentFolder.isDirectory()) { parentFolder.mkdirs(); + } file.createNewFile(); final OutputStream outputStream = new FileOutputStream(file); final InputStream fileInputStream = fileEntry.createInputStream(); @@ -136,8 +141,9 @@ public class SWCDirectoryWriter extends SWCWriterBase { if (!directory.exists()) { - if (!directory.mkdir()) + if (!directory.mkdir()) { throw new FileNotFoundException(directory.getAbsolutePath()); + } } } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swc/io/SWCWriter.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swc/io/SWCWriter.java b/compiler/src/org/apache/flex/swc/io/SWCWriter.java index 4781155..8af8c41 100644 --- a/compiler/src/org/apache/flex/swc/io/SWCWriter.java +++ b/compiler/src/org/apache/flex/swc/io/SWCWriter.java @@ -39,7 +39,8 @@ import org.apache.flex.swc.ISWCFileEntry; import org.apache.flex.swc.ISWCLibrary; import org.apache.flex.swf.ISWF; import org.apache.flex.swf.io.ISWFWriter; -import org.apache.flex.swf.io.SWFWriterAndSizeReporter; +import org.apache.flex.swf.io.ISWFWriterFactory; +import org.apache.flex.swf.io.SizeReportWritingSWFWriter; /** * Implementation for serializing a SWC model to a *.swc library file. @@ -55,7 +56,7 @@ public class SWCWriter extends SWCWriterBase */ public SWCWriter(final String filename) throws FileNotFoundException { - this(filename, true, true, SWFWriterAndSizeReporter.getSWFWriterFactory(null)); + this(filename, true, true, false, SizeReportWritingSWFWriter.getSWFWriterFactory(null)); } /** @@ -69,9 +70,10 @@ public class SWCWriter extends SWCWriterBase public SWCWriter(final String filename, boolean compressLibrarySWF, boolean enableDebug, + boolean enableTelemetry, ISWFWriterFactory swfWriterFactory) throws FileNotFoundException { - super(compressLibrarySWF, enableDebug, swfWriterFactory); + super(compressLibrarySWF, enableDebug, enableTelemetry, swfWriterFactory); // Ensure that the directory for the SWC exists. File outputFile = new File(filename); @@ -106,15 +108,18 @@ public class SWCWriter extends SWCWriterBase assert path != null : "Expect SWF path"; zipOutputStream.putNextEntry(new ZipEntry(path)); - ISWFWriter swfWriter = swfWriterFactory.createSWFWriter(swf, - getLibrarySWFCompression(), enableDebug); + final DigestOutputStream digestStream = getDigestOutputStream(library, zipOutputStream); + + ISWFWriter swfWriter = swfWriterFactory.createSWFWriter(swf, + getLibrarySWFCompression(), enableDebug, enableTelemetry); swfWriter.writeTo(digestStream != null ? digestStream : zipOutputStream); swfWriter.close(); zipOutputStream.closeEntry(); - if (digestStream != null) + if (digestStream != null) { addDigestToLibrary(digestStream, library); + } } @Override http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swc/io/SWCWriterBase.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swc/io/SWCWriterBase.java b/compiler/src/org/apache/flex/swc/io/SWCWriterBase.java index b05559c..4e4e7a6 100644 --- a/compiler/src/org/apache/flex/swc/io/SWCWriterBase.java +++ b/compiler/src/org/apache/flex/swc/io/SWCWriterBase.java @@ -38,6 +38,7 @@ import org.apache.flex.swc.SWCDigest; import org.apache.flex.swc.catalog.StAXCatalogWriter; import org.apache.flex.swf.Header; import org.apache.flex.swf.Header.Compression; +import org.apache.flex.swf.io.ISWFWriterFactory; /** * Base class for serializing a SWC model. @@ -57,20 +58,24 @@ abstract class SWCWriterBase implements ISWCWriter * false otherwise. * @param enableDebug - true if the library should be build with debug * enabled, false otherwise. + * @param enableTelemetry - true if the library should be build with telemetry + * enabled, false otherwise. * @param swfWriterFactory - factory for creating swf writers. */ protected SWCWriterBase(boolean compressLibrarySWF, - boolean enableDebug, + boolean enableDebug, boolean enableTelemetry, ISWFWriterFactory swfWriterFactory) { assert swfWriterFactory != null; this.compressLibrarySWF = compressLibrarySWF; this.enableDebug = enableDebug; + this.enableTelemetry = enableTelemetry; this.swfWriterFactory = swfWriterFactory; } private final boolean compressLibrarySWF; // true if the library is built compressed protected final boolean enableDebug; + protected final boolean enableTelemetry; protected final ISWFWriterFactory swfWriterFactory; /** @@ -132,14 +137,14 @@ abstract class SWCWriterBase implements ISWCWriter /** * Add a library to the target SWC. * - * @param library SWC library. + * @param swc SWC library. */ abstract void writeLibrary(ISWCLibrary swc) throws IOException; /** * Add a file entry to the target SWC. * - * @param library SWC library. + * @param swc SWC library. */ abstract void writeFile(ISWCFileEntry swc) throws IOException; @@ -183,14 +188,12 @@ abstract class SWCWriterBase implements ISWCWriter */ protected DigestOutputStream getDigestOutputStream(ISWCLibrary library, OutputStream outputStream) { - DigestOutputStream digestStream = null; - MessageDigest messageDigest = null; if (!hasUnsignedDigest(library)) { try { - messageDigest = MessageDigest.getInstance(SWCDigest.SHA_256); - digestStream = new DigestOutputStream(outputStream, messageDigest); + MessageDigest messageDigest = MessageDigest.getInstance(SWCDigest.SHA_256); + return new DigestOutputStream(outputStream, messageDigest); } catch (NoSuchAlgorithmException e) { @@ -199,7 +202,7 @@ abstract class SWCWriterBase implements ISWCWriter } } - return digestStream; + return null; } /** @@ -212,8 +215,9 @@ abstract class SWCWriterBase implements ISWCWriter protected void addDigestToLibrary(DigestOutputStream digestStream, ISWCLibrary library) { - if (library == null) + if (library == null) { throw new NullPointerException("library may not be null"); + } if (digestStream != null) { @@ -237,8 +241,9 @@ abstract class SWCWriterBase implements ISWCWriter for (ISWCDigest digest : digests) { - if (!digest.isSigned()) + if (!digest.isSigned()) { return true; + } } return false; } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/ISWF.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/ISWF.java b/compiler/src/org/apache/flex/swf/ISWF.java index 5e84d33..a431d23 100644 --- a/compiler/src/org/apache/flex/swf/ISWF.java +++ b/compiler/src/org/apache/flex/swf/ISWF.java @@ -20,6 +20,7 @@ package org.apache.flex.swf; import org.apache.flex.swf.tags.EnableDebugger2Tag; +import org.apache.flex.swf.tags.EnableTelemetryTag; import org.apache.flex.swf.tags.ProductInfoTag; import org.apache.flex.swf.tags.ScriptLimitsTag; import org.apache.flex.swf.types.RGB; @@ -261,4 +262,20 @@ public interface ISWF * @param tag the ProductInfoTag, may be null. */ void setProductInfo(ProductInfoTag tag); + + /** + * Get the {@code EnableTelemetryTag} tag. + * + * @return {@code EnableTelemetryTag} or null if there is no enable telemetry + * information associated with the SWF. + */ + EnableTelemetryTag getEnableTelemetry(); + + /** + * Set the enable telemetry tag associated with the SWF. + * + * @param tag the EnableTelemetryTag, may be null. + */ + void setEnableTelemetry(EnableTelemetryTag tag); + } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/SWF.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/SWF.java b/compiler/src/org/apache/flex/swf/SWF.java index f1a4f38..71ca868 100644 --- a/compiler/src/org/apache/flex/swf/SWF.java +++ b/compiler/src/org/apache/flex/swf/SWF.java @@ -23,11 +23,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.flex.swf.io.SWFWriter; -import org.apache.flex.swf.tags.EnableDebugger2Tag; -import org.apache.flex.swf.tags.FileAttributesTag; -import org.apache.flex.swf.tags.MetadataTag; -import org.apache.flex.swf.tags.ProductInfoTag; -import org.apache.flex.swf.tags.ScriptLimitsTag; +import org.apache.flex.swf.tags.*; import org.apache.flex.swf.types.RGB; import org.apache.flex.swf.types.Rect; @@ -82,6 +78,7 @@ public class SWF implements ISWF private EnableDebugger2Tag enableDebugger2; private ScriptLimitsTag scriptLimits; private ProductInfoTag productInfoTag; + private EnableTelemetryTag enableTelemetry; @Override public void addFrame(SWFFrame frame) @@ -323,4 +320,15 @@ public class SWF implements ISWF { this.productInfoTag = tag; } + + @Override + public EnableTelemetryTag getEnableTelemetry() { + return enableTelemetry; + } + + @Override + public void setEnableTelemetry(EnableTelemetryTag tag) { + this.enableTelemetry = tag; + } + } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/TagType.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/TagType.java b/compiler/src/org/apache/flex/swf/TagType.java index 22e347f..ce9f486 100644 --- a/compiler/src/org/apache/flex/swf/TagType.java +++ b/compiler/src/org/apache/flex/swf/TagType.java @@ -93,6 +93,7 @@ public enum TagType StartSound2(89), DefineBitsJPEG4(90), DefineFont4(91), + EnableTelemetry(93), Undefined(-1); private final int value; http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/io/ISWFWriter.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/io/ISWFWriter.java b/compiler/src/org/apache/flex/swf/io/ISWFWriter.java index 93c61a7..e1d4062 100644 --- a/compiler/src/org/apache/flex/swf/io/ISWFWriter.java +++ b/compiler/src/org/apache/flex/swf/io/ISWFWriter.java @@ -19,14 +19,13 @@ package org.apache.flex.swf.io; +import org.apache.flex.swf.ISWF; + import java.io.Closeable; import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; -import org.apache.flex.swf.ISWF; - /** * Serialize an {@link ISWF} object to bytes. */ @@ -45,5 +44,6 @@ public interface ISWFWriter extends Closeable * @param out The output {@link File}. * @return The number of bytes written. */ - int writeTo(File out) throws FileNotFoundException, IOException; + int writeTo(File out) throws IOException; + } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/io/ISWFWriterFactory.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/io/ISWFWriterFactory.java b/compiler/src/org/apache/flex/swf/io/ISWFWriterFactory.java new file mode 100644 index 0000000..c9f06c3 --- /dev/null +++ b/compiler/src/org/apache/flex/swf/io/ISWFWriterFactory.java @@ -0,0 +1,34 @@ +/* + * + * 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. + * + */ + +package org.apache.flex.swf.io; + +import org.apache.flex.swf.Header; +import org.apache.flex.swf.ISWF; +import org.apache.flex.swf.io.ISWFWriter; + +/** + * A factory interface for creating {@link ISWFWriter}. + */ +public interface ISWFWriterFactory +{ + + ISWFWriter createSWFWriter(ISWF swf, Header.Compression useCompression, boolean enableDebug, boolean enableTelemetry); + +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/io/SWFDump.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/io/SWFDump.java b/compiler/src/org/apache/flex/swf/io/SWFDump.java index df25eec..298948d 100644 --- a/compiler/src/org/apache/flex/swf/io/SWFDump.java +++ b/compiler/src/org/apache/flex/swf/io/SWFDump.java @@ -53,59 +53,7 @@ import org.apache.flex.swf.Header; import org.apache.flex.swf.SWF; import org.apache.flex.swf.SWFFrame; import org.apache.flex.swf.TagType; -import org.apache.flex.swf.tags.CSMTextSettingsTag; -import org.apache.flex.swf.tags.DefineBinaryDataTag; -import org.apache.flex.swf.tags.DefineBitsJPEG3Tag; -import org.apache.flex.swf.tags.DefineBitsLossless2Tag; -import org.apache.flex.swf.tags.DefineBitsLosslessTag; -import org.apache.flex.swf.tags.DefineBitsTag; -import org.apache.flex.swf.tags.DefineButton2Tag; -import org.apache.flex.swf.tags.DefineButtonCxformTag; -import org.apache.flex.swf.tags.DefineButtonSoundTag; -import org.apache.flex.swf.tags.DefineButtonTag; -import org.apache.flex.swf.tags.DefineEditTextTag; -import org.apache.flex.swf.tags.DefineFont2Tag; -import org.apache.flex.swf.tags.DefineFont3Tag; -import org.apache.flex.swf.tags.DefineFont4Tag; -import org.apache.flex.swf.tags.DefineFontAlignZonesTag; -import org.apache.flex.swf.tags.DefineFontInfoTag; -import org.apache.flex.swf.tags.DefineFontNameTag; -import org.apache.flex.swf.tags.DefineFontTag; -import org.apache.flex.swf.tags.DefineMorphShape2Tag; -import org.apache.flex.swf.tags.DefineMorphShapeTag; -import org.apache.flex.swf.tags.DefineScalingGridTag; -import org.apache.flex.swf.tags.DefineShape3Tag; -import org.apache.flex.swf.tags.DefineShape4Tag; -import org.apache.flex.swf.tags.DefineShapeTag; -import org.apache.flex.swf.tags.DefineSoundTag; -import org.apache.flex.swf.tags.DefineSpriteTag; -import org.apache.flex.swf.tags.DefineTextTag; -import org.apache.flex.swf.tags.DefineVideoStreamTag; -import org.apache.flex.swf.tags.DoABCTag; -import org.apache.flex.swf.tags.EnableDebugger2Tag; -import org.apache.flex.swf.tags.ExportAssetsTag; -import org.apache.flex.swf.tags.FileAttributesTag; -import org.apache.flex.swf.tags.FrameLabelTag; -import org.apache.flex.swf.tags.ICharacterTag; -import org.apache.flex.swf.tags.ITag; -import org.apache.flex.swf.tags.MetadataTag; -import org.apache.flex.swf.tags.PlaceObject2Tag; -import org.apache.flex.swf.tags.PlaceObject3Tag; -import org.apache.flex.swf.tags.PlaceObjectTag; -import org.apache.flex.swf.tags.ProductInfoTag; -import org.apache.flex.swf.tags.RawTag; -import org.apache.flex.swf.tags.RemoveObject2Tag; -import org.apache.flex.swf.tags.RemoveObjectTag; -import org.apache.flex.swf.tags.ScriptLimitsTag; -import org.apache.flex.swf.tags.SetBackgroundColorTag; -import org.apache.flex.swf.tags.SetTabIndexTag; -import org.apache.flex.swf.tags.ShowFrameTag; -import org.apache.flex.swf.tags.SoundStreamBlockTag; -import org.apache.flex.swf.tags.SoundStreamHeadTag; -import org.apache.flex.swf.tags.StartSoundTag; -import org.apache.flex.swf.tags.SymbolClassTag; -import org.apache.flex.swf.tags.Tag; -import org.apache.flex.swf.tags.VideoFrameTag; +import org.apache.flex.swf.tags.*; import org.apache.flex.swf.types.ButtonRecord; import org.apache.flex.swf.types.CurvedEdgeRecord; import org.apache.flex.swf.types.EdgeRecord; @@ -390,10 +338,14 @@ public final class SWFDump case SymbolClass: dumpSymbolClass((SymbolClassTag)tag); break; + case EnableTelemetry: + dumpEnableTelemetry((EnableTelemetryTag) tag); + break; default: assert (tag instanceof RawTag); - if (tag instanceof RawTag) - dumpRawTag((RawTag)tag); + if (tag instanceof RawTag) { + dumpRawTag((RawTag) tag); + } break; } @@ -2205,6 +2157,13 @@ public final class SWFDump // close(tag); // } + public void dumpEnableTelemetry(EnableTelemetryTag tag) + { + open(tag); + out.print(" password=\"" + tag.getPassword() + "\""); + close(); + } + private String idRef(ICharacterTag tag) { if (tag == null) http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/io/SWFReader.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/io/SWFReader.java b/compiler/src/org/apache/flex/swf/io/SWFReader.java index b381d41..2ce3c04 100644 --- a/compiler/src/org/apache/flex/swf/io/SWFReader.java +++ b/compiler/src/org/apache/flex/swf/io/SWFReader.java @@ -46,68 +46,7 @@ import org.apache.flex.swf.ITagContainer; import org.apache.flex.swf.SWF; import org.apache.flex.swf.SWFFrame; import org.apache.flex.swf.TagType; -import org.apache.flex.swf.tags.CSMTextSettingsTag; -import org.apache.flex.swf.tags.CharacterTag; -import org.apache.flex.swf.tags.DefineBinaryDataTag; -import org.apache.flex.swf.tags.DefineBitsJPEG2Tag; -import org.apache.flex.swf.tags.DefineBitsJPEG3Tag; -import org.apache.flex.swf.tags.DefineBitsLossless2Tag; -import org.apache.flex.swf.tags.DefineBitsLosslessTag; -import org.apache.flex.swf.tags.DefineBitsTag; -import org.apache.flex.swf.tags.DefineButton2Tag; -import org.apache.flex.swf.tags.DefineButtonSoundTag; -import org.apache.flex.swf.tags.DefineButtonTag; -import org.apache.flex.swf.tags.DefineEditTextTag; -import org.apache.flex.swf.tags.DefineFont2Tag; -import org.apache.flex.swf.tags.DefineFont3Tag; -import org.apache.flex.swf.tags.DefineFont4Tag; -import org.apache.flex.swf.tags.DefineFontAlignZonesTag; -import org.apache.flex.swf.tags.DefineFontInfo2Tag; -import org.apache.flex.swf.tags.DefineFontInfoTag; -import org.apache.flex.swf.tags.DefineFontNameTag; -import org.apache.flex.swf.tags.DefineFontTag; -import org.apache.flex.swf.tags.DefineMorphShape2Tag; -import org.apache.flex.swf.tags.DefineMorphShapeTag; -import org.apache.flex.swf.tags.DefineScalingGridTag; -import org.apache.flex.swf.tags.DefineSceneAndFrameLabelDataTag; -import org.apache.flex.swf.tags.DefineShape2Tag; -import org.apache.flex.swf.tags.DefineShape3Tag; -import org.apache.flex.swf.tags.DefineShape4Tag; -import org.apache.flex.swf.tags.DefineShapeTag; -import org.apache.flex.swf.tags.DefineSoundTag; -import org.apache.flex.swf.tags.DefineSpriteTag; -import org.apache.flex.swf.tags.DefineTextTag; -import org.apache.flex.swf.tags.DefineVideoStreamTag; -import org.apache.flex.swf.tags.DoABCTag; -import org.apache.flex.swf.tags.EnableDebugger2Tag; -import org.apache.flex.swf.tags.EndTag; -import org.apache.flex.swf.tags.ExportAssetsTag; -import org.apache.flex.swf.tags.FileAttributesTag; -import org.apache.flex.swf.tags.FrameLabelTag; -import org.apache.flex.swf.tags.ICharacterTag; -import org.apache.flex.swf.tags.IDefineFontTag; -import org.apache.flex.swf.tags.IManagedTag; -import org.apache.flex.swf.tags.ITag; -import org.apache.flex.swf.tags.JPEGTablesTag; -import org.apache.flex.swf.tags.MetadataTag; -import org.apache.flex.swf.tags.PlaceObject2Tag; -import org.apache.flex.swf.tags.PlaceObject3Tag; -import org.apache.flex.swf.tags.PlaceObjectTag; -import org.apache.flex.swf.tags.ProductInfoTag; -import org.apache.flex.swf.tags.RawTag; -import org.apache.flex.swf.tags.RemoveObject2Tag; -import org.apache.flex.swf.tags.RemoveObjectTag; -import org.apache.flex.swf.tags.ScriptLimitsTag; -import org.apache.flex.swf.tags.SetBackgroundColorTag; -import org.apache.flex.swf.tags.SetTabIndexTag; -import org.apache.flex.swf.tags.ShowFrameTag; -import org.apache.flex.swf.tags.SoundStreamBlockTag; -import org.apache.flex.swf.tags.SoundStreamHead2Tag; -import org.apache.flex.swf.tags.SoundStreamHeadTag; -import org.apache.flex.swf.tags.StartSound2Tag; -import org.apache.flex.swf.tags.StartSoundTag; -import org.apache.flex.swf.tags.SymbolClassTag; -import org.apache.flex.swf.tags.VideoFrameTag; +import org.apache.flex.swf.tags.*; import org.apache.flex.swf.types.BevelFilter; import org.apache.flex.swf.types.BlurFilter; import org.apache.flex.swf.types.ButtonRecord; @@ -813,6 +752,14 @@ public class SWFReader implements ISWFReader, ITagContainer return new EnableDebugger2Tag(bitStream.readString()); } + private EnableTelemetryTag readEnableTelemetry() + { + // Read the reserved 2 bytes + bitStream.readUI16(); + String password = bitStream.readString(); + return new EnableTelemetryTag(password); + } + private EndTag readEnd() { return new EndTag(); @@ -983,7 +930,6 @@ public class SWFReader implements ISWFReader, ITagContainer /** * @param tagType * @return A gradient record. - * @throws RuntimeExpection if the record is invalid. */ private GradRecord readGradRecord(TagType tagType) { @@ -1886,6 +1832,8 @@ public class SWFReader implements ISWFReader, ITagContainer return readShowFrame(); case SymbolClass: return readSymbolClass(); + case EnableTelemetry: + return readEnableTelemetry(); default: return readRawTag(type); } http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/io/SWFWriter.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/io/SWFWriter.java b/compiler/src/org/apache/flex/swf/io/SWFWriter.java index 0ecceac..197c0f3 100644 --- a/compiler/src/org/apache/flex/swf/io/SWFWriter.java +++ b/compiler/src/org/apache/flex/swf/io/SWFWriter.java @@ -36,7 +36,6 @@ import java.util.zip.DeflaterOutputStream; import org.apache.commons.io.output.CountingOutputStream; -import org.apache.flex.swc.io.ISWFWriterFactory; import org.apache.flex.swf.Header; import org.apache.flex.swf.Header.Compression; import org.apache.flex.swf.ISWF; @@ -44,66 +43,7 @@ import org.apache.flex.swf.SWF; import org.apache.flex.swf.SWFFrame; import org.apache.flex.swf.TagType; import org.apache.flex.swf.io.SWFReader.CurrentStyles; -import org.apache.flex.swf.tags.CSMTextSettingsTag; -import org.apache.flex.swf.tags.CharacterTag; -import org.apache.flex.swf.tags.DefineBinaryDataTag; -import org.apache.flex.swf.tags.DefineBitsJPEG2Tag; -import org.apache.flex.swf.tags.DefineBitsJPEG3Tag; -import org.apache.flex.swf.tags.DefineBitsLossless2Tag; -import org.apache.flex.swf.tags.DefineBitsLosslessTag; -import org.apache.flex.swf.tags.DefineBitsTag; -import org.apache.flex.swf.tags.DefineButton2Tag; -import org.apache.flex.swf.tags.DefineButtonSoundTag; -import org.apache.flex.swf.tags.DefineButtonTag; -import org.apache.flex.swf.tags.DefineEditTextTag; -import org.apache.flex.swf.tags.DefineFont2Tag; -import org.apache.flex.swf.tags.DefineFont3Tag; -import org.apache.flex.swf.tags.DefineFont4Tag; -import org.apache.flex.swf.tags.DefineFontAlignZonesTag; -import org.apache.flex.swf.tags.DefineFontInfo2Tag; -import org.apache.flex.swf.tags.DefineFontNameTag; -import org.apache.flex.swf.tags.DefineFontTag; -import org.apache.flex.swf.tags.DefineMorphShape2Tag; -import org.apache.flex.swf.tags.DefineMorphShapeTag; -import org.apache.flex.swf.tags.DefineScalingGridTag; -import org.apache.flex.swf.tags.DefineShape2Tag; -import org.apache.flex.swf.tags.DefineShape3Tag; -import org.apache.flex.swf.tags.DefineShape4Tag; -import org.apache.flex.swf.tags.DefineShapeTag; -import org.apache.flex.swf.tags.DefineSoundTag; -import org.apache.flex.swf.tags.DefineSpriteTag; -import org.apache.flex.swf.tags.DefineText2Tag; -import org.apache.flex.swf.tags.DefineTextTag; -import org.apache.flex.swf.tags.DefineVideoStreamTag; -import org.apache.flex.swf.tags.DoABCTag; -import org.apache.flex.swf.tags.EnableDebugger2Tag; -import org.apache.flex.swf.tags.EndTag; -import org.apache.flex.swf.tags.ExportAssetsTag; -import org.apache.flex.swf.tags.FileAttributesTag; -import org.apache.flex.swf.tags.FrameLabelTag; -import org.apache.flex.swf.tags.IAlwaysLongTag; -import org.apache.flex.swf.tags.ICharacterTag; -import org.apache.flex.swf.tags.IFontInfo; -import org.apache.flex.swf.tags.ITag; -import org.apache.flex.swf.tags.JPEGTablesTag; -import org.apache.flex.swf.tags.MetadataTag; -import org.apache.flex.swf.tags.PlaceObject2Tag; -import org.apache.flex.swf.tags.PlaceObject3Tag; -import org.apache.flex.swf.tags.PlaceObjectTag; -import org.apache.flex.swf.tags.ProductInfoTag; -import org.apache.flex.swf.tags.RawTag; -import org.apache.flex.swf.tags.RemoveObject2Tag; -import org.apache.flex.swf.tags.RemoveObjectTag; -import org.apache.flex.swf.tags.ScriptLimitsTag; -import org.apache.flex.swf.tags.SetBackgroundColorTag; -import org.apache.flex.swf.tags.SetTabIndexTag; -import org.apache.flex.swf.tags.SoundStreamBlockTag; -import org.apache.flex.swf.tags.SoundStreamHead2Tag; -import org.apache.flex.swf.tags.SoundStreamHeadTag; -import org.apache.flex.swf.tags.StartSound2Tag; -import org.apache.flex.swf.tags.StartSoundTag; -import org.apache.flex.swf.tags.SymbolClassTag; -import org.apache.flex.swf.tags.VideoFrameTag; +import org.apache.flex.swf.tags.*; import org.apache.flex.swf.types.ARGB; import org.apache.flex.swf.types.BevelFilter; import org.apache.flex.swf.types.BlurFilter; @@ -167,9 +107,9 @@ public class SWFWriter implements ISWFWriter @Override public ISWFWriter createSWFWriter(ISWF swf, Compression useCompression, - boolean enableDebug) + boolean enableDebug, boolean enableTelemetry) { - return new SWFWriter(swf, useCompression, enableDebug); + return new SWFWriter(swf, useCompression, enableDebug, enableTelemetry); } } @@ -319,7 +259,11 @@ public class SWFWriter implements ISWFWriter // True if the encoded SWF file is compressed. private final Header.Compression useCompression; - private final boolean enableDebug; // if true enable debugging of the SWF. + // True if debugging of the SWF is enabled. + private final boolean enableDebug; + + // True if telemetry features of the SWF are enabled. + private final boolean enableTelemetry; // Current frame index. Updated in writeFrames(). private int currentFrameIndex; @@ -335,7 +279,7 @@ public class SWFWriter implements ISWFWriter */ public SWFWriter(ISWF swf, Header.Compression useCompression) { - this(swf, useCompression, false); + this(swf, useCompression, false, false); } /** @@ -344,12 +288,14 @@ public class SWFWriter implements ISWFWriter * @param swf the SWF model to be encoded * @param useCompression use ZLIB compression if true * @param enableDebug enable debugging of the SWF if true + * @param enableTelemetry enable telemetry */ - public SWFWriter(ISWF swf, Header.Compression useCompression, boolean enableDebug) + public SWFWriter(ISWF swf, Header.Compression useCompression, boolean enableDebug, boolean enableTelemetry) { this.swf = swf; this.useCompression = useCompression; this.enableDebug = enableDebug; + this.enableTelemetry = enableTelemetry; this.outputBuffer = new OutputBitStream(false); this.tagBuffer = new OutputBitStream(false); @@ -744,6 +690,18 @@ public class SWFWriter implements ISWFWriter tagBuffer.writeString(tag.getPassword()); } + private void writeEnableTelemetry(EnableTelemetryTag tag) + { + // Tag Code (Upper 10 bits = tag type, lower 16 bit = tag length) + tagBuffer.writeUI16(0); // reserved always zero + // PasswordHash: Optional SHA-256 hash of the UTF-8 representation of the password. + // If not present telemetry clients can connect without using a password, if set they + // have to authenticate. + if(tag.getPassword() != null) { + tagBuffer.writeString(tag.getPassword()); + } + } + private void writeEnd() { // End tag has no tag body. @@ -982,7 +940,7 @@ public class SWFWriter implements ISWFWriter } /** - * @param gradientMatrix + * @param matrix */ private void writeMatrix(Matrix matrix) { @@ -1338,6 +1296,9 @@ public class SWFWriter implements ISWFWriter case EnableDebugger2: writeEnableDebugger2((EnableDebugger2Tag)tag); break; + case EnableTelemetry: + writeEnableTelemetry((EnableTelemetryTag) tag); + break; case ScriptLimits: writeScriptLimits((ScriptLimitsTag)tag); break; @@ -2591,27 +2552,37 @@ public class SWFWriter implements ISWFWriter // Raw Metadata String metadata = swf.getMetadata(); - if (metadata != null) - writeTag(new MetadataTag(metadata)); + if (metadata != null) { + writeTag(new MetadataTag(metadata)); + } // SetBackgroundColor tag final RGB backgroundColor = swf.getBackgroundColor(); - if (backgroundColor != null) + if (backgroundColor != null) { writeTag(new SetBackgroundColorTag(backgroundColor)); + } // EnableDebugger2 tag - if (enableDebug) + if (enableDebug) { writeTag(new EnableDebugger2Tag("NO-PASSWORD")); + } + + // EnableTelemetry tag + if (enableTelemetry) { + writeTag(new EnableTelemetryTag()); + } // ProductInfo tag for Flex compatibility ProductInfoTag productInfo = swf.getProductInfo(); - if (productInfo != null) + if (productInfo != null) { writeTag(productInfo); + } // ScriptLimits tag final ScriptLimitsTag scriptLimitsTag = swf.getScriptLimits(); - if (scriptLimitsTag != null) + if (scriptLimitsTag != null) { writeTag(scriptLimitsTag); + } // Frames and enclosed tags. writeFrames(); http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/io/SWFWriterAndSizeReporter.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/io/SWFWriterAndSizeReporter.java b/compiler/src/org/apache/flex/swf/io/SWFWriterAndSizeReporter.java deleted file mode 100644 index 0bae89f..0000000 --- a/compiler/src/org/apache/flex/swf/io/SWFWriterAndSizeReporter.java +++ /dev/null @@ -1,478 +0,0 @@ -/* - * - * 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. - * - */ - -package org.apache.flex.swf.io; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; - -import org.apache.commons.io.output.CountingOutputStream; - -import org.apache.flex.swc.io.ISWFWriterFactory; -import org.apache.flex.swf.Header.Compression; -import org.apache.flex.swf.ISWF; -import org.apache.flex.swf.tags.CharacterTag; -import org.apache.flex.swf.tags.DefineBinaryDataTag; -import org.apache.flex.swf.tags.DefineFont2Tag; -import org.apache.flex.swf.tags.DefineFont4Tag; -import org.apache.flex.swf.tags.DefineFontNameTag; -import org.apache.flex.swf.tags.DefineFontTag; -import org.apache.flex.swf.tags.DefineShapeTag; -import org.apache.flex.swf.tags.DefineSoundTag; -import org.apache.flex.swf.tags.DefineSpriteTag; -import org.apache.flex.swf.tags.DefineVideoStreamTag; -import org.apache.flex.swf.tags.DoABCTag; -import org.apache.flex.swf.tags.FileAttributesTag; -import org.apache.flex.swf.tags.FrameLabelTag; -import org.apache.flex.swf.tags.ITag; -import org.apache.flex.swf.tags.SymbolClassTag; - -/** - * A class that writes a SWF and a size report. The path of the size report is - * passed to the constructor. When the SWF is written to disk, the size report - * is also written. - */ -public class SWFWriterAndSizeReporter extends SWFWriter -{ - /** - * SWF writer factory for SWF writers that also create size reports. - */ - private static class SWFWriterFactory implements ISWFWriterFactory - { - - SWFWriterFactory(File sizeReport) - { - this.sizeReport = sizeReport; - } - - private final File sizeReport; - - @Override - public ISWFWriter createSWFWriter(ISWF swf, Compression useCompression, - boolean enableDebug) - { - return new SWFWriterAndSizeReporter(swf, useCompression, enableDebug, - sizeReport); - } - - } - - /** - * Get a SWF Writer factory that can create an instance of a class that can - * write a SWF with the optional capability of creating a size report. - * - * @param sizeReport if non-null, return a factory for an object that can - * create a size report in addition to a writing a SWF. Otherwise the - * factory is for an object that just writes a SWF. - * @return a SWF writer factory. - */ - public static ISWFWriterFactory getSWFWriterFactory(File sizeReport) - { - if (sizeReport != null) - return new SWFWriterFactory(sizeReport); - - return SWFWriter.DEFAULT_SWF_WRITER_FACTORY; - } - - /** - * Create a SWF writer with a size reporter. - * - * @param swf the SWF model to be encoded - * @param useCompression use ZLIB compression if true - * @param enableDebug enable debugging of the SWF if true - * @param sizeReport the file the size report is written to. - */ - public SWFWriterAndSizeReporter(ISWF swf, Compression useCompression, - boolean enableDebug, File sizeReport) - { - super(swf, useCompression, enableDebug); - - assert sizeReport != null; - - this.sizeReportFile = sizeReport; - this.report = new SizeReport(); - } - - private final File sizeReportFile; - private final SizeReport report; - private boolean definingSprite = false; - - @Override - public int writeTo(File outputFile) throws FileNotFoundException, IOException - { - final int bytes = super.writeTo(outputFile); - report.setCompressedSize(bytes); - - return bytes; - } - - @Override - public void writeTo(OutputStream output) - { - CountingOutputStream countingOutput = new CountingOutputStream(output); - super.writeTo(countingOutput); - - report.setCompressedSize(countingOutput.getCount()); - - writeSizeReport(); - } - - @Override - protected void finishTag(ITag tag, IOutputBitStream tagData, IOutputBitStream out) - { - int startPos = out.size(); - super.finishTag(tag, tagData, out); - - int recordLength = out.size() - startPos; - - switch (tag.getTagType()) - { - case DoABC: - reportDoABC((DoABCTag)tag, recordLength); - break; - case FileAttributes: - reportFileAttributes((FileAttributesTag)tag, recordLength); - break; - case SymbolClass: - reportSymbolClass((SymbolClassTag)tag, recordLength); - break; - case ShowFrame: - reportShowFrame(recordLength); - break; - case SetBackgroundColor: - reportSetBackgroundColor(recordLength); - break; - case EnableDebugger2: - reportEnableDebugger2(recordLength); - break; - case ScriptLimits: - reportScriptLimits(recordLength); - break; - // case ProductInfo: - // reportProductInfo((ProductInfoTag)tag, recordLength); - // break; - case Metadata: - reportMetadata(recordLength); - break; - case DefineBits: - case DefineBitsJPEG2: - case DefineBitsJPEG3: - case DefineBitsLossless2: - reportBitmap((CharacterTag)tag, recordLength); - break; - case DefineBinaryData: - reportDefineBinaryData((DefineBinaryDataTag)tag, recordLength); - break; - case DefineShape: - case DefineShape2: - case DefineShape3: - case DefineShape4: - reportDefineShape((DefineShapeTag)tag, recordLength); - break; - case DefineSprite: - reportDefineSprite((DefineSpriteTag)tag, recordLength); - break; - case ExportAssets: - reportExportAssets(recordLength); - break; - // case DefineScalingGrid: - // reportDefineScalingGrid((DefineScalingGridTag)tag, recordLength); - // break; - case DefineFont: - reportDefineFont((DefineFontTag)tag, recordLength); - break; - case DefineFont2: - case DefineFont3: - reportDefineFont2or3((DefineFont2Tag)tag, recordLength); - break; - case DefineFont4: - reportDefineFont4((DefineFont4Tag)tag, recordLength); - break; - // case DefineFontInfo: - // reportDefineFontInfo((IFontInfo)tag, recordLength); - // break; - // case DefineFontInfo2: - // reportDefineFontInfo2((DefineFontInfo2Tag)tag, recordLength); - // break; - // case DefineFontAlignZones: - // reportDefineFontAlignZones((DefineFontAlignZonesTag)tag); - // break; - // case DefineFontName: - // reportDefineFontName((DefineFontNameTag)tag); - // break; - // case DefineText: - // reportDefineText((DefineTextTag)tag, extraTags); - // break; - // case DefineText2: - // reportDefineText2((DefineText2Tag)tag, extraTags); - // break; - // case DefineEditText: - // reportDefineEditText((DefineEditTextTag)tag, extraTags); - // break; - case DefineSound: - reportDefineSound((DefineSoundTag)tag, recordLength); - break; - case DefineVideoStream: - reportDefineVideoStream((DefineVideoStreamTag)tag, recordLength); - break; - // case VideoFrame: - // reportVideoFrame((VideoFrameTag)tag); - // break; - // case StartSound: - // reportStartSound((StartSoundTag)tag); - // break; - // case StartSound2: - // reportStartSound2((StartSound2Tag)tag); - // break; - // case SoundStreamHead: - // reportSoundStreamHead((SoundStreamHeadTag)tag); - // break; - // case SoundStreamHead2: - // reportSoundStreamHead((SoundStreamHead2Tag)tag); - // break; - // case SoundStreamBlock: - // reportSoundStreamBlock((SoundStreamBlockTag)tag); - // break; - // case DefineButton: - // reportDefineButton((DefineButtonTag)tag); - // break; - // case DefineButton2: - // reportDefineButton2((DefineButton2Tag)tag); - // break; - // case DefineButtonSound: - // reportDefineButtonSound((DefineButtonSoundTag)tag); - // break; - // case CSMTextSettings: - // reportCSMTextSettings((CSMTextSettingsTag)tag); - // break; - case End: - reportEnd(); - break; - // case JPEGTables: - // reportJPEGTables(((JPEGTablesTag)tag)); - // break; - // case DefineMorphShape: - // reportDefineMorphShape((DefineMorphShapeTag)tag); - // break; - // case DefineMorphShape2: - // reportDefineMorphShape2((DefineMorphShape2Tag)tag); - // break; - // case PlaceObject: - // reportPlaceObject((PlaceObjectTag)tag); - // break; - // case PlaceObject2: - // reportPlaceObject2((PlaceObject2Tag)tag); - // break; - // case PlaceObject3: - // reportPlaceObject3((PlaceObject3Tag)tag); - // break; - // case RemoveObject: - // reportRemoveObject((RemoveObjectTag)tag); - // break; - // case RemoveObject2: - // reportRemoveObject2((RemoveObject2Tag)tag); - // break; - // case SetTabIndex: - // reportSetTabIndex((SetTabIndexTag)tag); - // break; - case FrameLabel: - reportFrameLabel((FrameLabelTag)tag, recordLength); - break; - } - - } - - @Override - protected void writeCompressibleHeader() - { - super.writeCompressibleHeader(); - - tagBuffer.flush(); - report.startEntry(SizeReport.HEADER_DATA, 0, -1, "swfHeader"); - - // Here we are recording the size of the full header, not just - // the compressible part. The full header is 12 bytes plus the - // size needed to encode a RECT record. The 'tagBuffer' contains - // the size of the RECT so we just add 12 to it to get the full size. - report.endEntry(SizeReport.HEADER_DATA, tagBuffer.size() + 12); - } - - @Override - protected void writeDefineSprite(DefineSpriteTag tag) - { - definingSprite = true; - super.writeDefineSprite(tag); - definingSprite = false; - } - - private void reportShowFrame(int recordLength) - { - if (!definingSprite) - { - report.addEntry(SizeReport.FRAME_DATA, -1, 2, "showFrame"); - report.endEntry(SizeReport.FRAME, 0); - } - } - - private void reportDefineBinaryData(DefineBinaryDataTag tag, int recordLength) - { - report.addEntry(SizeReport.BINARY, tag.getCharacterID(), recordLength); - } - - private void reportDefineShape(DefineShapeTag tag, int recordLength) - { - report.addEntry(SizeReport.SHAPE, tag.getCharacterID(), recordLength); - } - - public void reportDoABC(DoABCTag tag, int recordLength) - { - report.addEntry(SizeReport.SCRIPT, -1, recordLength, tag.getName()); - } - - private void reportEnableDebugger2(int recordLength) - { - report.addEntry(SizeReport.HEADER_DATA, -1, recordLength, "enableDebugger"); - } - - public void reportFileAttributes(FileAttributesTag tag, int recordLength) - { - report.addEntry(SizeReport.HEADER_DATA, -1, recordLength, "fileAttributes"); - } - - private void reportMetadata(int recordLength) - { - report.addEntry(SizeReport.HEADER_DATA, -1, recordLength, "metaData"); - } - - private void reportScriptLimits(int recordLength) - { - report.addEntry(SizeReport.HEADER_DATA, -1, recordLength, "scriptLimits"); - } - - private void reportSetBackgroundColor(int recordLength) - { - report.addEntry(SizeReport.HEADER_DATA, -1, recordLength, "backgroundColor"); - } - - private void reportEnd() - { - report.addEntry(SizeReport.HEADER_DATA, -1, 2, "endMarker"); - report.setSize(outputBuffer.size()); - } - - private void reportSymbolClass(SymbolClassTag tag, int recordLength) - { - for (String symbol : tag.getSymbolNames()) - report.addSymbol(symbol, tag.getSymbol(symbol).getCharacterID()); - - report.addEntry(SizeReport.FRAME_DATA, -1, recordLength, "symbolClass"); - } - - private void reportDefineVideoStream(DefineVideoStreamTag tag, int recordLength) - { - report.addEntry(SizeReport.VIDEO, tag.getCharacterID(), recordLength); - } - - private void reportDefineSound(DefineSoundTag tag, int recordLength) - { - report.addEntry(SizeReport.SOUND, tag.getCharacterID(), recordLength); - } - - private void reportDefineFont(DefineFontTag tag, int recordLength) - { - String fontName = null; - DefineFontNameTag license = tag.getLicense(); - if (license != null) - fontName = license.getFontName(); - - report.addEntry(SizeReport.FONT, tag.getCharacterID(), recordLength, - fontName); - } - - private void reportDefineFont2or3(DefineFont2Tag tag, int recordLength) - { - report.addEntry(SizeReport.FONT, tag.getCharacterID(), recordLength, - tag.getFontName()); - } - - private void reportDefineFont4(DefineFont4Tag tag, int recordLength) - { - report.addEntry(SizeReport.FONT, tag.getCharacterID(), recordLength, - tag.getFontName()); - } - - private void reportBitmap(CharacterTag tag, int recordLength) - { - report.addEntry(SizeReport.BITMAP, tag.getCharacterID(), recordLength); - } - - private void reportExportAssets(int recordLength) - { - report.addEntry(SizeReport.FRAME_DATA, -1, recordLength, "exportAssets"); - } - - private void reportDefineSprite(DefineSpriteTag tag, int recordLength) - { - report.addEntry(SizeReport.SPRITE, tag.getCharacterID(), recordLength); - } - - private void reportFrameLabel(FrameLabelTag tag, int recordLength) - { - report.startEntry(SizeReport.FRAME, 0, -1, tag.getName()); - report.addEntry(SizeReport.FRAME_DATA, -1, recordLength, "frameLabel"); - } - - /** - * Write the size report to the specified file. - */ - private void writeSizeReport() - { - Writer reportOut = null; - try - { - reportOut = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(sizeReportFile), "UTF8")); - reportOut.write(report.generate()); - reportOut.flush(); - } - catch (Exception e) - { - // TODO: report a problem - throw new RuntimeException(e); - } - finally - { - if (reportOut != null) - try - { - reportOut.close(); - } - catch (IOException e) - { - // ignore - } - } - } -} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/io/SizeReportWritingSWFWriter.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/io/SizeReportWritingSWFWriter.java b/compiler/src/org/apache/flex/swf/io/SizeReportWritingSWFWriter.java new file mode 100644 index 0000000..9cf1899 --- /dev/null +++ b/compiler/src/org/apache/flex/swf/io/SizeReportWritingSWFWriter.java @@ -0,0 +1,477 @@ +/* + * + * 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. + * + */ + +package org.apache.flex.swf.io; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; + +import org.apache.commons.io.output.CountingOutputStream; + +import org.apache.flex.swf.Header.Compression; +import org.apache.flex.swf.ISWF; +import org.apache.flex.swf.tags.CharacterTag; +import org.apache.flex.swf.tags.DefineBinaryDataTag; +import org.apache.flex.swf.tags.DefineFont2Tag; +import org.apache.flex.swf.tags.DefineFont4Tag; +import org.apache.flex.swf.tags.DefineFontNameTag; +import org.apache.flex.swf.tags.DefineFontTag; +import org.apache.flex.swf.tags.DefineShapeTag; +import org.apache.flex.swf.tags.DefineSoundTag; +import org.apache.flex.swf.tags.DefineSpriteTag; +import org.apache.flex.swf.tags.DefineVideoStreamTag; +import org.apache.flex.swf.tags.DoABCTag; +import org.apache.flex.swf.tags.FileAttributesTag; +import org.apache.flex.swf.tags.FrameLabelTag; +import org.apache.flex.swf.tags.ITag; +import org.apache.flex.swf.tags.SymbolClassTag; + +/** + * A class that writes a SWF and a size report. The path of the size report is + * passed to the constructor. When the SWF is written to disk, the size report + * is also written. + */ +public class SizeReportWritingSWFWriter extends SWFWriter +{ + /** + * SWF writer factory for SWF writers that also create size reports. + */ + private static class SWFWriterFactory implements ISWFWriterFactory + { + + SWFWriterFactory(File sizeReport) + { + this.sizeReport = sizeReport; + } + + private final File sizeReport; + + @Override + public ISWFWriter createSWFWriter(ISWF swf, Compression useCompression, + boolean enableDebug, boolean enableTelemetry) + { + return new SizeReportWritingSWFWriter(swf, useCompression, enableDebug, enableTelemetry, + sizeReport); + } + + } + + /** + * Get a SWF Writer factory that can create an instance of a class that can + * write a SWF with the optional capability of creating a size report. + * + * @param sizeReport if non-null, return a factory for an object that can + * create a size report in addition to a writing a SWF. Otherwise the + * factory is for an object that just writes a SWF. + * @return a SWF writer factory. + */ + public static ISWFWriterFactory getSWFWriterFactory(File sizeReport) + { + if (sizeReport != null) + return new SWFWriterFactory(sizeReport); + + return SWFWriter.DEFAULT_SWF_WRITER_FACTORY; + } + + /** + * Create a SWF writer with a size reporter. + * + * @param swf the SWF model to be encoded + * @param useCompression use ZLIB compression if true + * @param enableDebug enable debugging of the SWF if true + * @param sizeReport the file the size report is written to. + */ + public SizeReportWritingSWFWriter(ISWF swf, Compression useCompression, + boolean enableDebug, boolean enableTelemetry, File sizeReport) + { + super(swf, useCompression, enableDebug, enableTelemetry); + + assert sizeReport != null; + + this.sizeReportFile = sizeReport; + this.report = new SizeReport(); + } + + private final File sizeReportFile; + private final SizeReport report; + private boolean definingSprite = false; + + @Override + public int writeTo(File outputFile) throws FileNotFoundException, IOException + { + final int bytes = super.writeTo(outputFile); + report.setCompressedSize(bytes); + + return bytes; + } + + @Override + public void writeTo(OutputStream output) + { + CountingOutputStream countingOutput = new CountingOutputStream(output); + super.writeTo(countingOutput); + + report.setCompressedSize(countingOutput.getCount()); + + writeSizeReport(); + } + + @Override + protected void finishTag(ITag tag, IOutputBitStream tagData, IOutputBitStream out) + { + int startPos = out.size(); + super.finishTag(tag, tagData, out); + + int recordLength = out.size() - startPos; + + switch (tag.getTagType()) + { + case DoABC: + reportDoABC((DoABCTag)tag, recordLength); + break; + case FileAttributes: + reportFileAttributes((FileAttributesTag)tag, recordLength); + break; + case SymbolClass: + reportSymbolClass((SymbolClassTag)tag, recordLength); + break; + case ShowFrame: + reportShowFrame(recordLength); + break; + case SetBackgroundColor: + reportSetBackgroundColor(recordLength); + break; + case EnableDebugger2: + reportEnableDebugger2(recordLength); + break; + case ScriptLimits: + reportScriptLimits(recordLength); + break; + // case ProductInfo: + // reportProductInfo((ProductInfoTag)tag, recordLength); + // break; + case Metadata: + reportMetadata(recordLength); + break; + case DefineBits: + case DefineBitsJPEG2: + case DefineBitsJPEG3: + case DefineBitsLossless2: + reportBitmap((CharacterTag)tag, recordLength); + break; + case DefineBinaryData: + reportDefineBinaryData((DefineBinaryDataTag)tag, recordLength); + break; + case DefineShape: + case DefineShape2: + case DefineShape3: + case DefineShape4: + reportDefineShape((DefineShapeTag)tag, recordLength); + break; + case DefineSprite: + reportDefineSprite((DefineSpriteTag)tag, recordLength); + break; + case ExportAssets: + reportExportAssets(recordLength); + break; + // case DefineScalingGrid: + // reportDefineScalingGrid((DefineScalingGridTag)tag, recordLength); + // break; + case DefineFont: + reportDefineFont((DefineFontTag)tag, recordLength); + break; + case DefineFont2: + case DefineFont3: + reportDefineFont2or3((DefineFont2Tag)tag, recordLength); + break; + case DefineFont4: + reportDefineFont4((DefineFont4Tag)tag, recordLength); + break; + // case DefineFontInfo: + // reportDefineFontInfo((IFontInfo)tag, recordLength); + // break; + // case DefineFontInfo2: + // reportDefineFontInfo2((DefineFontInfo2Tag)tag, recordLength); + // break; + // case DefineFontAlignZones: + // reportDefineFontAlignZones((DefineFontAlignZonesTag)tag); + // break; + // case DefineFontName: + // reportDefineFontName((DefineFontNameTag)tag); + // break; + // case DefineText: + // reportDefineText((DefineTextTag)tag, extraTags); + // break; + // case DefineText2: + // reportDefineText2((DefineText2Tag)tag, extraTags); + // break; + // case DefineEditText: + // reportDefineEditText((DefineEditTextTag)tag, extraTags); + // break; + case DefineSound: + reportDefineSound((DefineSoundTag)tag, recordLength); + break; + case DefineVideoStream: + reportDefineVideoStream((DefineVideoStreamTag)tag, recordLength); + break; + // case VideoFrame: + // reportVideoFrame((VideoFrameTag)tag); + // break; + // case StartSound: + // reportStartSound((StartSoundTag)tag); + // break; + // case StartSound2: + // reportStartSound2((StartSound2Tag)tag); + // break; + // case SoundStreamHead: + // reportSoundStreamHead((SoundStreamHeadTag)tag); + // break; + // case SoundStreamHead2: + // reportSoundStreamHead((SoundStreamHead2Tag)tag); + // break; + // case SoundStreamBlock: + // reportSoundStreamBlock((SoundStreamBlockTag)tag); + // break; + // case DefineButton: + // reportDefineButton((DefineButtonTag)tag); + // break; + // case DefineButton2: + // reportDefineButton2((DefineButton2Tag)tag); + // break; + // case DefineButtonSound: + // reportDefineButtonSound((DefineButtonSoundTag)tag); + // break; + // case CSMTextSettings: + // reportCSMTextSettings((CSMTextSettingsTag)tag); + // break; + case End: + reportEnd(); + break; + // case JPEGTables: + // reportJPEGTables(((JPEGTablesTag)tag)); + // break; + // case DefineMorphShape: + // reportDefineMorphShape((DefineMorphShapeTag)tag); + // break; + // case DefineMorphShape2: + // reportDefineMorphShape2((DefineMorphShape2Tag)tag); + // break; + // case PlaceObject: + // reportPlaceObject((PlaceObjectTag)tag); + // break; + // case PlaceObject2: + // reportPlaceObject2((PlaceObject2Tag)tag); + // break; + // case PlaceObject3: + // reportPlaceObject3((PlaceObject3Tag)tag); + // break; + // case RemoveObject: + // reportRemoveObject((RemoveObjectTag)tag); + // break; + // case RemoveObject2: + // reportRemoveObject2((RemoveObject2Tag)tag); + // break; + // case SetTabIndex: + // reportSetTabIndex((SetTabIndexTag)tag); + // break; + case FrameLabel: + reportFrameLabel((FrameLabelTag)tag, recordLength); + break; + } + + } + + @Override + protected void writeCompressibleHeader() + { + super.writeCompressibleHeader(); + + tagBuffer.flush(); + report.startEntry(SizeReport.HEADER_DATA, 0, -1, "swfHeader"); + + // Here we are recording the size of the full header, not just + // the compressible part. The full header is 12 bytes plus the + // size needed to encode a RECT record. The 'tagBuffer' contains + // the size of the RECT so we just add 12 to it to get the full size. + report.endEntry(SizeReport.HEADER_DATA, tagBuffer.size() + 12); + } + + @Override + protected void writeDefineSprite(DefineSpriteTag tag) + { + definingSprite = true; + super.writeDefineSprite(tag); + definingSprite = false; + } + + private void reportShowFrame(int recordLength) + { + if (!definingSprite) + { + report.addEntry(SizeReport.FRAME_DATA, -1, 2, "showFrame"); + report.endEntry(SizeReport.FRAME, 0); + } + } + + private void reportDefineBinaryData(DefineBinaryDataTag tag, int recordLength) + { + report.addEntry(SizeReport.BINARY, tag.getCharacterID(), recordLength); + } + + private void reportDefineShape(DefineShapeTag tag, int recordLength) + { + report.addEntry(SizeReport.SHAPE, tag.getCharacterID(), recordLength); + } + + public void reportDoABC(DoABCTag tag, int recordLength) + { + report.addEntry(SizeReport.SCRIPT, -1, recordLength, tag.getName()); + } + + private void reportEnableDebugger2(int recordLength) + { + report.addEntry(SizeReport.HEADER_DATA, -1, recordLength, "enableDebugger"); + } + + public void reportFileAttributes(FileAttributesTag tag, int recordLength) + { + report.addEntry(SizeReport.HEADER_DATA, -1, recordLength, "fileAttributes"); + } + + private void reportMetadata(int recordLength) + { + report.addEntry(SizeReport.HEADER_DATA, -1, recordLength, "metaData"); + } + + private void reportScriptLimits(int recordLength) + { + report.addEntry(SizeReport.HEADER_DATA, -1, recordLength, "scriptLimits"); + } + + private void reportSetBackgroundColor(int recordLength) + { + report.addEntry(SizeReport.HEADER_DATA, -1, recordLength, "backgroundColor"); + } + + private void reportEnd() + { + report.addEntry(SizeReport.HEADER_DATA, -1, 2, "endMarker"); + report.setSize(outputBuffer.size()); + } + + private void reportSymbolClass(SymbolClassTag tag, int recordLength) + { + for (String symbol : tag.getSymbolNames()) + report.addSymbol(symbol, tag.getSymbol(symbol).getCharacterID()); + + report.addEntry(SizeReport.FRAME_DATA, -1, recordLength, "symbolClass"); + } + + private void reportDefineVideoStream(DefineVideoStreamTag tag, int recordLength) + { + report.addEntry(SizeReport.VIDEO, tag.getCharacterID(), recordLength); + } + + private void reportDefineSound(DefineSoundTag tag, int recordLength) + { + report.addEntry(SizeReport.SOUND, tag.getCharacterID(), recordLength); + } + + private void reportDefineFont(DefineFontTag tag, int recordLength) + { + String fontName = null; + DefineFontNameTag license = tag.getLicense(); + if (license != null) + fontName = license.getFontName(); + + report.addEntry(SizeReport.FONT, tag.getCharacterID(), recordLength, + fontName); + } + + private void reportDefineFont2or3(DefineFont2Tag tag, int recordLength) + { + report.addEntry(SizeReport.FONT, tag.getCharacterID(), recordLength, + tag.getFontName()); + } + + private void reportDefineFont4(DefineFont4Tag tag, int recordLength) + { + report.addEntry(SizeReport.FONT, tag.getCharacterID(), recordLength, + tag.getFontName()); + } + + private void reportBitmap(CharacterTag tag, int recordLength) + { + report.addEntry(SizeReport.BITMAP, tag.getCharacterID(), recordLength); + } + + private void reportExportAssets(int recordLength) + { + report.addEntry(SizeReport.FRAME_DATA, -1, recordLength, "exportAssets"); + } + + private void reportDefineSprite(DefineSpriteTag tag, int recordLength) + { + report.addEntry(SizeReport.SPRITE, tag.getCharacterID(), recordLength); + } + + private void reportFrameLabel(FrameLabelTag tag, int recordLength) + { + report.startEntry(SizeReport.FRAME, 0, -1, tag.getName()); + report.addEntry(SizeReport.FRAME_DATA, -1, recordLength, "frameLabel"); + } + + /** + * Write the size report to the specified file. + */ + private void writeSizeReport() + { + Writer reportOut = null; + try + { + reportOut = new BufferedWriter(new OutputStreamWriter( + new FileOutputStream(sizeReportFile), "UTF8")); + reportOut.write(report.generate()); + reportOut.flush(); + } + catch (Exception e) + { + // TODO: report a problem + throw new RuntimeException(e); + } + finally + { + if (reportOut != null) + try + { + reportOut.close(); + } + catch (IOException e) + { + // ignore + } + } + } +} http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2c4f6311/compiler/src/org/apache/flex/swf/tags/EnableTelemetryTag.java ---------------------------------------------------------------------- diff --git a/compiler/src/org/apache/flex/swf/tags/EnableTelemetryTag.java b/compiler/src/org/apache/flex/swf/tags/EnableTelemetryTag.java new file mode 100644 index 0000000..9f68e30 --- /dev/null +++ b/compiler/src/org/apache/flex/swf/tags/EnableTelemetryTag.java @@ -0,0 +1,40 @@ +package org.apache.flex.swf.tags; + +import org.apache.flex.swf.TagType; + +/** + * Represents a <code>EnableTelemetry</code> tag in a SWF file. + * <p> + * The EnableTelemetry tag instructs the flash runtime to provide advanced telemetry options. + */ +public class EnableTelemetryTag extends Tag { + + /** + * Constructor. + */ + public EnableTelemetryTag() { + super(TagType.EnableTelemetry); + } + + /** + * Constructor with initialization. + */ + public EnableTelemetryTag(String password) { + this(); + this.password = password; + } + + + private String password; + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + +}
