package com.flagstone.cookbook;
/*
* FindIdentifiersjava
* Cookbook
*
* Copyright (c) 2001-2011 Flagstone Software Ltd. All rights reserved.
*
* This code is distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, AND Flagstone HEREBY DISCLAIMS ALL SUCH
* WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
*/
import java.io.File;
import java.util.List;
import com.flagstone.transform.DefineTag;
import com.flagstone.transform.Movie;
import com.flagstone.transform.MovieTag;
import com.flagstone.transform.ShowFrame;
/*
* This example shows how to iterate through a movie to find the highest
* unique identifier. Three different techniques are used:
*
* 1. Search all frames.
*
* 2. Start at the end of the movie and assume the first identifier found is
* also the highest since identifiers are typically ordered ascendantly.
*
* 3. Search only the first frame. This is valid only if all the definitions
* are added to the start of the Flash (.swf) file.
*
* To run this example, type the following on a command line:
*
* java -cp ... com.flagstone.cookbook.FindIdentifiers file-in
*
* where:
*
* file-in is the path of the Flash (.swf) files to load.
*/
public final class FindIdentifiers {
public static void main(String[] args)
{
try {
String out = args[0];
Movie movie = new Movie();
movie.decodeFromFile(new File(out));
System.out.println("Searching all frames...");
System.out.println("Highest Identifier: "
+ highestIdentifier(movie.getObjects()));
System.out.println("Searching for the last identifier...");
System.out.println("Highest Identifier: "
+ lastIdentifier(movie.getObjects()));
System.out.println("Searching the first frame...");
System.out.println("Highest Identifier: "
+ highestIdentifierInFirstFrame(movie.getObjects()));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static int highestIdentifier(final List<MovieTag>list) {
int uid = 0;
DefineTag definition;
for (MovieTag object : list) {
if (object instanceof DefineTag) {
definition = (DefineTag)object;
if (definition.getIdentifier() > uid) {
uid = definition.getIdentifier();
}
}
}
return uid;
}
public static int lastIdentifier(final List<MovieTag>list) {
int uid = 0;
final int count = list.size();
MovieTag object;
DefineTag definition;
for (int i = 0; i < count; i++) {
object = list.get(i);
if (object instanceof DefineTag) {
definition = (DefineTag)object;
uid = definition.getIdentifier();
break;
}
}
return uid;
}
public static int highestIdentifierInFirstFrame(final List<MovieTag>list) {
int uid = 0;
DefineTag definition;
for (MovieTag object : list) {
if (object instanceof DefineTag) {
definition = (DefineTag)object;
if (definition.getIdentifier() > uid) {
uid = definition.getIdentifier();
}
} else if (object instanceof ShowFrame) {
break;
}
}
return uid;
}
}