diff --git a/.gitignore b/.gitignore index c920a075b9fbaed117cb029e4e0382da70911cf8..934e0e06ffa0a2aeedbe1341d321549336719cc0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ /bin /target -/testdata/ diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index dd0d799ca5a2f6b653c27e0c695b8f43da5c6967..9db11560281da540dab2bc02b282ce037585556b 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -54,6 +54,7 @@ org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line @@ -99,6 +100,7 @@ org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert @@ -146,6 +148,7 @@ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=inser org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert @@ -223,6 +226,7 @@ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do n org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs index fa6b334993eec32c99fa6cc1b3f2667fa81ba892..5d68cd694a41cdcbab3ecadfd7da8de46c0ade3e 100644 --- a/.settings/org.eclipse.jdt.ui.prefs +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -5,16 +5,18 @@ cleanup.add_missing_deprecated_annotations=true cleanup.add_missing_methods=false cleanup.add_missing_nls_tags=false cleanup.add_missing_override_annotations=true -cleanup.add_missing_override_annotations_interface_methods=false +cleanup.add_missing_override_annotations_interface_methods=true cleanup.add_serial_version_id=true cleanup.always_use_blocks=true cleanup.always_use_parentheses_in_expressions=true -cleanup.always_use_this_for_non_static_field_access=true -cleanup.always_use_this_for_non_static_method_access=true +cleanup.always_use_this_for_non_static_field_access=false +cleanup.always_use_this_for_non_static_method_access=false +cleanup.convert_functional_interfaces=true cleanup.convert_to_enhanced_for_loop=true cleanup.correct_indentation=true cleanup.format_source_code=true cleanup.format_source_code_changes_only=false +cleanup.insert_inferred_type_arguments=false cleanup.make_local_variable_final=true cleanup.make_parameters_final=true cleanup.make_private_fields_final=true @@ -29,6 +31,7 @@ cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=tru cleanup.qualify_static_member_accesses_with_declaring_class=true cleanup.qualify_static_method_accesses_with_declaring_class=true cleanup.remove_private_constructors=true +cleanup.remove_redundant_type_arguments=true cleanup.remove_trailing_whitespaces=true cleanup.remove_trailing_whitespaces_all=true cleanup.remove_trailing_whitespaces_ignore_empty=false @@ -42,18 +45,21 @@ cleanup.remove_unused_private_methods=true cleanup.remove_unused_private_types=true cleanup.sort_members=false cleanup.sort_members_all=false +cleanup.use_anonymous_class_creation=false cleanup.use_blocks=true cleanup.use_blocks_only_for_return_and_throw=false +cleanup.use_lambda=true cleanup.use_parentheses_in_expressions=true -cleanup.use_this_for_non_static_field_access=false -cleanup.use_this_for_non_static_field_access_only_if_necessary=false +cleanup.use_this_for_non_static_field_access=true +cleanup.use_this_for_non_static_field_access_only_if_necessary=true cleanup.use_this_for_non_static_method_access=true -cleanup.use_this_for_non_static_method_access_only_if_necessary=false -cleanup_profile=_TeeTime +cleanup.use_this_for_non_static_method_access_only_if_necessary=true +cleanup.use_type_arguments=false +cleanup_profile=_TeeTime - Clean Up cleanup_settings_version=2 eclipse.preferences.version=1 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -formatter_profile=_Kieker - Profile +formatter_profile=_TeeTime - Profile formatter_settings_version=12 org.eclipse.jdt.ui.ignorelowercasenames=true org.eclipse.jdt.ui.importorder=java;javax;junit;org;com;kieker;kieker.test; diff --git a/.settings/org.moreunit.core.prefs b/.settings/org.moreunit.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..efd9d77f2e2aa8a2b60873bbeed7126398c360ec --- /dev/null +++ b/.settings/org.moreunit.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.moreunit.core.anyLanguage.srcFolderPathTemplate=${srcProject} +org.moreunit.core.anyLanguage.testFileNameTemplate=${srcFile}Test +org.moreunit.core.anyLanguage.testFolderPathTemplate=${srcProject} diff --git a/.settings/org.moreunit.prefs b/.settings/org.moreunit.prefs index b23adba051f1b921d58e03e5183f02b2627c5ce1..e72063050fa4c5826fa8603ac7acc1e88113f963 100644 --- a/.settings/org.moreunit.prefs +++ b/.settings/org.moreunit.prefs @@ -1,2 +1,4 @@ eclipse.preferences.version=1 org.moreunit.preferences.version=2 +org.moreunit.unitsourcefolder=teetime\:src/main/java\:teetime\:src/test/java\#teetime\:src/main/java\:teetime\:src/performancetest/java +org.moreunit.useprojectsettings=true diff --git a/doc/logo-proposals.txt b/doc/logo-proposals.txt new file mode 100644 index 0000000000000000000000000000000000000000..0b7d2893b7c4a9647aac0bfb10b4c8666250c702 --- /dev/null +++ b/doc/logo-proposals.txt @@ -0,0 +1,19 @@ +[related to tea] +https://www.iconfinder.com/icons/1393/coffee_cup_hot_tea_icon#size=128 +https://www.iconfinder.com/icons/264396/cup_drink_mug_tea_icon#size=512 +https://www.iconfinder.com/icons/286054/cup_drink_glass_hot_tea_icon#size=512 + +[related to T] + + +[related to time] +https://www.iconfinder.com/icons/56268/clock_time_wait_watch_icon#size=256 +https://www.iconfinder.com/icons/62306/clock_time_wait_icon#size=126 +https://www.iconfinder.com/icons/276150/clock_time_timer_watch_icon#size=512 +https://www.iconfinder.com/icons/227850/alarm_clock_time_timer_wait_watch_icon#size=512 +https://www.iconfinder.com/icons/298242/alarm_business_clock_deadline_efficiency_estimate_event_fast_finish_fire_hot_hot_time_hours_meeting_deadline_minutes_productivity_quick_schedule_seconds_seo_time_time_management_timer_timing_wait_watch_icon#size=512 +https://www.iconfinder.com/icons/257522/alarm_clock_date_efficiency_event_fast_hourglass_loading_marketing_measure_minute_remind_sand_sandwatch_schedule_second_seo_stopwatch_time_timed_timer_wait_waiting_watch_web_working_icon#size=128 +https://www.iconfinder.com/icons/334159/alarm_business_clock_deadline_efficiency_estimate_event_fast_finish_fire_hot_hours_management_meeting_minutes_productivity_quick_schedule_seconds_seo_time_timer_timing_wait_watch_icon#size=256 + +[tea & time] +http://findicons.com/icon/103028/tealife2_icon_24 diff --git a/src/main/java/teetime/framework/AnalysisConfiguration.java b/src/main/java/teetime/framework/AnalysisConfiguration.java index 1a291c2e54dacc5b376b0a2420f064c9e741acd3..c051594442e7982ccad776bf71597a6aaeb95547 100644 --- a/src/main/java/teetime/framework/AnalysisConfiguration.java +++ b/src/main/java/teetime/framework/AnalysisConfiguration.java @@ -3,8 +3,12 @@ package teetime.framework; import java.util.LinkedList; import java.util.List; +import teetime.framework.pipe.PipeFactoryRegistry; + public class AnalysisConfiguration { + protected static final PipeFactoryRegistry PIPE_FACTORY_REGISTRY = PipeFactoryRegistry.INSTANCE; + private final List<HeadStage> consumerStages = new LinkedList<HeadStage>(); private final List<HeadStage> finiteProducerStages = new LinkedList<HeadStage>(); private final List<HeadStage> infiniteProducerStages = new LinkedList<HeadStage>(); diff --git a/src/main/java/teetime/framework/pipe/IPipeFactory.java b/src/main/java/teetime/framework/pipe/IPipeFactory.java index 48627dbac5369b2ec6d7fa7cb1bf849f333c1955..8ff43cae918cbad003e0282a9af5e794cdf41c06 100644 --- a/src/main/java/teetime/framework/pipe/IPipeFactory.java +++ b/src/main/java/teetime/framework/pipe/IPipeFactory.java @@ -2,8 +2,8 @@ package teetime.framework.pipe; import teetime.framework.InputPort; import teetime.framework.OutputPort; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; public interface IPipeFactory { diff --git a/src/main/java/teetime/framework/pipe/OrderedGrowableArrayPipeFactory.java b/src/main/java/teetime/framework/pipe/OrderedGrowableArrayPipeFactory.java index 76f17f5d48014dbb4a1a66e6eadb80eee92c7ca4..9142b80e11d7cbcfe4cd057f857840bf167ae9ab 100644 --- a/src/main/java/teetime/framework/pipe/OrderedGrowableArrayPipeFactory.java +++ b/src/main/java/teetime/framework/pipe/OrderedGrowableArrayPipeFactory.java @@ -2,8 +2,8 @@ package teetime.framework.pipe; import teetime.framework.InputPort; import teetime.framework.OutputPort; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; public class OrderedGrowableArrayPipeFactory implements IPipeFactory { diff --git a/src/main/java/teetime/framework/pipe/PipeFactory.java b/src/main/java/teetime/framework/pipe/PipeFactoryRegistry.java similarity index 93% rename from src/main/java/teetime/framework/pipe/PipeFactory.java rename to src/main/java/teetime/framework/pipe/PipeFactoryRegistry.java index fffb32b100b40aeebdab6f62f386695c66af36c9..2817b034be35f965bdc93254ae719d92b60f7dfc 100644 --- a/src/main/java/teetime/framework/pipe/PipeFactory.java +++ b/src/main/java/teetime/framework/pipe/PipeFactoryRegistry.java @@ -8,9 +8,9 @@ import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class PipeFactory { +public class PipeFactoryRegistry { - private static final Logger LOGGER = LoggerFactory.getLogger(PipeFactory.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PipeFactoryRegistry.class); public enum ThreadCommunication { INTER, INTRA @@ -30,9 +30,9 @@ public class PipeFactory { private final Map<String, IPipeFactory> pipeFactories = new HashMap<String, IPipeFactory>(); - public static PipeFactory INSTANCE = new PipeFactory(); + public static PipeFactoryRegistry INSTANCE = new PipeFactoryRegistry(); - private PipeFactory() { + private PipeFactoryRegistry() { try { List<IPipeFactory> pipeFactories = PipeFactoryLoader.loadFromFile("conf/pipe-factories.conf"); for (IPipeFactory pipeFactory : pipeFactories) { diff --git a/src/main/java/teetime/framework/pipe/SingleElementPipeFactory.java b/src/main/java/teetime/framework/pipe/SingleElementPipeFactory.java index ee8d3cf499fd6b11456fd43198895afa41cac0f2..b51000fab0dc391fcb2c627cc3089e3508a5044d 100644 --- a/src/main/java/teetime/framework/pipe/SingleElementPipeFactory.java +++ b/src/main/java/teetime/framework/pipe/SingleElementPipeFactory.java @@ -2,8 +2,8 @@ package teetime.framework.pipe; import teetime.framework.InputPort; import teetime.framework.OutputPort; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; public class SingleElementPipeFactory implements IPipeFactory { diff --git a/src/main/java/teetime/framework/pipe/SpScPipeFactory.java b/src/main/java/teetime/framework/pipe/SpScPipeFactory.java index 25331aa398d0955c2bfd7d34eef94ce4fd924743..745e79715025cb5e4d5ad6690f1d6ba7c5265147 100644 --- a/src/main/java/teetime/framework/pipe/SpScPipeFactory.java +++ b/src/main/java/teetime/framework/pipe/SpScPipeFactory.java @@ -2,8 +2,8 @@ package teetime.framework.pipe; import teetime.framework.InputPort; import teetime.framework.OutputPort; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; public class SpScPipeFactory implements IPipeFactory { diff --git a/src/main/java/teetime/framework/pipe/UnorderedGrowablePipeFactory.java b/src/main/java/teetime/framework/pipe/UnorderedGrowablePipeFactory.java index e18e896d1d4903cf61407fdb70e75cb6a1ba9211..219d95d796c6d688dbf09e8356c283bd24ac75c3 100644 --- a/src/main/java/teetime/framework/pipe/UnorderedGrowablePipeFactory.java +++ b/src/main/java/teetime/framework/pipe/UnorderedGrowablePipeFactory.java @@ -2,8 +2,8 @@ package teetime.framework.pipe; import teetime.framework.InputPort; import teetime.framework.OutputPort; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; public class UnorderedGrowablePipeFactory implements IPipeFactory { diff --git a/src/main/java/teetime/stage/io/ByteArray2String.java b/src/main/java/teetime/stage/ByteArray2String.java similarity index 77% rename from src/main/java/teetime/stage/io/ByteArray2String.java rename to src/main/java/teetime/stage/ByteArray2String.java index 2a132fbc27125168fc638aec7131dbc80abe3ee5..d00ccca99686ae2187273f846132bfddf5abd508 100644 --- a/src/main/java/teetime/stage/io/ByteArray2String.java +++ b/src/main/java/teetime/stage/ByteArray2String.java @@ -1,4 +1,4 @@ -package teetime.stage.io; +package teetime.stage; import teetime.framework.ConsumerStage; import teetime.framework.OutputPort; @@ -9,10 +9,10 @@ public class ByteArray2String extends ConsumerStage<byte[]> { @Override protected void execute(final byte[] element) { - this.send(outputPort, new String(element)); + this.send(this.outputPort, new String(element)); } public OutputPort<? extends String> getOutputPort() { - return outputPort; + return this.outputPort; } } diff --git a/src/main/java/teetime/stage/io/CipherByteArray.java b/src/main/java/teetime/stage/CipherByteArray.java similarity index 76% rename from src/main/java/teetime/stage/io/CipherByteArray.java rename to src/main/java/teetime/stage/CipherByteArray.java index 4300802dfd5c6fde84f3332702cc68e01584dfde..b31cf474f065a7281eadfc531c0e73d58f61d757 100644 --- a/src/main/java/teetime/stage/io/CipherByteArray.java +++ b/src/main/java/teetime/stage/CipherByteArray.java @@ -1,4 +1,4 @@ -package teetime.stage.io; +package teetime.stage; import java.security.spec.KeySpec; @@ -15,14 +15,14 @@ public class CipherByteArray extends ConsumerStage<byte[]> { private final OutputPort<byte[]> outputPort = this.createOutputPort(); private Cipher cipher = null; - private final byte[] salt = { 't', 'e', 's', 't' }; - private SecretKeySpec skeyspec = null; public enum CipherMode { ENCRYPT, DECRYPT } public CipherByteArray(final String password, final CipherMode mode) { + final byte[] salt = { 't', 'e', 's', 't' }; + SecretKeySpec skeyspec = null; KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt, @@ -40,11 +40,11 @@ public class CipherByteArray extends ConsumerStage<byte[]> { skeyspec = new SecretKeySpec(secretKey.getEncoded(), "AES"); try { - cipher = Cipher.getInstance(skeyspec.getAlgorithm()); + this.cipher = Cipher.getInstance(skeyspec.getAlgorithm()); if (mode == CipherMode.ENCRYPT) { - cipher.init(Cipher.ENCRYPT_MODE, skeyspec); + this.cipher.init(Cipher.ENCRYPT_MODE, skeyspec); } else { - cipher.init(Cipher.DECRYPT_MODE, skeyspec); + this.cipher.init(Cipher.DECRYPT_MODE, skeyspec); } } catch (Exception e) { e.printStackTrace(); @@ -57,16 +57,16 @@ public class CipherByteArray extends ConsumerStage<byte[]> { byte[] output = null; try { - output = cipher.doFinal(element); + output = this.cipher.doFinal(element); } catch (Exception e) { e.printStackTrace(); } - this.send(outputPort, output); + this.send(this.outputPort, output); } public OutputPort<? extends byte[]> getOutputPort() { - return outputPort; + return this.outputPort; } } diff --git a/src/main/java/teetime/stage/io/Tokenizer.java b/src/main/java/teetime/stage/Tokenizer.java similarity index 75% rename from src/main/java/teetime/stage/io/Tokenizer.java rename to src/main/java/teetime/stage/Tokenizer.java index e40aebef8ddfc107adddbf40d4de0cad9fee8017..24314cbe083d7db681892c4933f743c9b5822514 100644 --- a/src/main/java/teetime/stage/io/Tokenizer.java +++ b/src/main/java/teetime/stage/Tokenizer.java @@ -1,4 +1,4 @@ -package teetime.stage.io; +package teetime.stage; import java.util.StringTokenizer; @@ -16,14 +16,14 @@ public class Tokenizer extends ConsumerStage<String> { @Override protected void execute(final String element) { - StringTokenizer st = new StringTokenizer(element, regex); + StringTokenizer st = new StringTokenizer(element, this.regex); while (st.hasMoreTokens()) { - this.send(outputPort, st.nextToken()); + this.send(this.outputPort, st.nextToken()); } } public OutputPort<? extends String> getOutputPort() { - return outputPort; + return this.outputPort; } } diff --git a/src/main/java/teetime/stage/io/ZipByteArray.java b/src/main/java/teetime/stage/ZipByteArray.java similarity index 88% rename from src/main/java/teetime/stage/io/ZipByteArray.java rename to src/main/java/teetime/stage/ZipByteArray.java index a4720218683d5f598070b8682fb82f5e81819cc3..ca61720caf000db5aa6c9417151614f0a31d0c3f 100644 --- a/src/main/java/teetime/stage/io/ZipByteArray.java +++ b/src/main/java/teetime/stage/ZipByteArray.java @@ -1,4 +1,4 @@ -package teetime.stage.io; +package teetime.stage; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -40,10 +40,10 @@ public class ZipByteArray extends ConsumerStage<byte[]> { } catch (Exception e) { e.printStackTrace(); } - this.send(outputPort, cache); + this.send(this.outputPort, cache); } - public static byte[] compress(final byte[] data) throws IOException { + private byte[] compress(final byte[] data) throws IOException { Deflater deflater = new Deflater(); deflater.setInput(data); @@ -63,7 +63,7 @@ public class ZipByteArray extends ConsumerStage<byte[]> { return output; } - public static byte[] decompress(final byte[] data) throws IOException, DataFormatException { + private byte[] decompress(final byte[] data) throws IOException, DataFormatException { Inflater inflater = new Inflater(); inflater.setInput(data); @@ -82,7 +82,7 @@ public class ZipByteArray extends ConsumerStage<byte[]> { } public OutputPort<? extends byte[]> getOutputPort() { - return outputPort; + return this.outputPort; } } diff --git a/src/main/java/teetime/stage/io/ByteArrayFileWriter.java b/src/main/java/teetime/stage/io/ByteArrayFileWriter.java index a41872e924a50a3dce3af634d4d50e9e1705325d..3df492b430963d2258bb98cfb5173f5e52a625c2 100644 --- a/src/main/java/teetime/stage/io/ByteArrayFileWriter.java +++ b/src/main/java/teetime/stage/io/ByteArrayFileWriter.java @@ -2,21 +2,28 @@ package teetime.stage.io; import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; import teetime.framework.ConsumerStage; +import com.google.common.io.Files; + public class ByteArrayFileWriter extends ConsumerStage<byte[]> { private final File file; public ByteArrayFileWriter(final File file) { this.file = file; + try { + Files.touch(file); + } catch (IOException e) { + e.printStackTrace(); + } } @Override protected void execute(final byte[] element) { FileOutputStream fo; - // TODO check if file exists, otherwise create file try { fo = new FileOutputStream(this.file); fo.write(element); diff --git a/src/main/java/teetime/stage/io/File2ByteArray.java b/src/main/java/teetime/stage/io/File2ByteArray.java index 051f0499d1c04497abbca09ab75ec930752498fd..390598a17bc13d0a5c9dbbb5a1ba684dc338235a 100644 --- a/src/main/java/teetime/stage/io/File2ByteArray.java +++ b/src/main/java/teetime/stage/io/File2ByteArray.java @@ -17,14 +17,14 @@ public class File2ByteArray extends ConsumerStage<File> implements HeadStage { protected void execute(final File element) { try { byte[] cache = Files.toByteArray(element); - this.send(outputPort, cache); + this.send(this.outputPort, cache); } catch (IOException e) { throw new IllegalStateException(e); } } public OutputPort<? extends byte[]> getOutputPort() { - return outputPort; + return this.outputPort; } @Override diff --git a/src/main/java/teetime/stage/kieker/Dir2RecordsFilter.java b/src/main/java/teetime/stage/kieker/Dir2RecordsFilter.java index 1961af39d92664d0b307b08ec57a31e19c2c1b7c..15ecff3f80aeedf5dadc27e455f7137edc4f6fa4 100644 --- a/src/main/java/teetime/stage/kieker/Dir2RecordsFilter.java +++ b/src/main/java/teetime/stage/kieker/Dir2RecordsFilter.java @@ -18,12 +18,12 @@ package teetime.stage.kieker; import java.io.File; import teetime.framework.InputPort; -import teetime.framework.OutputPort; import teetime.framework.OldPipeline; -import teetime.framework.pipe.PipeFactory; -import teetime.framework.pipe.SingleElementPipe; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; +import teetime.framework.OutputPort; +import teetime.framework.pipe.IPipeFactory; +import teetime.framework.pipe.PipeFactoryRegistry; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; import teetime.stage.FileExtensionSwitch; import teetime.stage.basic.merger.Merger; import teetime.stage.io.Directory2FilesFilter; @@ -44,7 +44,7 @@ import kieker.common.util.filesystem.FSUtil; */ public class Dir2RecordsFilter extends OldPipeline<ClassNameRegistryCreationFilter, Merger<IMonitoringRecord>> { - private final PipeFactory pipeFactory = PipeFactory.INSTANCE; + private final PipeFactoryRegistry pipeFactoryRegistry = PipeFactoryRegistry.INSTANCE; private ClassNameRegistryRepository classNameRegistryRepository; /** @@ -72,19 +72,17 @@ public class Dir2RecordsFilter extends OldPipeline<ClassNameRegistryCreationFilt final OutputPort<File> zipFileOutputPort = fileExtensionSwitch.addFileExtension(FSUtil.ZIP_FILE_EXTENSION); // connect ports by pipes - this.pipeFactory.create(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false, 1) - .connectPorts(classNameRegistryCreationFilter.getOutputPort(), directory2FilesFilter.getInputPort()); - - this.pipeFactory.create(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false, 1) - .connectPorts(directory2FilesFilter.getOutputPort(), fileExtensionSwitch.getInputPort()); + IPipeFactory pipeFactory = pipeFactoryRegistry.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false); + pipeFactory.create(classNameRegistryCreationFilter.getOutputPort(), directory2FilesFilter.getInputPort()); + pipeFactory.create(directory2FilesFilter.getOutputPort(), fileExtensionSwitch.getInputPort()); - SingleElementPipe.connect(normalFileOutputPort, datFile2RecordFilter.getInputPort()); - SingleElementPipe.connect(binFileOutputPort, binaryFile2RecordFilter.getInputPort()); - SingleElementPipe.connect(zipFileOutputPort, zipFile2RecordFilter.getInputPort()); + pipeFactory.create(normalFileOutputPort, datFile2RecordFilter.getInputPort()); + pipeFactory.create(binFileOutputPort, binaryFile2RecordFilter.getInputPort()); + pipeFactory.create(zipFileOutputPort, zipFile2RecordFilter.getInputPort()); - SingleElementPipe.connect(datFile2RecordFilter.getOutputPort(), recordMerger.getNewInputPort()); - SingleElementPipe.connect(binaryFile2RecordFilter.getOutputPort(), recordMerger.getNewInputPort()); - SingleElementPipe.connect(zipFile2RecordFilter.getOutputPort(), recordMerger.getNewInputPort()); + pipeFactory.create(datFile2RecordFilter.getOutputPort(), recordMerger.getNewInputPort()); + pipeFactory.create(binaryFile2RecordFilter.getOutputPort(), recordMerger.getNewInputPort()); + pipeFactory.create(zipFile2RecordFilter.getOutputPort(), recordMerger.getNewInputPort()); // prepare pipeline this.setFirstStage(classNameRegistryCreationFilter); diff --git a/src/performancetest/java/teetime/examples/cipher/CipherConfiguration.java b/src/performancetest/java/teetime/examples/cipher/CipherConfiguration.java deleted file mode 100644 index 917d5dcc65e1852d37fb20f491fddd85a09fafd8..0000000000000000000000000000000000000000 --- a/src/performancetest/java/teetime/examples/cipher/CipherConfiguration.java +++ /dev/null @@ -1,52 +0,0 @@ -package teetime.examples.cipher; - -import java.io.File; - -import teetime.framework.AnalysisConfiguration; -import teetime.framework.pipe.PipeFactory; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; -import teetime.stage.InitialElementProducer; -import teetime.stage.io.ByteArrayFileWriter; -import teetime.stage.io.CipherByteArray; -import teetime.stage.io.CipherByteArray.CipherMode; -import teetime.stage.io.File2ByteArray; -import teetime.stage.io.ZipByteArray; -import teetime.stage.io.ZipByteArray.ZipMode; - -public class CipherConfiguration extends AnalysisConfiguration { - - private final PipeFactory pipeFactory = PipeFactory.INSTANCE; - private final File input, output; - private final String password; - - public CipherConfiguration(final String inputFile, final String outputFile, final String password) { - this.input = new File(inputFile); - this.output = new File(outputFile); - this.password = password; - - InitialElementProducer<File> init = new InitialElementProducer<File>(this.input); - File2ByteArray f2b = new File2ByteArray(); - CipherByteArray enc = new CipherByteArray(this.password, CipherMode.ENCRYPT); - ZipByteArray comp = new ZipByteArray(ZipMode.COMP); - ZipByteArray decomp = new ZipByteArray(ZipMode.DECOMP); - CipherByteArray decrypt = new CipherByteArray(this.password, CipherMode.DECRYPT); - ByteArrayFileWriter writer = new ByteArrayFileWriter(output); - - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(init.getOutputPort(), f2b.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(f2b.getOutputPort(), enc.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(enc.getOutputPort(), comp.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(comp.getOutputPort(), decomp.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(decomp.getOutputPort(), decrypt.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(decrypt.getOutputPort(), writer.getInputPort()); - - this.getFiniteProducerStages().add(init); - - } -} diff --git a/src/performancetest/java/teetime/examples/cipher/CipherTest.java b/src/performancetest/java/teetime/examples/cipher/CipherTest.java deleted file mode 100644 index 0021944a5b9b87f6846cea768dc94d2bfecb41c0..0000000000000000000000000000000000000000 --- a/src/performancetest/java/teetime/examples/cipher/CipherTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package teetime.examples.cipher; - -import java.io.File; -import java.io.IOException; - -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; - -import teetime.framework.Analysis; -import teetime.framework.AnalysisConfiguration; - -import com.google.common.io.Files; - -public class CipherTest { - - static String inputFile = "testdata/dependencies.html"; - static String outputFile = "testdata/dependencies.html"; - static String password = "Password"; - static long start; - long stop; - - static AnalysisConfiguration configuration = new CipherConfiguration(inputFile, outputFile, password); - - final static Analysis analysis = new Analysis(configuration); - - @BeforeClass - public static void beforeClass() { - analysis.init(); - start = System.currentTimeMillis(); - } - - @Test - public void executeTest() { - analysis.start(); - } - - @AfterClass - public static void afterClass() { - System.out.println("It took " + (System.currentTimeMillis() - start) + " Milliseconds"); - boolean bool = false; - try { - bool = Files.equal(new File(inputFile), new File(outputFile)); - } catch (IOException e) { - e.printStackTrace(); - } - Assert.assertTrue(bool); - } -} diff --git a/src/performancetest/java/teetime/examples/experiment14/MethodCallThroughputAnalysis14.java b/src/performancetest/java/teetime/examples/experiment14/MethodCallThroughputAnalysis14.java index 0853c73213650fbea5fc324951ebcd91fff2950b..e229ebc555801dfd1a1b3cf1f5ea1c93863351b0 100644 --- a/src/performancetest/java/teetime/examples/experiment14/MethodCallThroughputAnalysis14.java +++ b/src/performancetest/java/teetime/examples/experiment14/MethodCallThroughputAnalysis14.java @@ -21,9 +21,9 @@ import teetime.framework.HeadPipeline; import teetime.framework.HeadStage; import teetime.framework.RunnableStage; import teetime.framework.pipe.IPipeFactory; -import teetime.framework.pipe.PipeFactory; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; +import teetime.framework.pipe.PipeFactoryRegistry; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; import teetime.stage.CollectorSink; import teetime.stage.NoopFilter; import teetime.stage.ObjectProducer; @@ -44,7 +44,7 @@ public class MethodCallThroughputAnalysis14 { private int numNoopFilters; private List<TimestampObject> timestampObjects; private Runnable runnable; - private final PipeFactory pipeFactory = PipeFactory.INSTANCE; + private final PipeFactoryRegistry pipeFactory = PipeFactoryRegistry.INSTANCE; public void init() { HeadStage pipeline = this.buildPipeline(); diff --git a/src/performancetest/java/teetime/examples/experiment17/MethodCallThroughputAnalysis17.java b/src/performancetest/java/teetime/examples/experiment17/MethodCallThroughputAnalysis17.java index 20f1285e20e44c00d5d68d8a3eec67fcad31c69a..a6464885ebe837df536e5697e20e9dde4d0a6bc5 100644 --- a/src/performancetest/java/teetime/examples/experiment17/MethodCallThroughputAnalysis17.java +++ b/src/performancetest/java/teetime/examples/experiment17/MethodCallThroughputAnalysis17.java @@ -24,7 +24,7 @@ import teetime.framework.RunnableStage; import teetime.framework.Stage; import teetime.framework.pipe.DummyPipe; import teetime.framework.pipe.IPipe; -import teetime.framework.pipe.PipeFactory; +import teetime.framework.pipe.PipeFactoryRegistry; import teetime.framework.pipe.RelayTestPipe; import teetime.framework.pipe.UnorderedGrowablePipe; import teetime.framework.signal.TerminatingSignal; @@ -53,7 +53,7 @@ public class MethodCallThroughputAnalysis17 { private ConstructorClosure<TimestampObject> inputObjectCreator; private int numNoopFilters; - private final PipeFactory pipeFactory = PipeFactory.INSTANCE; + private final PipeFactoryRegistry pipeFactory = PipeFactoryRegistry.INSTANCE; private final List<List<TimestampObject>> timestampObjectsList = new LinkedList<List<TimestampObject>>(); private Thread producerThread; diff --git a/src/performancetest/java/teetime/examples/loopStage/LoopStageAnalysisConfiguration.java b/src/performancetest/java/teetime/examples/loopStage/LoopStageAnalysisConfiguration.java index 348fca73b12cf185fb00ccdb2075cd2a4f3dcc78..400c4cd406fafb5b6dbd2f1f0095b08d1a2d02cf 100644 --- a/src/performancetest/java/teetime/examples/loopStage/LoopStageAnalysisConfiguration.java +++ b/src/performancetest/java/teetime/examples/loopStage/LoopStageAnalysisConfiguration.java @@ -2,20 +2,15 @@ package teetime.examples.loopStage; import teetime.framework.AnalysisConfiguration; import teetime.framework.pipe.IPipeFactory; -import teetime.framework.pipe.PipeFactory; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; - -import teetime.examples.loopStage.Countdown; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; public class LoopStageAnalysisConfiguration extends AnalysisConfiguration { - private final PipeFactory pipeFactory = PipeFactory.INSTANCE; - public LoopStageAnalysisConfiguration() { Countdown countdown = new Countdown(10); - IPipeFactory factory = this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.QUEUE_BASED, true); + IPipeFactory factory = PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.QUEUE_BASED, true); factory.create(countdown.getNewCountdownOutputPort(), countdown.getCountdownInputPort()); this.getFiniteProducerStages().add(countdown); diff --git a/src/performancetest/java/teetime/examples/recordReader/RecordReaderConfiguration.java b/src/performancetest/java/teetime/examples/recordReader/RecordReaderConfiguration.java index cbcae8ca4682990a65859571749545dbec312cfc..fa289c0af832521ab19df88024c0b7853ef91b09 100644 --- a/src/performancetest/java/teetime/examples/recordReader/RecordReaderConfiguration.java +++ b/src/performancetest/java/teetime/examples/recordReader/RecordReaderConfiguration.java @@ -21,9 +21,8 @@ import java.util.List; import teetime.framework.AnalysisConfiguration; import teetime.framework.HeadStage; -import teetime.framework.pipe.PipeFactory; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; import teetime.stage.CollectorSink; import teetime.stage.InitialElementProducer; import teetime.stage.kieker.Dir2RecordsFilter; @@ -39,7 +38,6 @@ import kieker.common.record.IMonitoringRecord; public class RecordReaderConfiguration extends AnalysisConfiguration { private final List<IMonitoringRecord> elementCollection = new LinkedList<IMonitoringRecord>(); - private final PipeFactory pipeFactory = PipeFactory.INSTANCE; public RecordReaderConfiguration() { this.buildConfiguration(); @@ -59,10 +57,10 @@ public class RecordReaderConfiguration extends AnalysisConfiguration { CollectorSink<IMonitoringRecord> collector = new CollectorSink<IMonitoringRecord>(this.elementCollection); // connect stages - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) .create(initialElementProducer.getOutputPort(), dir2RecordsFilter.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) .create(dir2RecordsFilter.getOutputPort(), collector.getInputPort()); return initialElementProducer; diff --git a/src/performancetest/java/teetime/examples/tokenizer/TokenizerConfiguration.java b/src/performancetest/java/teetime/examples/tokenizer/TokenizerConfiguration.java deleted file mode 100644 index 538a556065a7e7690c61ba4bd8d430acc25a2a1f..0000000000000000000000000000000000000000 --- a/src/performancetest/java/teetime/examples/tokenizer/TokenizerConfiguration.java +++ /dev/null @@ -1,59 +0,0 @@ -package teetime.examples.tokenizer; - -import java.io.File; - -import teetime.framework.AnalysisConfiguration; -import teetime.framework.pipe.PipeFactory; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; -import teetime.stage.InitialElementProducer; -import teetime.stage.io.ByteArray2String; -import teetime.stage.io.CipherByteArray; -import teetime.stage.io.CipherByteArray.CipherMode; -import teetime.stage.io.File2ByteArray; -import teetime.stage.io.Printer; -import teetime.stage.io.Tokenizer; -import teetime.stage.io.ZipByteArray; -import teetime.stage.io.ZipByteArray.ZipMode; - -public class TokenizerConfiguration extends AnalysisConfiguration { - - private final PipeFactory pipeFactory = PipeFactory.INSTANCE; - private final File input; - private final String password; - - public TokenizerConfiguration(final String inputFile, final String password) { - this.input = new File(inputFile); - this.password = password; - - InitialElementProducer<File> init = new InitialElementProducer<File>(this.input); - File2ByteArray f2b = new File2ByteArray(); - CipherByteArray enc = new CipherByteArray(this.password, CipherMode.ENCRYPT); - ZipByteArray comp = new ZipByteArray(ZipMode.COMP); - ZipByteArray decomp = new ZipByteArray(ZipMode.DECOMP); - CipherByteArray decrypt = new CipherByteArray(this.password, CipherMode.DECRYPT); - ByteArray2String b2s = new ByteArray2String(); - Tokenizer tokenizer = new Tokenizer(" "); - Printer<String> pt = new Printer<String>(); - - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(init.getOutputPort(), f2b.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(f2b.getOutputPort(), enc.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(enc.getOutputPort(), comp.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(comp.getOutputPort(), decomp.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(decomp.getOutputPort(), decrypt.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(decrypt.getOutputPort(), b2s.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(b2s.getOutputPort(), tokenizer.getInputPort()); - this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) - .create(tokenizer.getOutputPort(), pt.getInputPort()); - - this.getFiniteProducerStages().add(init); - - } -} diff --git a/src/performancetest/java/teetime/examples/tokenizer/TokenizerTest.java b/src/performancetest/java/teetime/examples/tokenizer/TokenizerTest.java deleted file mode 100644 index c5363323dc07df8085b26377a594b2b0266852c9..0000000000000000000000000000000000000000 --- a/src/performancetest/java/teetime/examples/tokenizer/TokenizerTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package teetime.examples.tokenizer; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import teetime.framework.Analysis; -import teetime.framework.AnalysisConfiguration; - -public class TokenizerTest { - - static String inputFile = "testdata/dependencies.html"; - static String password = "Password"; - static long start; - long stop; - - static AnalysisConfiguration configuration = new TokenizerConfiguration(inputFile, password); - - final static Analysis analysis = new Analysis(configuration); - - @BeforeClass - public static void beforeClass() { - analysis.init(); - start = System.currentTimeMillis(); - } - - @Test - public void executeTest() { - analysis.start(); - } - - @AfterClass - public static void afterClass() { - System.out.println("It took " + (System.currentTimeMillis() - start) + " Milliseconds"); - // boolean bool = false; - // try { - // bool = Files.equal(new File(inputFile), new File(outputFile)); - // } catch (IOException e) { - // e.printStackTrace(); - // } - // Assert.assertTrue(bool); - } -} diff --git a/src/performancetest/java/teetime/runtime/typeCheck/ConnectionTypeTest.java b/src/performancetest/java/teetime/runtime/typeCheck/ConnectionTypeTest.java index 3caa3cf553562ed30dc35d3da1c9450cfc752e6f..6b92dbf3c49e4bb7de1b08fc7a0ee7e1570463f9 100644 --- a/src/performancetest/java/teetime/runtime/typeCheck/ConnectionTypeTest.java +++ b/src/performancetest/java/teetime/runtime/typeCheck/ConnectionTypeTest.java @@ -9,9 +9,9 @@ import java.lang.reflect.InvocationTargetException; import org.junit.Test; import teetime.framework.pipe.IPipeFactory; -import teetime.framework.pipe.PipeFactory; -import teetime.framework.pipe.PipeFactory.PipeOrdering; -import teetime.framework.pipe.PipeFactory.ThreadCommunication; +import teetime.framework.pipe.PipeFactoryRegistry; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; import teetime.stage.ObjectProducer; import teetime.stage.PortTypeConfiguration; import teetime.stage.StartTimestampFilter; @@ -22,7 +22,7 @@ import teetime.util.TimestampObject; public class ConnectionTypeTest { - private final PipeFactory pipeFactory = PipeFactory.INSTANCE; + private final PipeFactoryRegistry pipeFactory = PipeFactoryRegistry.INSTANCE; // tests for load-time validation diff --git a/src/test/java/teetime/examples/cipher/CipherConfiguration.java b/src/test/java/teetime/examples/cipher/CipherConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..a945e25f6e260cbea71c54795b49c503a029d70c --- /dev/null +++ b/src/test/java/teetime/examples/cipher/CipherConfiguration.java @@ -0,0 +1,46 @@ +package teetime.examples.cipher; + +import java.io.File; + +import teetime.framework.AnalysisConfiguration; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; +import teetime.stage.CipherByteArray; +import teetime.stage.CipherByteArray.CipherMode; +import teetime.stage.InitialElementProducer; +import teetime.stage.ZipByteArray; +import teetime.stage.ZipByteArray.ZipMode; +import teetime.stage.io.ByteArrayFileWriter; +import teetime.stage.io.File2ByteArray; + +public class CipherConfiguration extends AnalysisConfiguration { + + public CipherConfiguration(final String inputFile, final String outputFile, final String password) { + final File input = new File(inputFile); + final File output = new File(outputFile); + + InitialElementProducer<File> init = new InitialElementProducer<File>(input); + File2ByteArray f2b = new File2ByteArray(); + CipherByteArray enc = new CipherByteArray(password, CipherMode.ENCRYPT); + ZipByteArray comp = new ZipByteArray(ZipMode.COMP); + ZipByteArray decomp = new ZipByteArray(ZipMode.DECOMP); + CipherByteArray decrypt = new CipherByteArray(password, CipherMode.DECRYPT); + ByteArrayFileWriter writer = new ByteArrayFileWriter(output); + + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) + .create(init.getOutputPort(), f2b.getInputPort()); + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) + .create(f2b.getOutputPort(), enc.getInputPort()); + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) + .create(enc.getOutputPort(), comp.getInputPort()); + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) + .create(comp.getOutputPort(), decomp.getInputPort()); + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) + .create(decomp.getOutputPort(), decrypt.getInputPort()); + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false) + .create(decrypt.getOutputPort(), writer.getInputPort()); + + this.getFiniteProducerStages().add(init); + + } +} diff --git a/src/test/java/teetime/examples/cipher/CipherTest.java b/src/test/java/teetime/examples/cipher/CipherTest.java new file mode 100644 index 0000000000000000000000000000000000000000..20f54007e82672660f37776bedf7c9cfe9c72e67 --- /dev/null +++ b/src/test/java/teetime/examples/cipher/CipherTest.java @@ -0,0 +1,37 @@ +package teetime.examples.cipher; + +import java.io.File; +import java.io.IOException; + +import org.junit.Assert; +import org.junit.Test; + +import teetime.framework.Analysis; +import teetime.framework.AnalysisConfiguration; + +import com.google.common.io.Files; + +/** + * Executes stages which modify the given file and compares the results + * Procedure: read > compress > encrypt > decrypt > decompress > write + * + * @author Nelson Tavares de Sousa + * + */ +public class CipherTest { + + @Test + public void executeTest() throws IOException { + final String inputFile = "src/test/resources/data/input.txt"; + final String outputFile = "src/test/resources/data/output.txt"; + final String password = "Password"; + + AnalysisConfiguration configuration = new CipherConfiguration(inputFile, outputFile, password); + Analysis analysis = new Analysis(configuration); + analysis.init(); + analysis.start(); + + Assert.assertTrue(Files.equal(new File(inputFile), new File(outputFile))); + } + +} diff --git a/src/test/java/teetime/examples/tokenizer/TokenizerConfiguration.java b/src/test/java/teetime/examples/tokenizer/TokenizerConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..202843b4a90a53f869805523c537e798f04729ae --- /dev/null +++ b/src/test/java/teetime/examples/tokenizer/TokenizerConfiguration.java @@ -0,0 +1,53 @@ +package teetime.examples.tokenizer; + +import java.io.File; + +import teetime.framework.AnalysisConfiguration; +import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering; +import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication; +import teetime.stage.ByteArray2String; +import teetime.stage.CipherByteArray; +import teetime.stage.CipherByteArray.CipherMode; +import teetime.stage.Counter; +import teetime.stage.InitialElementProducer; +import teetime.stage.Tokenizer; +import teetime.stage.ZipByteArray; +import teetime.stage.ZipByteArray.ZipMode; +import teetime.stage.io.File2ByteArray; + +public class TokenizerConfiguration extends AnalysisConfiguration { + + private final Counter<String> counter; + + public TokenizerConfiguration(final String inputFile, final String password) { + final File input = new File(inputFile); + + InitialElementProducer<File> init = new InitialElementProducer<File>(input); + File2ByteArray f2b = new File2ByteArray(); + ZipByteArray decomp = new ZipByteArray(ZipMode.DECOMP); + CipherByteArray decrypt = new CipherByteArray(password, CipherMode.DECRYPT); + ByteArray2String b2s = new ByteArray2String(); + Tokenizer tokenizer = new Tokenizer(" "); + counter = new Counter<String>(); + + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false).create( + init.getOutputPort(), f2b.getInputPort()); + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false).create( + f2b.getOutputPort(), decomp.getInputPort()); + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false).create( + decomp.getOutputPort(), decrypt.getInputPort()); + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false).create( + decrypt.getOutputPort(), b2s.getInputPort()); + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false).create( + b2s.getOutputPort(), tokenizer.getInputPort()); + PIPE_FACTORY_REGISTRY.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false).create( + tokenizer.getOutputPort(), counter.getInputPort()); + + this.getFiniteProducerStages().add(init); + } + + public int getTokenCount() { + return this.counter.getNumElementsPassed(); + } + +} diff --git a/src/test/java/teetime/examples/tokenizer/TokenizerTest.java b/src/test/java/teetime/examples/tokenizer/TokenizerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..2a9b2ac94fc8cdf04c4d62f0471cf733fe4c5d39 --- /dev/null +++ b/src/test/java/teetime/examples/tokenizer/TokenizerTest.java @@ -0,0 +1,38 @@ +package teetime.examples.tokenizer; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; + +import org.junit.Assert; +import org.junit.Test; + +import teetime.framework.Analysis; + +import com.google.common.io.Files; + +/** + * Reads in a compressed and encrypted file and counts the containing words + * + * @author Nelson Tavares de Sousa + * + */ +public class TokenizerTest { + + @Test + public void executeTest() throws IOException { + // Encrypted lorem ipsum + String inputFile = "src/test/resources/data/cipherInput.txt"; + String password = "Password"; + + TokenizerConfiguration configuration = new TokenizerConfiguration(inputFile, password); + Analysis analysis = new Analysis(configuration); + analysis.init(); + analysis.start(); + + String string = Files.toString(new File("src/test/resources/data/input.txt"), Charset.forName("UTF-8")); + + Assert.assertEquals(string.split(" ").length, configuration.getTokenCount()); + } + +} diff --git a/src/test/resources/data/cipherInput.txt b/src/test/resources/data/cipherInput.txt new file mode 100644 index 0000000000000000000000000000000000000000..b8fd6d85206a464b868be1d834536cc0110d33c7 Binary files /dev/null and b/src/test/resources/data/cipherInput.txt differ diff --git a/src/test/resources/data/input.txt b/src/test/resources/data/input.txt new file mode 100644 index 0000000000000000000000000000000000000000..5c016264f5118569bef2312dcd2f2f97bfd7d292 --- /dev/null +++ b/src/test/resources/data/input.txt @@ -0,0 +1,11 @@ +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. +Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. +Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis. +At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat. +Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus. +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. +Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. +Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo \ No newline at end of file diff --git a/src/test/resources/data/output.txt b/src/test/resources/data/output.txt new file mode 100644 index 0000000000000000000000000000000000000000..5c016264f5118569bef2312dcd2f2f97bfd7d292 --- /dev/null +++ b/src/test/resources/data/output.txt @@ -0,0 +1,11 @@ +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. +Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. +Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis. +At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat. +Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus. +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. +Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. +Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. +Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo \ No newline at end of file diff --git a/teetime-eclipse-cleanup.xml b/teetime-eclipse-cleanup.xml index 56ccef737d5e5040d3fef460ba8de99be6feae42..dac74c2b47f2c975b4a5aa71d9cafcce2a8737a4 100644 --- a/teetime-eclipse-cleanup.xml +++ b/teetime-eclipse-cleanup.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <profiles version="2"> -<profile kind="CleanUpProfile" name="Kieker - Clean Up" version="2"> +<profile kind="CleanUpProfile" name="TeeTime - Clean Up" version="2"> <setting id="cleanup.format_source_code" value="true"/> <setting id="cleanup.add_missing_annotations" value="true"/> <setting id="cleanup.use_this_for_non_static_method_access_only_if_necessary" value="false"/> diff --git a/teetime-eclipse-formatter.xml b/teetime-eclipse-formatter.xml index d7f1d4d3c5f42c9668283d353a58c4d54afd1f93..3ae3882ebfe02777204ec3ebbf015f220880b8bd 100644 --- a/teetime-eclipse-formatter.xml +++ b/teetime-eclipse-formatter.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <profiles version="12"> -<profile kind="CodeFormatterProfile" name="Kieker - Profile" version="12"> +<profile kind="CodeFormatterProfile" name="TeeTime - Profile" version="12"> <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/> <setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/> <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>