From 90f360762527ff6f505ed99f64812200f86d638e Mon Sep 17 00:00:00 2001 From: Marco Boeck Date: Wed, 7 Feb 2018 09:52:59 +0100 Subject: [PATCH] Release RapidMiner 8.1.0 --- build.gradle | 21 +- gradle.properties | 2 +- .../repository/wsimport/AccessRights.java | 2 +- .../repository/wsimport/CancelTrigger.java | 2 +- .../wsimport/CancelTriggerResponse.java | 2 +- .../repository/wsimport/CreateBlob.java | 2 +- .../wsimport/CreateBlobResponse.java | 2 +- .../repository/wsimport/DeleteEntry.java | 2 +- .../wsimport/DeleteEntryResponse.java | 2 +- .../repository/wsimport/EntryResponse.java | 2 +- .../wsimport/ExecuteProcessCron.java | 2 +- .../wsimport/ExecuteProcessCron13.java | 2 +- .../ExecuteProcessCron13Response.java | 2 +- .../wsimport/ExecuteProcessCronResponse.java | 2 +- .../wsimport/ExecuteProcessSimple.java | 2 +- .../wsimport/ExecuteProcessSimple13.java | 2 +- .../ExecuteProcessSimple13Response.java | 2 +- .../ExecuteProcessSimpleResponse.java | 2 +- .../wsimport/ExecuteProcessWithOffset.java | 2 +- .../ExecuteProcessWithOffsetResponse.java | 2 +- .../wsimport/ExecutionResponse.java | 2 +- .../wsimport/FolderContentsResponse.java | 2 +- .../repository/wsimport/GetAccessRights.java | 2 +- .../wsimport/GetAccessRightsResponse.java | 2 +- .../repository/wsimport/GetAllGroupNames.java | 2 +- .../wsimport/GetAllGroupNamesResponse.java | 2 +- .../rapid_i/repository/wsimport/GetEntry.java | 2 +- .../repository/wsimport/GetEntryResponse.java | 2 +- .../wsimport/GetFolderContents.java | 2 +- .../wsimport/GetFolderContentsResponse.java | 2 +- .../repository/wsimport/GetFreeMemory.java | 2 +- .../wsimport/GetFreeMemoryResponse.java | 2 +- .../wsimport/GetInstalledPlugins.java | 2 +- .../wsimport/GetInstalledPluginsResponse.java | 2 +- .../repository/wsimport/GetMaxMemory.java | 2 +- .../wsimport/GetMaxMemoryResponse.java | 2 +- .../wsimport/GetProcessContents.java | 2 +- .../wsimport/GetProcessContentsResponse.java | 2 +- .../wsimport/GetProcessIdsForJobId.java | 2 +- .../GetProcessIdsForJobIdResponse.java | 2 +- .../repository/wsimport/GetQueueInfo.java | 2 +- .../wsimport/GetQueueInfoResponse.java | 2 +- .../repository/wsimport/GetQueueNames.java | 2 +- .../wsimport/GetQueueNamesResponse.java | 2 +- .../repository/wsimport/GetQueueState.java | 2 +- .../wsimport/GetQueueStateResponse.java | 2 +- .../wsimport/GetRunningProcesses.java | 2 +- .../wsimport/GetRunningProcessesInfo.java | 2 +- .../GetRunningProcessesInfoResponse.java | 2 +- .../wsimport/GetRunningProcessesResponse.java | 2 +- .../wsimport/GetSystemLoadAverage.java | 2 +- .../GetSystemLoadAverageResponse.java | 2 +- .../repository/wsimport/GetTotalMemory.java | 2 +- .../wsimport/GetTotalMemoryResponse.java | 2 +- .../repository/wsimport/GetUpSince.java | 2 +- .../wsimport/GetUpSinceResponse.java | 2 +- .../repository/wsimport/GetVersionNumber.java | 2 +- .../wsimport/GetVersionNumberResponse.java | 2 +- .../repository/wsimport/MacroDefinition.java | 2 +- .../repository/wsimport/MakeFolder.java | 2 +- .../wsimport/MakeFolderResponse.java | 2 +- .../com/rapid_i/repository/wsimport/Move.java | 2 +- .../repository/wsimport/MoveResponse.java | 2 +- .../repository/wsimport/ObjectFactory.java | 2 +- .../repository/wsimport/PluginInfo.java | 2 +- .../wsimport/ProcessContentsResponse.java | 2 +- .../wsimport/ProcessContextWrapper.java | 2 +- .../repository/wsimport/ProcessResponse.java | 2 +- .../repository/wsimport/ProcessService.java | 2 +- .../repository/wsimport/ProcessService13.java | 2 +- .../wsimport/ProcessService13_Service.java | 2 +- .../wsimport/ProcessService_Service.java | 2 +- .../wsimport/ProcessStackTrace.java | 2 +- .../wsimport/ProcessStackTraceElement.java | 2 +- .../repository/wsimport/QueueProperty.java | 2 +- .../repository/wsimport/QueueState.java | 2 +- .../repository/wsimport/RAInfoService.java | 2 +- .../wsimport/RAInfoService_Service.java | 2 +- .../rapid_i/repository/wsimport/Rename.java | 2 +- .../repository/wsimport/RenameResponse.java | 2 +- .../wsimport/RepositoryService.java | 2 +- .../wsimport/RepositoryService_Service.java | 2 +- .../rapid_i/repository/wsimport/Response.java | 2 +- .../repository/wsimport/SetAccessRights.java | 2 +- .../wsimport/SetAccessRightsResponse.java | 2 +- .../repository/wsimport/StartNewRevision.java | 2 +- .../wsimport/StartNewRevisionResponse.java | 2 +- .../repository/wsimport/StopProcess.java | 2 +- .../wsimport/StopProcessResponse.java | 2 +- .../repository/wsimport/StoreProcess.java | 2 +- .../wsimport/StoreProcessResponse.java | 2 +- .../repository/wsimport/mgt/CheckSetup.java | 2 +- .../wsimport/mgt/CheckSetupResponse.java | 2 +- .../wsimport/mgt/CreateDBConnection.java | 2 +- .../mgt/CreateDBConnectionResponse.java | 2 +- .../wsimport/mgt/GetGlobalProperty.java | 2 +- .../mgt/GetGlobalPropertyResponse.java | 2 +- .../wsimport/mgt/ManagementService.java | 2 +- .../mgt/ManagementServiceService.java | 2 +- .../wsimport/mgt/ObjectFactory.java | 2 +- .../repository/wsimport/mgt/Response.java | 2 +- .../wsimport/mgt/SetGlobalProperty.java | 2 +- .../mgt/SetGlobalPropertyResponse.java | 2 +- .../repository/wsimport/mgt/package-info.java | 2 +- .../repository/wsimport/package-info.java | 2 +- .../antlr/FunctionExpressionLexer.java | 2 +- .../antlr/FunctionExpressionParser.java | 2 +- .../FunctionExpressionParserBaseListener.java | 2 +- .../FunctionExpressionParserBaseVisitor.java | 2 +- .../FunctionExpressionParserListener.java | 2 +- .../FunctionExpressionParserVisitor.java | 2 +- .../com/rapidminer/BreakpointListener.java | 2 +- .../com/rapidminer/ConsoleInputHandler.java | 2 +- src/main/java/com/rapidminer/Experiment.java | 2 +- .../com/rapidminer/FileProcessLocation.java | 2 +- .../java/com/rapidminer/InputHandler.java | 2 +- .../java/com/rapidminer/LoggingListener.java | 2 +- .../java/com/rapidminer/MacroHandler.java | 2 +- src/main/java/com/rapidminer/NoBugError.java | 2 +- .../java/com/rapidminer/NoOpUserError.java | 2 +- .../java/com/rapidminer/ObjectVisualizer.java | 2 +- .../rapidminer/OperatorLibraryService.java | 2 +- src/main/java/com/rapidminer/Process.java | 14 +- .../java/com/rapidminer/ProcessContext.java | 2 +- .../java/com/rapidminer/ProcessListener.java | 2 +- .../java/com/rapidminer/ProcessLocation.java | 2 +- .../com/rapidminer/ProcessSetupListener.java | 2 +- .../com/rapidminer/ProcessStateListener.java | 2 +- .../rapidminer/ProcessStorageListener.java | 2 +- src/main/java/com/rapidminer/RapidMiner.java | 11 +- .../com/rapidminer/RapidMinerVersion.java | 2 +- .../rapidminer/RepositoryProcessLocation.java | 2 +- ...ctionStatisticsLicenseManagerListener.java | 2 +- .../DatabaseConstraintViolationException.java | 2 +- .../license/LicenseViolationException.java | 2 +- .../core/license/OpenSourceLicense.java | 2 +- .../license/OpenSourceLicenseManager.java | 2 +- .../core/license/OpenSourceUser.java | 2 +- .../license/ProductConstraintManager.java | 2 +- .../datatable/AbstractDataTable.java | 24 +- .../BidirectionalMappingProvider.java | 2 +- ...elationMatrixRow2DataTableRowIterator.java | 2 +- ...relationMatrixRow2DataTableRowWrapper.java | 2 +- .../com/rapidminer/datatable/DataTable.java | 2 +- .../datatable/DataTableExampleSetAdapter.java | 2 +- .../datatable/DataTableFilterCondition.java | 2 +- .../DataTableKernelModelAdapter.java | 2 +- .../datatable/DataTableListener.java | 2 +- .../datatable/DataTableMappingProvider.java | 2 +- .../DataTableNaturalSortProvider.java | 2 +- ...aTablePairwiseMatrixExtractionAdapter.java | 2 +- .../rapidminer/datatable/DataTableRow.java | 2 +- .../datatable/DataTableSortProvider.java | 2 +- .../DataTableSymmetricalMatrixAdapter.java | 2 +- .../rapidminer/datatable/DataTableView.java | 2 +- .../Example2DataTableRowIterator.java | 2 +- .../Example2DataTableRowWrapper.java | 2 +- .../datatable/FilteredDataTable.java | 2 +- .../datatable/GnuPlotDataTableHandler.java | 2 +- .../KernelModelRow2DataTableRowWrapper.java | 2 +- .../NominalSortingDataTableMapping.java | 2 +- .../PairwiseMatrix2DataTableRowIterator.java | 2 +- .../PairwiseMatrix2DataTableRowWrapper.java | 2 +- .../datatable/RangeFilterCondition.java | 2 +- .../datatable/RegionFilterCondition.java | 2 +- .../rapidminer/datatable/SimpleDataTable.java | 2 +- .../datatable/SimpleDataTableRow.java | 2 +- .../datatable/SortedDataTableView.java | 2 +- .../datatable/ValueMappingDataTableRow.java | 2 +- .../datatable/ValueMappingDataTableView.java | 2 +- .../example/AbstractAttributes.java | 2 +- .../com/rapidminer/example/Attribute.java | 8 +- .../example/AttributeDescription.java | 2 +- .../rapidminer/example/AttributeIterator.java | 2 +- .../com/rapidminer/example/AttributeRole.java | 2 +- .../example/AttributeRoleIterator.java | 2 +- .../example/AttributeTransformation.java | 2 +- .../example/AttributeTypeException.java | 2 +- .../rapidminer/example/AttributeWeight.java | 2 +- .../rapidminer/example/AttributeWeights.java | 24 +- .../com/rapidminer/example/Attributes.java | 2 +- .../example/DelegateAttributes.java | 2 +- .../java/com/rapidminer/example/Example.java | 2 +- .../rapidminer/example/ExampleFormatter.java | 2 +- .../com/rapidminer/example/ExampleReader.java | 2 +- .../com/rapidminer/example/ExampleSet.java | 2 +- .../rapidminer/example/ExampleSetFactory.java | 2 +- .../example/FastExample2SparseTransform.java | 2 +- .../example/FormatterException.java | 2 +- .../rapidminer/example/MinMaxStatistics.java | 2 +- .../rapidminer/example/NominalStatistics.java | 2 +- .../example/NumericalStatistics.java | 2 +- .../example/RegularAttributeIterator.java | 2 +- .../rapidminer/example/SimpleAttributes.java | 2 +- .../com/rapidminer/example/Statistics.java | 2 +- .../java/com/rapidminer/example/Tools.java | 64 +- .../rapidminer/example/UnknownStatistics.java | 2 +- .../example/WeightedNumericalStatistics.java | 2 +- .../example/set/AbstractExampleReader.java | 2 +- .../example/set/AbstractExampleSet.java | 20 +- .../example/set/AcceptAllCondition.java | 2 +- .../set/AttributeSelectionExampleSet.java | 2 +- .../set/AttributeTransformationRemapping.java | 2 +- ...AttributeTransformationReplaceMissing.java | 2 +- .../set/AttributeTransformationWeighting.java | 2 +- .../example/set/AttributeValueFilter.java | 2 +- .../AttributeValueFilterSingleCondition.java | 2 +- .../set/AttributeWeightedExampleSet.java | 2 +- .../example/set/AttributesExampleReader.java | 2 +- .../com/rapidminer/example/set/Condition.java | 2 +- .../set/ConditionCreationException.java | 2 +- .../example/set/ConditionedExampleSet.java | 7 +- .../set/CorrectPredictionCondition.java | 2 +- .../rapidminer/example/set/CustomFilter.java | 2 +- .../example/set/ExampleSetUtilities.java | 2 +- .../example/set/ExpressionFilter.java | 2 +- .../FullAttributeTransformationRemapping.java | 2 +- .../example/set/HeaderExampleSet.java | 15 +- .../set/IndexBasedExampleSetReader.java | 2 +- .../example/set/MappedExampleReader.java | 2 +- .../example/set/MappedExampleSet.java | 20 +- .../set/MissingAttributesCondition.java | 2 +- .../example/set/MissingLabelsCondition.java | 2 +- .../example/set/ModelViewExampleSet.java | 2 +- .../set/NoMissingAttributeValueCondition.java | 2 +- .../set/NoMissingAttributesCondition.java | 2 +- .../example/set/NoMissingLabelsCondition.java | 2 +- .../set/NonSpecialAttributesExampleSet.java | 2 +- .../com/rapidminer/example/set/Partition.java | 2 +- .../example/set/PartitionBuilder.java | 2 +- .../example/set/RemappedExampleSet.java | 2 +- .../example/set/ReplaceMissingExampleSet.java | 2 +- .../example/set/ShuffledPartitionBuilder.java | 2 +- .../example/set/SimilarityExampleSet.java | 2 +- .../example/set/SimpleExampleReader.java | 2 +- .../example/set/SimpleExampleSet.java | 7 +- .../example/set/SimplePartitionBuilder.java | 2 +- .../example/set/SingleExampleExampleSet.java | 2 +- .../example/set/SkipNANExampleReader.java | 2 +- .../example/set/SortedExampleReader.java | 2 +- .../example/set/SortedExampleSet.java | 7 +- .../example/set/SplittedExampleSet.java | 6 +- .../set/StratifiedPartitionBuilder.java | 2 +- .../example/set/WrongPredictionCondition.java | 2 +- .../example/table/AbstractAttribute.java | 2 +- .../example/table/AbstractDataRowReader.java | 2 +- .../example/table/AbstractExampleTable.java | 2 +- .../table/AbstractSparseArrayDataRow.java | 2 +- .../example/table/AttributeFactory.java | 2 +- .../example/table/BinominalAttribute.java | 2 +- .../example/table/BinominalMapping.java | 2 +- .../example/table/BooleanArrayDataRow.java | 2 +- .../table/BooleanSparseArrayDataRow.java | 2 +- .../example/table/ByteArrayDataRow.java | 2 +- .../example/table/ByteSparseArrayDataRow.java | 2 +- .../com/rapidminer/example/table/DataRow.java | 2 +- .../example/table/DataRowFactory.java | 2 +- .../example/table/DataRowReader.java | 2 +- .../example/table/DatabaseDataRow.java | 2 +- .../example/table/DatabaseDataRowReader.java | 2 +- .../example/table/DateAttribute.java | 2 +- .../example/table/DoubleArrayDataRow.java | 2 +- .../table/DoubleSparseArrayDataRow.java | 2 +- .../example/table/ExampleTable.java | 2 +- .../table/FastSparseDoubleArrayDataRow.java | 2 +- .../example/table/FileDataRowReader.java | 2 +- .../example/table/FloatArrayDataRow.java | 2 +- .../table/FloatSparseArrayDataRow.java | 2 +- .../example/table/GrowingExampleTable.java | 2 +- .../example/table/IntArrayDataRow.java | 2 +- .../example/table/IntSparseArrayDataRow.java | 2 +- .../example/table/ListDataRowReader.java | 2 +- .../example/table/LongArrayDataRow.java | 2 +- .../example/table/LongSparseArrayDataRow.java | 2 +- .../example/table/MemoryExampleTable.java | 2 +- .../example/table/NominalAttribute.java | 2 +- .../example/table/NominalMapping.java | 2 +- .../example/table/NonWritableDataRow.java | 2 +- .../example/table/NumericalAttribute.java | 2 +- .../example/table/PolynominalAttribute.java | 2 +- .../example/table/PolynominalMapping.java | 2 +- .../example/table/RandomDataRowReader.java | 2 +- .../example/table/RandomExampleTable.java | 2 +- .../example/table/RapidMinerLineReader.java | 2 +- .../example/table/ResultSetDataRowReader.java | 2 +- .../example/table/ShortArrayDataRow.java | 2 +- .../table/ShortSparseArrayDataRow.java | 2 +- .../example/table/SimpleArrayData.java | 2 +- .../table/SimpleArrayDataRowReader.java | 2 +- .../example/table/SparseDataRow.java | 2 +- .../table/SparseFormatDataRowReader.java | 2 +- .../example/table/SparseMapDataRow.java | 2 +- .../example/table/ViewAttribute.java | 2 +- .../internal/AbstractHighSparsityChunk.java | 2 +- .../internal/AbstractMediumSparsityChunk.java | 2 +- .../table/internal/AutoColumnUtils.java | 2 +- .../table/internal/ByteArrayColumn.java | 2 +- .../example/table/internal/Column.java | 2 +- .../table/internal/ColumnarExampleTable.java | 2 +- .../table/internal/DoubleArrayColumn.java | 2 +- .../table/internal/DoubleAutoColumn.java | 2 +- .../table/internal/DoubleAutoDenseChunk.java | 2 +- .../table/internal/DoubleAutoSparseChunk.java | 2 +- .../internal/DoubleHighSparsityChunk.java | 2 +- .../internal/DoubleIncompleteAutoColumn.java | 2 +- .../internal/DoubleIncompleteDenseChunk.java | 2 +- .../internal/DoubleIncompleteSparseChunk.java | 2 +- .../internal/DoubleMediumSparsityChunk.java | 2 +- .../table/internal/DoubleSparseChunk.java | 2 +- .../table/internal/IntegerArrayColumn.java | 2 +- .../table/internal/IntegerAutoColumn.java | 2 +- .../table/internal/IntegerAutoDenseChunk.java | 2 +- .../internal/IntegerAutoSparseChunk.java | 2 +- .../internal/IntegerHighSparsityChunk.java | 2 +- .../internal/IntegerIncompleteAutoColumn.java | 2 +- .../internal/IntegerIncompleteDenseChunk.java | 2 +- .../IntegerIncompleteSparseChunk.java | 2 +- .../internal/IntegerMediumSparsityChunk.java | 2 +- .../table/internal/IntegerSparseChunk.java | 2 +- .../example/table/internal/NaNColumn.java | 2 +- .../example/table/internal/package-info.java | 2 +- .../utils/ColumnarExampleSetBuilder.java | 2 +- .../example/utils/ExampleSetBuilder.java | 2 +- .../rapidminer/example/utils/ExampleSets.java | 16 +- .../utils/MemoryExampleSetBuilder.java | 2 +- .../generator/AbsoluteValueGenerator.java | 2 +- .../generator/AlgebraicOrGenerator.java | 2 +- .../rapidminer/generator/AttributePeak.java | 2 +- .../generator/AverageGenerator.java | 2 +- .../BasicArithmeticOperationGenerator.java | 2 +- .../generator/BinaryNumericalGenerator.java | 2 +- .../generator/ConstantGenerator.java | 2 +- .../ExponentialFunctionGenerator.java | 2 +- .../generator/FeatureGenerator.java | 2 +- .../generator/FloorCeilGenerator.java | 2 +- .../generator/GenerationException.java | 2 +- .../rapidminer/generator/MinMaxGenerator.java | 2 +- .../rapidminer/generator/PowerGenerator.java | 2 +- .../generator/ReciprocalValueGenerator.java | 2 +- .../rapidminer/generator/SignumGenerator.java | 2 +- .../generator/SingularNumericalGenerator.java | 2 +- .../rapidminer/generator/SinusFactory.java | 2 +- .../generator/SquareRootGenerator.java | 2 +- .../TrigonometricFunctionGenerator.java | 2 +- .../com/rapidminer/gui/ApplicationFrame.java | 2 +- .../gui/ApplicationPerspectives.java | 2 +- .../com/rapidminer/gui/ConditionalAction.java | 2 +- .../java/com/rapidminer/gui/DockableMenu.java | 53 +- .../rapidminer/gui/DummyObjectVisualizer.java | 2 +- .../rapidminer/gui/EditorCellRenderer.java | 2 +- .../com/rapidminer/gui/ExampleVisualizer.java | 2 +- .../com/rapidminer/gui/GUIInputHandler.java | 2 +- .../gui/GeneralProcessListener.java | 2 +- .../rapidminer/gui/LoggedAbstractAction.java | 2 +- .../java/com/rapidminer/gui/MainFrame.java | 95 +- .../java/com/rapidminer/gui/MainToolBar.java | 349 +- .../com/rapidminer/gui/MenuItemFactory.java | 2 +- .../rapidminer/gui/MetaDataUpdateQueue.java | 4 +- .../com/rapidminer/gui/OperatorDocLoader.java | 2 +- .../gui/OperatorDocToHtmlConverter.java | 2 +- .../gui/OperatorDocumentationBrowser.java | 2 +- .../java/com/rapidminer/gui/Perspective.java | 2 +- .../gui/PerspectiveChangeListener.java | 2 +- .../rapidminer/gui/PerspectiveController.java | 65 +- .../com/rapidminer/gui/PerspectiveMenu.java | 23 +- .../com/rapidminer/gui/PerspectiveModel.java | 5 +- .../rapidminer/gui/PerspectiveProperties.java | 2 +- .../java/com/rapidminer/gui/Perspectives.java | 2 +- .../rapidminer/gui/PerspectivesPanelBar.java | 2 +- .../com/rapidminer/gui/ProcessThread.java | 2 +- .../com/rapidminer/gui/RapidMinerGUI.java | 46 +- .../com/rapidminer/gui/RunActionRegistry.java | 2 +- .../gui/ToolbarGUIStartupListener.java | 2 +- .../rapidminer/gui/actions/AboutAction.java | 18 +- .../com/rapidminer/gui/actions/Actions.java | 8 +- .../AttributeDescriptionFileWizardAction.java | 2 +- .../gui/actions/AttributeEditorAction.java | 2 +- .../gui/actions/AutoWireAction.java | 17 +- .../rapidminer/gui/actions/BrowseAction.java | 2 +- .../gui/actions/CloseAllResultsAction.java | 2 +- .../ConnectPortToRepositoryAction.java | 2 +- .../gui/actions/EditViewAction.java | 2 +- .../rapidminer/gui/actions/ExitAction.java | 21 +- .../gui/actions/ExportProcessAction.java | 2 +- .../actions/ExtendedMouseClickedAdapter.java | 2 +- .../gui/actions/ImportDataAction.java | 2 +- .../gui/actions/ImportProcessAction.java | 2 +- .../actions/ManageConfigurablesAction.java | 49 + .../gui/actions/ManagePasswordsAction.java | 49 + .../com/rapidminer/gui/actions/NewAction.java | 2 +- .../gui/actions/NewPerspectiveAction.java | 19 +- .../rapidminer/gui/actions/OpenAction.java | 2 +- .../gui/actions/OperatorActionContext.java | 2 +- .../gui/actions/OperatorActionFactory.java | 2 +- .../rapidminer/gui/actions/PauseAction.java | 21 +- .../rapidminer/gui/actions/PrintAction.java | 2 +- .../actions/PropagateRealMetaDataAction.java | 29 +- .../rapidminer/gui/actions/RedoAction.java | 21 +- .../RestoreDefaultPerspectiveAction.java | 48 + .../com/rapidminer/gui/actions/RunAction.java | 21 +- .../rapidminer/gui/actions/SaveAction.java | 2 +- .../rapidminer/gui/actions/SaveAsAction.java | 2 +- .../gui/actions/SettingsAction.java | 2 +- .../rapidminer/gui/actions/StopAction.java | 21 +- .../gui/actions/StoreInRepositoryAction.java | 2 +- .../rapidminer/gui/actions/ToggleAction.java | 2 +- .../gui/actions/ToggleExpertModeAction.java | 2 +- .../rapidminer/gui/actions/UndoAction.java | 21 +- .../gui/actions/UpgradeLicenseAction.java | 2 +- .../actions/ValidateAutomaticallyAction.java | 2 +- .../gui/actions/ValidateProcessAction.java | 21 +- .../gui/actions/WorkspaceAction.java | 37 +- .../AbstractPrintableIOObjectPanel.java | 2 +- .../gui/actions/export/ComponentPrinter.java | 2 +- .../gui/actions/export/ExportImageAction.java | 2 +- .../actions/export/ImageExportException.java | 2 +- .../gui/actions/export/ImageExporter.java | 2 +- .../actions/export/PrintAndExportDialog.java | 2 +- .../gui/actions/export/PrintPreviewPanel.java | 2 +- .../actions/export/PrintableComponent.java | 2 +- .../export/PrintableComponentContainer.java | 2 +- .../ShowPrintAndExportDialogAction.java | 10 +- .../export/SimplePrintableComponent.java | 2 +- .../actions/search/ActionsGlobalSearch.java | 53 + .../ActionsGlobalSearchGUIProvider.java | 225 + .../search/ActionsGlobalSearchManager.java | 394 ++ .../gui/actions/search/DockableAction.java | 51 + .../gui/actions/startup/NewAction.java | 2 +- .../gui/actions/startup/OpenAction.java | 2 +- .../gui/actions/startup/TutorialAction.java | 2 +- .../rapidminer/gui/animation/Animation.java | 2 +- .../AnimationTimerProcessListener.java | 2 +- .../gui/animation/IndeterminateAnimation.java | 2 +- .../OperatorAnimationProcessListener.java | 2 +- .../animation/ProcessAnimationManager.java | 2 +- .../gui/animation/ProgressAnimation.java | 2 +- .../gui/animation/ProgressProvider.java | 2 +- .../gui/attributeeditor/AttributeEditor.java | 2 +- .../AttributeEditorDialog.java | 2 +- .../gui/attributeeditor/CellEditors.java | 2 +- .../gui/attributeeditor/CellRenderers.java | 2 +- .../gui/attributeeditor/DataControl.java | 2 +- .../attributeeditor/DataControlListener.java | 2 +- .../attributeeditor/actions/ClearAction.java | 2 +- .../attributeeditor/actions/CloseAction.java | 2 +- .../actions/GuessAllTypesAction.java | 2 +- .../actions/GuessTypeAction.java | 2 +- .../actions/LoadDataAction.java | 2 +- .../actions/LoadSeriesDataAction.java | 2 +- .../actions/OpenAttributeFileAction.java | 2 +- .../actions/RemoveColumnAction.java | 2 +- .../actions/RemoveRowAction.java | 2 +- .../actions/SaveAttributeFileAction.java | 2 +- .../actions/SaveDataAction.java | 2 +- .../actions/UseRowAsNamesAction.java | 2 +- .../com/rapidminer/gui/autosave/AutoSave.java | 2 +- .../gui/dialog/AttributeWeightCellEditor.java | 2 +- .../gui/dialog/AttributeWeightsDialog.java | 2 +- .../dialog/AttributeWeightsTableModel.java | 2 +- .../BrowserUnavailableDialogFactory.java | 2 +- .../gui/dialog/BugZillaAssistant.java | 2 +- .../gui/dialog/CronEditorDialog.java | 2 +- .../com/rapidminer/gui/dialog/EULADialog.java | 2 +- .../gui/dialog/IndividualSelector.java | 2 +- .../dialog/IndividualSelectorTableModel.java | 2 +- .../gui/dialog/NewOperatorDialog.java | 2 +- .../gui/dialog/OperatorInfoPanel.java | 2 +- .../gui/dialog/OperatorInfoScreen.java | 2 +- .../gui/dialog/ResultContainer.java | 2 +- .../rapidminer/gui/dialog/SearchDialog.java | 2 +- .../gui/dialog/SearchableJEditTextArea.java | 2 +- .../gui/dialog/SearchableJTextComponent.java | 2 +- .../gui/dialog/SearchableTextComponent.java | 2 +- .../dialog/UnknownParametersInfoDialog.java | 2 +- .../dnd/AbstractPatchedTransferHandler.java | 2 +- .../com/rapidminer/gui/dnd/DragListener.java | 2 +- .../gui/dnd/OperatorTransferHandler.java | 2 +- .../dnd/ReceivingOperatorTransferHandler.java | 7 +- .../gui/dnd/RepositoryLocationList.java | 2 +- .../gui/dnd/TransferableAnnotation.java | 2 +- .../gui/dnd/TransferableOperator.java | 10 +- .../gui/dnd/TransferableRepositoryEntry.java | 91 + .../gui/docking/DetachedDockViewAsTab.java | 2 +- .../RapidDockableContainerFactory.java | 2 +- .../gui/docking/RapidDockingToolbar.java | 2 +- .../gui/docking/RapidFloatingDialog.java | 2 +- .../rapidminer/gui/flow/AutoWireThread.java | 2 +- .../com/rapidminer/gui/flow/ErrorTable.java | 2 +- .../flow/ExampleSetMetaDataTableModel.java | 2 +- .../rapidminer/gui/flow/ExtensionButton.java | 2 +- .../rapidminer/gui/flow/FlowVisualizer.java | 2 +- .../gui/flow/NewProcessUndoManager.java | 2 +- .../rapidminer/gui/flow/OverviewPanel.java | 2 +- .../rapidminer/gui/flow/PanningManager.java | 2 +- .../rapidminer/gui/flow/ProcessButtonBar.java | 2 +- .../gui/flow/ProcessInteractionListener.java | 2 +- .../com/rapidminer/gui/flow/ProcessPanel.java | 6 +- .../gui/flow/ProcessPanelScroller.java | 2 +- .../gui/flow/ProcessParentButtonModel.java | 2 +- .../gui/flow/ProcessUndoManager.java | 2 +- .../rapidminer/gui/flow/QuickFixDialog.java | 2 +- .../annotations/AnnotationDrawUtils.java | 2 +- .../annotations/AnnotationDrawer.java | 2 +- .../annotations/AnnotationsDecorator.java | 2 +- .../annotations/AnnotationsVisualizer.java | 2 +- .../PasteAnnotationProxyAction.java | 2 +- .../TransferHandlerAnnotationPlaintext.java | 2 +- .../event/AnnotationEventHook.java | 2 +- .../model/AnnotationDragHelper.java | 2 +- .../model/AnnotationResizeHelper.java | 2 +- .../annotations/model/AnnotationsModel.java | 2 +- .../annotations/model/OperatorAnnotation.java | 2 +- .../annotations/model/ProcessAnnotation.java | 2 +- .../annotations/model/WorkflowAnnotation.java | 2 +- .../model/WorkflowAnnotations.java | 2 +- .../style/AnnotationAlignment.java | 2 +- .../annotations/style/AnnotationColor.java | 2 +- .../annotations/style/AnnotationStyle.java | 2 +- .../background/ProcessBackgroundImage.java | 2 +- .../ProcessBackgroundImageDecorator.java | 2 +- .../ProcessBackgroundImageVisualizer.java | 2 +- .../connections/ConnectionDrawUtils.java | 2 +- .../RemoveHoveredConnectionDecorator.java | 2 +- .../RemoveSelectedConnectionDecorator.java | 2 +- .../draw/OperatorDrawDecorator.java | 2 +- .../draw/ProcessDrawDecorator.java | 2 +- .../draw/ProcessDrawUtils.java | 2 +- .../processrendering/draw/ProcessDrawer.java | 2 +- .../event/ProcessRendererAnnotationEvent.java | 2 +- .../event/ProcessRendererEventListener.java | 2 +- .../event/ProcessRendererModelEvent.java | 2 +- .../event/ProcessRendererOperatorEvent.java | 2 +- .../model/ProcessRendererModel.java | 27 +- .../view/ProcessEventDecorator.java | 2 +- .../view/ProcessRendererController.java | 2 +- .../view/ProcessRendererDropTarget.java | 2 +- .../view/ProcessRendererMouseHandler.java | 2 +- .../view/ProcessRendererTransferHandler.java | 2 +- .../view/ProcessRendererView.java | 2 +- .../processrendering/view/RenderPhase.java | 2 +- .../processrendering/view/RepaintFilter.java | 2 +- .../view/actions/ArrangeOperatorsAction.java | 2 +- .../view/actions/AutoFitAction.java | 2 +- .../DeleteSelectedConnectionAction.java | 2 +- .../view/actions/RenameAction.java | 2 +- .../view/actions/SelectAllAction.java | 8 +- .../view/components/InterpolationMap.java | 2 +- .../components/OperatorWarningHandler.java | 2 +- .../ProcessRendererTooltipProvider.java | 2 +- .../graphs/AssociationRulesGraphCreator.java | 2 +- .../graphs/BasicVertexShapeTransformer.java | 2 +- .../gui/graphs/ClusterModelGraphCreator.java | 2 +- .../gui/graphs/ClusterModelObjectViewer.java | 2 +- .../gui/graphs/DefaultObjectViewer.java | 2 +- .../ExtendedVertexShapeTransformer.java | 2 +- .../rapidminer/gui/graphs/GraphCreator.java | 2 +- .../gui/graphs/GraphCreatorAdaptor.java | 2 +- .../gui/graphs/GraphObjectViewer.java | 2 +- .../rapidminer/gui/graphs/GraphViewer.java | 2 +- .../gui/graphs/LayoutSelection.java | 2 +- .../gui/graphs/ShapeBasedTreeLayout.java | 2 +- .../gui/graphs/SimilarityGraphCreator.java | 2 +- .../gui/graphs/SingleDefaultGraphMouse.java | 2 +- .../rapidminer/gui/graphs/SortableEdge.java | 2 +- .../gui/graphs/TransitionGraphCreator.java | 2 +- .../graphs/TreeModelEdgeLabelRenderer.java | 2 +- .../gui/graphs/TreeModelGraphCreator.java | 2 +- .../graphs/TreeModelNodeLabelRenderer.java | 2 +- .../gui/graphs/TreeModelNodeRenderer.java | 2 +- .../gui/graphs/actions/ZoomInAction.java | 2 +- .../gui/graphs/actions/ZoomOutAction.java | 2 +- .../gui/internal/GUIStartupListener.java | 2 +- .../rapidminer/gui/license/LicenseTools.java | 2 +- .../rapidminer/gui/look/ButtonListener.java | 2 +- .../gui/look/ClipboardActionsPopup.java | 2 +- .../java/com/rapidminer/gui/look/Colors.java | 19 +- .../gui/look/GenericArrowButton.java | 2 +- .../gui/look/ImageIconUIResource.java | 2 +- .../gui/look/InternalFrameTitlePane.java | 2 +- .../rapidminer/gui/look/RapidLookAndFeel.java | 6 +- .../gui/look/RapidLookComboBoxEditor.java | 2 +- .../gui/look/RapidLookListCellRenderer.java | 2 +- .../rapidminer/gui/look/RapidLookTools.java | 108 +- .../gui/look/RoundedPopupFactory.java | 2 +- .../gui/look/RoundedRectanglePopup.java | 2 +- .../com/rapidminer/gui/look/TextActions.java | 2 +- .../gui/look/ToggleButtonListener.java | 2 +- .../gui/look/ToolbarHandlerBuffer.java | 2 +- .../gui/look/ToolbarHandlerIcon.java | 2 +- .../rapidminer/gui/look/borders/Borders.java | 2 +- .../gui/look/borders/CheckBoxBorder.java | 2 +- .../gui/look/borders/ComboBoxBorder.java | 2 +- .../ComboBoxListCellRendererFocusBorder.java | 2 +- .../gui/look/borders/DummyBorder.java | 2 +- .../gui/look/borders/EmptyBorder.java | 2 +- .../gui/look/borders/EmptyButtonBorder.java | 2 +- .../gui/look/borders/EmptyComboBoxBorder.java | 2 +- .../gui/look/borders/InternalFrameBorder.java | 2 +- .../gui/look/borders/MenuBarBorder.java | 2 +- .../gui/look/borders/PopupBorder.java | 2 +- .../gui/look/borders/PopupMenuBorder.java | 2 +- .../gui/look/borders/ProgressBarBorder.java | 2 +- .../gui/look/borders/RoundTitledBorder.java | 2 +- .../gui/look/borders/ScrollPaneBorder.java | 2 +- .../look/borders/ShadowedPopupMenuBorder.java | 2 +- .../gui/look/borders/SpinnerBorder.java | 2 +- .../gui/look/borders/SplitPaneBorder.java | 2 +- .../gui/look/borders/TableHeaderBorder.java | 2 +- .../gui/look/borders/TextFieldBorder.java | 71 +- .../gui/look/borders/ToolBarBorder.java | 2 +- .../gui/look/borders/ToolTipBorder.java | 2 +- .../gui/look/fc/AutomaticTextField.java | 2 +- .../com/rapidminer/gui/look/fc/Bookmark.java | 2 +- .../gui/look/fc/BookmarkDialog.java | 2 +- .../rapidminer/gui/look/fc/BookmarkIO.java | 2 +- .../rapidminer/gui/look/fc/BookmarkList.java | 2 +- .../gui/look/fc/BookmarkListModel.java | 2 +- .../gui/look/fc/DragSelectionThread.java | 2 +- .../rapidminer/gui/look/fc/FileChooserUI.java | 2 +- .../com/rapidminer/gui/look/fc/FileList.java | 2 +- .../com/rapidminer/gui/look/fc/FileTable.java | 2 +- .../gui/look/fc/FileTableLabel.java | 2 +- .../java/com/rapidminer/gui/look/fc/Item.java | 2 +- .../com/rapidminer/gui/look/fc/ItemPanel.java | 2 +- .../look/fc/ItemPanelKeyboardListener.java | 2 +- .../gui/look/fc/MultipleLinesLabel.java | 2 +- .../gui/look/fc/ThumbGeneratorThread.java | 2 +- .../com/rapidminer/gui/look/fc/Tools.java | 2 +- .../gui/look/icons/CheckBoxIcon.java | 2 +- .../gui/look/icons/CheckBoxMenuItemIcon.java | 2 +- .../gui/look/icons/IconFactory.java | 2 +- .../gui/look/icons/RadioButtonIcon.java | 2 +- .../look/icons/RadioButtonMenuItemIcon.java | 2 +- .../look/painters/AbstractCachedPainter.java | 2 +- .../rapidminer/gui/look/painters/Cache.java | 2 +- .../gui/look/painters/CachedPainter.java | 2 +- .../look/painters/MenuBackgroundPainter.java | 2 +- .../painters/MenuBarBackgroundPainter.java | 2 +- .../look/painters/MenuSeparatorPainter.java | 2 +- .../com/rapidminer/gui/look/ui/ButtonUI.java | 2 +- .../gui/look/ui/CheckBoxMenuItemUI.java | 2 +- .../rapidminer/gui/look/ui/CheckBoxUI.java | 2 +- .../rapidminer/gui/look/ui/ComboBoxUI.java | 2 +- .../rapidminer/gui/look/ui/DesktopIconUI.java | 2 +- .../rapidminer/gui/look/ui/EditorPaneUI.java | 2 +- .../gui/look/ui/ExtensionButtonUI.java | 2 +- .../gui/look/ui/FormattedTextFieldUI.java | 2 +- .../gui/look/ui/InternalFrameUI.java | 2 +- .../com/rapidminer/gui/look/ui/LabelUI.java | 2 +- .../com/rapidminer/gui/look/ui/ListUI.java | 2 +- .../com/rapidminer/gui/look/ui/MenuBarUI.java | 2 +- .../rapidminer/gui/look/ui/MenuItemUI.java | 2 +- .../com/rapidminer/gui/look/ui/MenuUI.java | 2 +- .../gui/look/ui/PasswordFieldUI.java | 2 +- .../gui/look/ui/PopupMenuSeparatorUI.java | 2 +- .../rapidminer/gui/look/ui/PopupMenuUI.java | 2 +- .../rapidminer/gui/look/ui/ProgressBarUI.java | 2 +- .../gui/look/ui/RadioButtonMenuItemUI.java | 2 +- .../rapidminer/gui/look/ui/RadioButtonUI.java | 2 +- .../gui/look/ui/RapidDockingUISettings.java | 2 +- .../rapidminer/gui/look/ui/ScrollBarUI.java | 2 +- .../com/rapidminer/gui/look/ui/SliderUI.java | 2 +- .../rapidminer/gui/look/ui/SpinnerButton.java | 2 +- .../com/rapidminer/gui/look/ui/SpinnerUI.java | 2 +- .../gui/look/ui/SplitPaneDividerUI.java | 2 +- .../rapidminer/gui/look/ui/SplitPaneUI.java | 2 +- .../rapidminer/gui/look/ui/TabbedPaneUI.java | 2 +- .../rapidminer/gui/look/ui/TableHeaderUI.java | 2 +- .../com/rapidminer/gui/look/ui/TableUI.java | 2 +- .../rapidminer/gui/look/ui/TextAreaUI.java | 2 +- .../rapidminer/gui/look/ui/TextFieldUI.java | 2 +- .../rapidminer/gui/look/ui/TextPaneUI.java | 2 +- .../gui/look/ui/ToggleButtonUI.java | 2 +- .../com/rapidminer/gui/look/ui/ToolBarUI.java | 2 +- .../gui/look/ui/ToolbarButtonUI.java | 2 +- .../com/rapidminer/gui/look/ui/TreeUI.java | 2 +- .../gui/metadata/MetaDataRendererFactory.java | 2 +- .../MetaDataRendererFactoryRegistry.java | 2 +- .../ChartConfigurationException.java | 2 +- .../new_plotter/ChartCreationException.java | 2 +- .../new_plotter/ChartPlottimeException.java | 2 +- .../ConfigurationChangeResponse.java | 2 +- .../gui/new_plotter/MasterOfDesaster.java | 2 +- .../new_plotter/PlotConfigurationError.java | 2 +- .../PlotConfigurationQuickFix.java | 2 +- .../AbstractDimensionConfig.java | 2 +- .../configuration/AbstractValueGrouping.java | 2 +- .../configuration/AggregationWindowing.java | 2 +- .../AxisParallelLineConfiguration.java | 2 +- .../AxisParallelLinesConfiguration.java | 2 +- ...xisParallelLinesConfigurationListener.java | 2 +- .../configuration/DataTableColumn.java | 2 +- .../configuration/DefaultDimensionConfig.java | 2 +- .../configuration/DimensionConfig.java | 2 +- .../configuration/DistinctValueGrouping.java | 2 +- .../configuration/DomainConfigManager.java | 2 +- .../EqualDataFractionGrouping.java | 2 +- .../EquidistantFixedBinCountBinning.java | 2 +- .../configuration/GroupCellKey.java | 2 +- .../configuration/LegendConfiguration.java | 2 +- .../new_plotter/configuration/LineFormat.java | 2 +- .../configuration/LineFormatListener.java | 2 +- .../configuration/LinkAndBrushMaster.java | 2 +- .../configuration/PlotConfiguration.java | 2 +- .../configuration/RangeAxisConfig.java | 2 +- .../configuration/SeriesFormat.java | 2 +- .../configuration/ValueGrouping.java | 2 +- .../configuration/ValueSource.java | 2 +- ...ParallelLinesConfigurationChangeEvent.java | 2 +- .../data/DataTableColumnIndex.java | 2 +- .../new_plotter/data/DimensionConfigData.java | 2 +- .../data/DomainConfigManagerData.java | 2 +- .../gui/new_plotter/data/GroupCellData.java | 2 +- .../new_plotter/data/GroupCellKeyAndData.java | 2 +- .../new_plotter/data/GroupCellSeriesData.java | 2 +- .../gui/new_plotter/data/PlotData.java | 2 +- .../gui/new_plotter/data/PlotInstance.java | 2 +- .../gui/new_plotter/data/RangeAxisData.java | 2 +- .../gui/new_plotter/data/ValueSourceData.java | 2 +- .../gui/new_plotter/engine/PlotEngine.java | 2 +- .../engine/jfreechart/ChartAxisFactory.java | 2 +- .../jfreechart/ChartDatasetFactory.java | 2 +- .../jfreechart/ChartRendererFactory.java | 2 +- .../jfreechart/JFreeChartPlotEngine.java | 2 +- .../jfreechart/MultiAxesCrosshairOverlay.java | 2 +- .../jfreechart/PlotInstanceLegendCreator.java | 2 +- .../jfreechart/RenderFormatDelegate.java | 2 +- .../actions/AddParallelLineAction.java | 2 +- .../actions/ClearParallelLinesAction.java | 2 +- .../jfreechart/actions/CopyChartAction.java | 2 +- .../actions/ManageParallelLinesAction.java | 2 +- .../jfreechart/actions/ManageZoomAction.java | 2 +- ...rceToMultiValueCategoryDatasetAdapter.java | 2 +- .../legend/ColoredBlockContainer.java | 2 +- .../legend/CustomLegendGraphic.java | 2 +- .../jfreechart/legend/CustomLegendItem.java | 2 +- .../legend/FlankedShapeLegendItem.java | 2 +- .../jfreechart/legend/SmartLegendTitle.java | 2 +- .../LinkAndBrushChartPanel.java | 2 +- .../link_and_brush/axis/CustomDateAxis.java | 2 +- .../axis/CustomLogarithmicAxis.java | 2 +- .../link_and_brush/axis/CustomNumberAxis.java | 2 +- .../link_and_brush/axis/CustomSymbolAxis.java | 2 +- .../link_and_brush/axis/LinkAndBrushAxis.java | 2 +- .../listener/LinkAndBrushListener.java | 2 +- .../listener/LinkAndBrushSelection.java | 2 +- .../LinkAndBrushSelectionListener.java | 2 +- .../plots/LinkAndBrushCategoryPlot.java | 2 +- .../plots/LinkAndBrushPlot.java | 2 +- .../plots/LinkAndBrushXYPlot.java | 2 +- .../renderer/FormattedAreaRenderer.java | 2 +- .../renderer/FormattedBarRenderer.java | 2 +- .../FormattedClusteredXYBarRenderer.java | 2 +- .../renderer/FormattedDeviationRenderer.java | 2 +- .../FormattedLineAndShapeRenderer.java | 2 +- .../renderer/FormattedRenderer.java | 2 +- .../renderer/FormattedScatterRenderer.java | 2 +- .../FormattedStackedAreaRenderer.java | 2 +- .../renderer/FormattedStackedBarRenderer.java | 2 +- .../FormattedStackedXYAreaRenderer2.java | 2 +- .../FormattedStackedXYBarRenderer.java | 2 +- .../FormattedStatisticalBarRenderer.java | 2 +- ...mattedStatisticalLineAndShapeRenderer.java | 2 +- .../renderer/FormattedXYAreaRenderer2.java | 2 +- .../FormattedXYDifferenceRenderer.java | 2 +- .../renderer/FormattedXYErrorRenderer.java | 2 +- .../FormattedXYLineAndShapeRenderer.java | 2 +- ...sParallelLineConfigurationChangeEvent.java | 2 +- .../gui/AbstractConfigurationPanel.java | 2 +- .../AbstractTreeSelectionDependentPanel.java | 2 +- .../AreaAndBarChartConfigurationPanel.java | 2 +- .../gui/AttributeDropTextField.java | 2 +- .../gui/AttributeSelectionDialog.java | 2 +- .../gui/AxisConfigurationContainer.java | 2 +- .../gui/ChartConfigurationPanel.java | 2 +- .../gui/ChartTitleConfigurationContainer.java | 2 +- .../new_plotter/gui/ColorSchemeDialog.java | 2 +- .../new_plotter/gui/DimensionConfigPanel.java | 2 +- .../gui/new_plotter/gui/FontDialog.java | 2 +- .../gui/GlobalConfigurationPanel.java | 2 +- .../gui/GroupingConfigurationPanel.java | 2 +- .../gui/LegendConfigurationPanel.java | 2 +- .../gui/LineChartConfigurationPanel.java | 2 +- .../gui/PlotConfigurationTree.java | 2 +- .../gui/PlotConfigurationTreeModel.java | 2 +- .../new_plotter/gui/RangeAxisConfigPanel.java | 2 +- .../gui/SeriesFormatConfigurationPanel.java | 2 +- .../gui/ValueSourceConfigurationPanel.java | 2 +- .../gui/WindowingConfigurationContainer.java | 2 +- .../cellrenderer/ColorListCellRenderer.java | 2 +- .../ColorRGBComboBoxCellRenderer.java | 2 +- .../ColorSchemeComboBoxRenderer.java | 2 +- .../cellrenderer/ComboSeparatorsRenderer.java | 2 +- .../DataTableColumnListCellRenderer.java | 2 +- .../EnumComboBoxCellRenderer.java | 2 +- .../PlotConfigurationTreeCellRenderer.java | 2 +- .../gui/cellrenderer/TreeNodeColors.java | 2 +- .../gui/dialog/AddParallelLineDialog.java | 2 +- .../gui/dialog/EditParallelLineDialog.java | 2 +- .../gui/dialog/ManageParallelLinesDialog.java | 2 +- .../gui/dialog/ManageZoomDialog.java | 2 +- .../gui/dnd/DataTableColumnCollection.java | 2 +- ...DataTableColumnCollectionTransferable.java | 2 +- ...bleColumnDropTextFieldTransferHandler.java | 2 +- .../DataTableColumnListTransferHandler.java | 2 +- .../PlotConfigurationTreeTransferHandler.java | 2 +- .../AbstractGroupingCardPanel.java | 2 +- .../DistinctValueGroupingCardPanel.java | 2 +- .../EqualDataFractionCardPanel.java | 2 +- .../EquidistantFixedBinCountCardPanel.java | 2 +- .../new_plotter/gui/popup/PopupAction.java | 2 +- .../gui/popup/PopupComponentListener.java | 2 +- .../gui/new_plotter/gui/popup/PopupPanel.java | 2 +- .../treenodes/DimensionConfigTreeNode.java | 2 +- .../treenodes/PlotConfigurationTreeNode.java | 2 +- .../treenodes/RangeAxisConfigTreeNode.java | 2 +- .../gui/treenodes/ValueSourceTreeNode.java | 2 +- .../integration/ExpertDataTableRenderer.java | 2 +- .../integration/PlotConfigurationHistory.java | 2 +- .../AggregationWindowingListener.java | 2 +- ...AxisParallelLineConfigurationListener.java | 2 +- .../listener/DimensionConfigListener.java | 2 +- .../JFreeChartPlotEngineListener.java | 2 +- .../listener/LegendConfigurationListener.java | 2 +- .../listener/MasterOfDesasterListener.java | 2 +- .../listener/PlotConfigurationListener.java | 2 +- .../PlotConfigurationProcessingListener.java | 2 +- .../listener/PlotInstanceChangedListener.java | 2 +- .../listener/RangeAxisConfigListener.java | 2 +- .../RenderFormatDelegateChangeListener.java | 2 +- .../listener/SeriesFormatListener.java | 2 +- .../listener/ValueGroupingListener.java | 2 +- .../listener/ValueRangeListener.java | 2 +- .../listener/ValueSourceListener.java | 2 +- .../events/ConfigurationChangeEvent.java | 2 +- .../events/DimensionConfigChangeEvent.java | 2 +- .../LegendConfigurationChangeEvent.java | 2 +- .../events/LineFormatChangeEvent.java | 2 +- .../events/PlotConfigurationChangeEvent.java | 2 +- .../events/RangeAxisConfigChangeEvent.java | 2 +- .../events/SeriesFormatChangeEvent.java | 2 +- .../events/ValueGroupingChangeEvent.java | 2 +- .../events/ValueRangeChangeEvent.java | 2 +- .../events/ValueSourceChangeEvent.java | 2 +- .../new_plotter/templates/style/ColorRGB.java | 2 +- .../templates/style/ColorScheme.java | 2 +- .../templates/style/PlotterStyleProvider.java | 2 +- .../utility/AbstractValueRange.java | 2 +- .../utility/AggregatedValueRange.java | 2 +- .../utility/CategoricalColorProvider.java | 2 +- .../utility/CategoricalSizeProvider.java | 2 +- .../new_plotter/utility/ColorProvider.java | 2 +- .../utility/ContinuousColorProvider.java | 2 +- .../utility/ContinuousSizeProvider.java | 2 +- .../utility/DataStructureUtils.java | 2 +- .../utility/DataTransformation.java | 2 +- .../gui/new_plotter/utility/ListUtility.java | 2 +- .../utility/NumericalValueRange.java | 2 +- .../new_plotter/utility/SayNoValueRange.java | 2 +- .../new_plotter/utility/ShapeProvider.java | 2 +- .../utility/SingleValueValueRange.java | 2 +- .../gui/new_plotter/utility/SizeProvider.java | 2 +- .../gui/new_plotter/utility/SortProvider.java | 2 +- .../gui/new_plotter/utility/ValueRange.java | 2 +- .../gui/operatormenu/NewOperatorMenu.java | 2 +- .../gui/operatormenu/OperatorGroupMenu.java | 2 +- .../gui/operatormenu/OperatorMenu.java | 2 +- .../gui/operatormenu/ReplaceOperatorMenu.java | 2 +- .../gui/operatortree/OperatorTree.java | 2 +- .../OperatorTreeCellRenderer.java | 2 +- .../gui/operatortree/OperatorTreePanel.java | 2 +- .../gui/operatortree/ProcessTreeModel.java | 2 +- .../gui/operatortree/actions/ActionUtil.java | 2 +- .../actions/CollapseAllAction.java | 2 +- .../actions/CutCopyPasteDeleteAction.java | 2 +- .../actions/DeleteOperatorAction.java | 2 +- .../operatortree/actions/ExpandAllAction.java | 2 +- .../actions/InfoOperatorAction.java | 2 +- .../actions/ToggleActivationItem.java | 2 +- .../actions/ToggleAllBreakpointsItem.java | 21 +- .../actions/ToggleBreakpointItem.java | 2 +- .../rapidminer/gui/plotter/AndrewsCurves.java | 2 +- .../gui/plotter/AxisNameResolver.java | 2 +- .../gui/plotter/AxisTransformation.java | 2 +- .../gui/plotter/AxisTransformationId.java | 2 +- .../gui/plotter/AxisTransformationLog.java | 2 +- .../rapidminer/gui/plotter/BoundDiagram.java | 2 +- .../gui/plotter/ColorPlotterPoint.java | 2 +- .../rapidminer/gui/plotter/ColorProvider.java | 2 +- .../plotter/ColorQuartileMatrixPlotter.java | 2 +- .../gui/plotter/ColorQuartilePlotter.java | 2 +- .../gui/plotter/CoordinateTransformation.java | 2 +- .../gui/plotter/CoordinatesHandler.java | 2 +- .../gui/plotter/DensityPlotter.java | 2 +- .../gui/plotter/ExamplePlotterPoint.java | 2 +- .../gui/plotter/GridVizPlotter.java | 2 +- .../plotter/HeuristicPlotterConfigurator.java | 2 +- .../rapidminer/gui/plotter/HintonDiagram.java | 2 +- .../plotter/LabelRotatingPlotterAdapter.java | 2 +- .../LocalNormalizationPlotterAdapter.java | 2 +- .../com/rapidminer/gui/plotter/NameValue.java | 2 +- .../plotter/NullCoordinateTransformation.java | 2 +- .../gui/plotter/ParallelPlotter.java | 2 +- .../java/com/rapidminer/gui/plotter/Plot.java | 2 +- .../com/rapidminer/gui/plotter/Plotter.java | 2 +- .../gui/plotter/PlotterAdapter.java | 2 +- .../gui/plotter/PlotterChooser.java | 2 +- .../plotter/PlotterConfigurationModel.java | 2 +- .../plotter/PlotterConfigurationSettings.java | 2 +- .../gui/plotter/PlotterControlPanel.java | 2 +- .../rapidminer/gui/plotter/PlotterLegend.java | 2 +- .../gui/plotter/PlotterMouseHandler.java | 2 +- .../rapidminer/gui/plotter/PlotterPanel.java | 2 +- .../rapidminer/gui/plotter/PlotterPoint.java | 2 +- .../com/rapidminer/gui/plotter/Quartile.java | 2 +- .../gui/plotter/QuartilePlotter.java | 2 +- .../rapidminer/gui/plotter/RadVizPlotter.java | 2 +- .../gui/plotter/RangeablePlotterAdapter.java | 2 +- .../gui/plotter/RectangleStyle.java | 2 +- .../gui/plotter/ScatterMatrixPlotter.java | 2 +- .../gui/plotter/ScatterPlotter.java | 2 +- .../gui/plotter/SimplePlotterDialog.java | 2 +- .../gui/plotter/SimplePlotterPanelDialog.java | 2 +- .../rapidminer/gui/plotter/SurveyPlotter.java | 2 +- .../com/rapidminer/gui/plotter/ToolTip.java | 2 +- .../rapidminer/gui/plotter/WeightIndex.java | 2 +- .../charts/Abstract2DChartPlotter.java | 2 +- .../plotter/charts/AbstractChartPanel.java | 2 +- .../charts/AbstractPieChartPlotter.java | 2 +- .../gui/plotter/charts/BarChartPlotter.java | 2 +- .../gui/plotter/charts/BlockChartPlotter.java | 2 +- .../plotter/charts/BubbleChartPlotter.java | 2 +- .../charts/ChartPanelShiftController.java | 2 +- .../plotter/charts/ColorizedBarRenderer.java | 2 +- .../charts/ColorizedBubbleRenderer.java | 2 +- .../charts/ColorizedLineAndShapeRenderer.java | 2 +- .../charts/ColorizedShapeItemRenderer.java | 2 +- .../plotter/charts/DeviationChartPlotter.java | 2 +- .../plotter/charts/DistributionPlotter.java | 2 +- .../gui/plotter/charts/HistogramChart.java | 2 +- .../plotter/charts/HistogramColorChart.java | 2 +- .../charts/MultipleScatterPlotter.java | 2 +- .../charts/MultipleSeriesChartPlotter.java | 2 +- .../gui/plotter/charts/ParallelPlotter2.java | 2 +- .../charts/ParetoChartItemLabelGenerator.java | 2 +- .../plotter/charts/ParetoChartPlotter.java | 2 +- .../gui/plotter/charts/PieChart2DPlotter.java | 2 +- .../gui/plotter/charts/PieChart3DPlotter.java | 2 +- .../plotter/charts/PointsAndLinesDialog.java | 2 +- .../gui/plotter/charts/RapidBarPainter.java | 2 +- .../plotter/charts/RapidHistogramDataset.java | 2 +- .../gui/plotter/charts/RapidXYBarPainter.java | 2 +- .../gui/plotter/charts/RingChartPlotter.java | 2 +- .../gui/plotter/charts/ScatterPlotter2.java | 2 +- .../gui/plotter/charts/SelectablePlotter.java | 2 +- .../plotter/charts/SeriesChartPlotter.java | 2 +- .../charts/StackedBarChartPlotter.java | 2 +- .../gui/plotter/charts/WebPlotter.java | 2 +- .../plotter/charts/WeightBasedSymbolAxis.java | 2 +- .../conditions/BasicPlotterCondition.java | 2 +- .../conditions/ColumnsPlotterCondition.java | 2 +- .../conditions/CombinedPlotterCondition.java | 2 +- .../plotter/conditions/PlotterCondition.java | 2 +- .../conditions/RowsPlotterCondition.java | 2 +- .../gui/plotter/mathplot/BoxPlot2D.java | 2 +- .../gui/plotter/mathplot/BoxPlot3D.java | 2 +- .../gui/plotter/mathplot/JMathPlotter.java | 2 +- .../gui/plotter/mathplot/JMathPlotter2D.java | 2 +- .../gui/plotter/mathplot/JMathPlotter3D.java | 2 +- .../gui/plotter/mathplot/ScatterPlot3D.java | 2 +- .../plotter/mathplot/ScatterPlot3DColor.java | 2 +- .../gui/plotter/mathplot/SticksPlot2D.java | 2 +- .../gui/plotter/mathplot/SticksPlot3D.java | 2 +- .../gui/plotter/mathplot/SurfacePlot3D.java | 2 +- .../plotter/settings/ListeningJCheckBox.java | 2 +- .../plotter/settings/ListeningJComboBox.java | 2 +- .../plotter/settings/ListeningJSlider.java | 2 +- .../settings/ListeningListSelectionModel.java | 2 +- .../settings/PlotterSettingsHistory.java | 2 +- .../gui/plotter/som/SOMClassColorizer.java | 2 +- .../gui/plotter/som/SOMFireColorizer.java | 2 +- .../gui/plotter/som/SOMGreyColorizer.java | 2 +- .../plotter/som/SOMLandscapeColorizer.java | 2 +- .../gui/plotter/som/SOMMatrixColorizer.java | 2 +- .../gui/plotter/som/SOMPlotter.java | 2 +- .../processeditor/ExtendedProcessEditor.java | 2 +- .../gui/processeditor/MacroEditor.java | 2 +- .../gui/processeditor/MacroViewer.java | 2 +- .../gui/processeditor/NewOperatorEditor.java | 2 +- .../processeditor/NewOperatorGroupTree.java | 2 +- .../NewOperatorGroupTreeModel.java | 2 +- .../NewOperatorGroupTreeRenderer.java | 2 +- .../processeditor/ProcessContextEditor.java | 2 +- .../ProcessContextProcessEditor.java | 2 +- .../gui/processeditor/ProcessEditor.java | 2 +- .../gui/processeditor/ProcessLogTab.java | 2 +- .../RepositoryLocationsEditor.java | 2 +- .../gui/processeditor/XMLEditor.java | 11 +- .../results/DockableResultDisplay.java | 2 +- .../ProcessExecutionResultOverview.java | 2 +- .../processeditor/results/RapidBorder.java | 2 +- .../processeditor/results/ResultDisplay.java | 2 +- .../results/ResultDisplayTools.java | 2 +- .../results/ResultLimitPanel.java | 2 +- .../processeditor/results/ResultOverview.java | 2 +- .../gui/processeditor/results/ResultTab.java | 2 +- .../results/SingleResultOverview.java | 2 +- .../search/OperatorGlobalSearch.java | 53 + .../OperatorGlobalSearchGUIProvider.java | 248 + .../search/OperatorGlobalSearchManager.java | 281 + .../properties/AttributeOrderingDialog.java | 2 +- .../properties/AttributesPropertyDialog.java | 2 +- .../gui/properties/BasicPropertyTable.java | 2 +- .../gui/properties/BetaFeaturesListener.java | 2 +- .../CompatibilityLevelSpinnerModel.java | 2 +- .../ConfigureParameterOptimizationDialog.java | 2 +- ...ureParameterOptimizationDialogCreator.java | 2 +- .../gui/properties/DefaultPropertyTable.java | 2 +- .../gui/properties/DefaultRMCellEditor.java | 2 +- .../properties/EnumerationPropertyDialog.java | 2 +- .../properties/EnumerationPropertyTable.java | 2 +- .../properties/ExpressionPropertyDialog.java | 2 +- .../gui/properties/FilterPropertyDialog.java | 2 +- .../gui/properties/FilterTableModel.java | 2 +- .../properties/FocusedComponentBorder.java | 2 +- .../properties/FunctionDescriptionModel.java | 2 +- .../properties/FunctionDescriptionPanel.java | 2 +- .../gui/properties/FunctionInputPanel.java | 2 +- .../gui/properties/FunctionInputsModel.java | 2 +- .../gui/properties/GenericParameterPanel.java | 2 +- .../gui/properties/ListPropertyDialog.java | 2 +- .../gui/properties/ListPropertyTable.java | 2 +- .../gui/properties/ListPropertyTable2.java | 2 +- .../gui/properties/ListTableModel.java | 2 +- .../gui/properties/MacroSelectionDialog.java | 2 +- .../gui/properties/MatrixPropertyDialog.java | 2 +- .../gui/properties/MatrixPropertyTable.java | 2 +- .../properties/MatrixPropertyTableModel.java | 2 +- .../gui/properties/OperatorPropertyPanel.java | 2 +- .../properties/ParameterChangeListener.java | 2 +- .../gui/properties/PropertyDialog.java | 2 +- .../gui/properties/PropertyPanel.java | 2 +- .../gui/properties/PropertyTable.java | 2 +- .../PropertyTableParameterChangeListener.java | 2 +- .../gui/properties/ProxyParameterSaver.java | 2 +- .../gui/properties/RegexpPropertyDialog.java | 2 +- .../gui/properties/SettingsDialog.java | 2 +- .../gui/properties/SettingsItem.java | 2 +- .../gui/properties/SettingsItems.java | 2 +- .../gui/properties/SettingsPropertyPanel.java | 2 +- .../gui/properties/SettingsTabs.java | 2 +- .../gui/properties/SettingsXmlHandler.java | 2 +- .../gui/properties/TextPropertyDialog.java | 2 +- .../key/DefaultPropertyKeyRenderer.java | 2 +- .../key/DelegationKeyCellEditor.java | 2 +- .../key/ParameterValueKeyCellEditor.java | 2 +- .../key/PropertyKeyCellEditor.java | 2 +- .../AbstractSuggestionBoxValueCellEditor.java | 2 +- .../celleditors/value/AttributeComboBox.java | 2 +- .../value/AttributeFileValueCellEditor.java | 2 +- .../value/AttributeOrderingCellEditor.java | 2 +- .../value/AttributeValueCellEditor.java | 2 +- .../value/AttributesValueCellEditor.java | 2 +- .../value/ColorValueCellEditor.java | 2 +- .../value/ConfigurableValueCellEditor.java | 2 +- .../ConfigurationWizardValueCellEditor.java | 2 +- .../value/CronExpressionCellEditor.java | 2 +- .../value/DateFormatValueCellEditor.java | 2 +- .../value/DateValueCellEditor.java | 2 +- .../value/DefaultPropertyValueCellEditor.java | 2 +- .../value/EnumerationValueCellEditor.java | 2 +- .../value/ExpressionValueCellEditor.java | 2 +- .../value/FileValueCellEditor.java | 2 +- .../value/FilterValueCellEditor.java | 2 +- .../value/InnerOperatorValueCellEditor.java | 2 +- .../value/LinkButtonValueCellEditor.java | 2 +- .../value/ListValueCellEditor.java | 2 +- .../value/MatrixValueCellEditor.java | 2 +- .../celleditors/value/OAuthDialog.java | 2 +- .../value/OAuthValueCellEditor.java | 2 +- .../value/OperatorValueValueCellEditor.java | 2 +- .../value/ParameterTupelCellEditor.java | 2 +- .../value/PreviewValueCellEditor.java | 2 +- .../value/ProcessLocationValueCellEditor.java | 2 +- .../value/PropertyValueCellEditor.java | 2 +- .../value/RegexpValueCellEditor.java | 2 +- .../value/RemoteFileValueCellEditor.java | 2 +- .../RepositoryLocationValueCellEditor.java | 2 +- .../value/SimpleFileValueCellEditor.java | 2 +- .../SimpleSuggestionBoxValueCellEditor.java | 2 +- .../value/TextValueCellEditor.java | 2 +- .../gui/properties/tablepanel/TablePanel.java | 2 +- .../implementations/CellTypeCheckBoxImpl.java | 2 +- .../implementations/CellTypeComboBoxImpl.java | 2 +- .../implementations/CellTypeDateImpl.java | 2 +- .../implementations/CellTypeImplHelper.java | 2 +- .../implementations/CellTypeRegexImpl.java | 2 +- .../CellTypeTextFieldDefaultImpl.java | 2 +- .../tablepanel/cells/interfaces/CellType.java | 2 +- .../cells/interfaces/CellTypeCheckBox.java | 2 +- .../cells/interfaces/CellTypeComboBox.java | 2 +- .../cells/interfaces/CellTypeDate.java | 2 +- .../cells/interfaces/CellTypeDateTime.java | 2 +- .../cells/interfaces/CellTypeLabel.java | 2 +- .../cells/interfaces/CellTypeRegex.java | 2 +- .../interfaces/CellTypeTextFieldDefault.java | 2 +- .../interfaces/CellTypeTextFieldInteger.java | 2 +- .../CellTypeTextFieldNumerical.java | 2 +- .../interfaces/CellTypeTextFieldTime.java | 2 +- .../tablepanel/model/TablePanelModel.java | 2 +- .../AbstractDataTablePlotterRenderer.java | 2 +- .../AbstractDataTableTableRenderer.java | 2 +- .../gui/renderer/AbstractGraphRenderer.java | 2 +- .../gui/renderer/AbstractRenderer.java | 2 +- .../AbstractTableModelTableRenderer.java | 2 +- .../gui/renderer/AnnotationsRenderer.java | 2 +- .../gui/renderer/AverageVectorRenderer.java | 2 +- .../gui/renderer/CollectionRenderer.java | 2 +- .../renderer/DefaultComponentRenderable.java | 2 +- .../renderer/DefaultComponentRenderer.java | 2 +- .../gui/renderer/DefaultReadable.java | 2 +- .../gui/renderer/DefaultTextRenderer.java | 2 +- .../gui/renderer/NonGraphicalRenderer.java | 2 +- .../com/rapidminer/gui/renderer/Renderer.java | 2 +- .../gui/renderer/RendererService.java | 127 +- .../renderer/associations/GSPRenderer.java | 2 +- .../ClusterModelCentroidPlotRenderer.java | 2 +- .../ClusterModelCentroidTableRenderer.java | 2 +- .../ClusterModelDendogrammRenderer.java | 2 +- .../cluster/ClusterModelFolderRenderer.java | 2 +- .../cluster/ClusterModelGraphRenderer.java | 2 +- .../renderer/data/ExampleSetDataRenderer.java | 2 +- .../data/ExampleSetMetaDataRenderer.java | 2 +- .../renderer/data/ExampleSetPlotRenderer.java | 2 +- .../AssociationRulesGraphRenderer.java | 2 +- .../AssociationRulesTableRenderer.java | 2 +- .../FrequentItemSetsTableRenderer.java | 2 +- .../math/NumericalMatrixPairwiseRenderer.java | 2 +- .../math/NumericalMatrixPlotRenderer.java | 2 +- .../math/NumericalMatrixTableRenderer.java | 2 +- .../math/RainflowMatrixPlotRenderer.java | 2 +- .../math/RainflowMatrixTableRenderer.java | 2 +- .../models/DelegationModelRenderer.java | 2 +- .../models/DistributionModelPlotRenderer.java | 2 +- .../DistributionModelTableRenderer.java | 2 +- .../EigenvectorModelEigenvalueRenderer.java | 2 +- .../EigenvectorModelEigenvectorRenderer.java | 2 +- .../EigenvectorModelVariancePlotRenderer.java | 2 +- .../models/HyperModelWeightsRenderer.java | 2 +- .../models/HyperplaneModelRenderer.java | 2 +- .../ImprovedNeuralNetModelRenderer.java | 2 +- .../models/KernelModelPlotRenderer.java | 2 +- .../KernelModelSupportVectorRenderer.java | 2 +- .../models/KernelModelWeightsRenderer.java | 2 +- .../LinearRegressionModelTableRenderer.java | 2 +- ...PolynomialRegressionModelPlotRenderer.java | 2 +- ...olynomialRegressionModelTableRenderer.java | 2 +- .../renderer/models/MetaModelRenderer.java | 2 +- .../gui/renderer/models/RuleSetRenderer.java | 2 +- .../SVDModelCumulativePlotRenderer.java | 2 +- .../models/SVDModelValueRenderer.java | 2 +- .../models/SVDModelVectorRenderer.java | 2 +- .../models/TreeModelGraphRenderer.java | 2 +- .../AnovaCalculatorViewerRenderer.java | 2 +- .../performance/AreaUnderCurveRenderer.java | 2 +- ...naryClassificationPerformanceRenderer.java | 2 +- ...ultiClassificationPerformanceRenderer.java | 2 +- .../PerformanceVectorRenderer.java | 2 +- .../performance/ROCComparisonRenderer.java | 2 +- .../TTestSignificanceTestRenderer.java | 2 +- ...WeightedMultiClassPerformanceRenderer.java | 2 +- .../similarity/SimilarityGraphRenderer.java | 2 +- .../SimilarityHistogramRenderer.java | 2 +- .../SimilarityKDistanceRenderer.java | 2 +- .../similarity/SimilarityTableRenderer.java | 2 +- .../visualization/AnovaMatrixRenderer.java | 2 +- .../visualization/LiftChartRenderer.java | 2 +- .../SOMModelVisualizationRenderer.java | 2 +- .../TransitionGraphRenderer.java | 2 +- .../weights/AttributeWeightsPlotRenderer.java | 2 +- .../AttributeWeightsTableRenderer.java | 2 +- .../com/rapidminer/gui/safemode/SafeMode.java | 2 +- .../gui/safemode/SafeModeDialog.java | 2 +- .../gui/search/GlobalSearchCategoryPanel.java | 348 ++ .../gui/search/GlobalSearchController.java | 259 + .../gui/search/GlobalSearchDialog.java | 515 ++ .../gui/search/GlobalSearchGUIRegistry.java | 116 + .../gui/search/GlobalSearchGUIUtilities.java | 148 + .../gui/search/GlobalSearchPanel.java | 541 ++ .../search/GlobalSearchableGUIProvider.java | 150 + .../gui/search/action/GlobalSearchAction.java | 60 + .../event/GlobalSearchCategoryEvent.java | 66 + .../event/GlobalSearchEventListener.java | 55 + .../event/GlobalSearchInteractionEvent.java | 81 + .../GlobalSearchInteractionListener.java | 41 + .../search/event/GlobalSearchModelEvent.java | 67 + .../gui/search/model/GlobalSearchModel.java | 373 ++ .../gui/search/model/GlobalSearchRow.java | 59 + .../gui/security/CredentialsTableModel.java | 45 +- .../gui/security/PasswordManager.java | 66 +- .../gui/security/UserCredential.java | 26 +- .../com/rapidminer/gui/security/Wallet.java | 191 +- .../com/rapidminer/gui/tools/ArrowButton.java | 2 +- .../gui/tools/AttributeGuiTools.java | 2 +- .../gui/tools/AutoCompletionComboBox.java | 2 +- .../gui/tools/BetaFeaturesIndicator.java | 2 +- .../rapidminer/gui/tools/BrowserPopup.java | 2 +- .../rapidminer/gui/tools/CamelCaseFilter.java | 2 +- .../gui/tools/CamelCaseTypoFilter.java | 2 +- .../gui/tools/CellColorProvider.java | 2 +- .../tools/CellColorProviderAlternating.java | 2 +- .../gui/tools/CellColorProviderScaled.java | 2 +- .../gui/tools/CellColorProviderWhite.java | 2 +- .../gui/tools/CellColorProviderYellow.java | 2 +- .../rapidminer/gui/tools/CharTextField.java | 2 +- .../gui/tools/ColoredJTextPane.java | 2 +- .../gui/tools/ColoredTableCellRenderer.java | 2 +- .../gui/tools/DefaultFrameIconProvider.java | 2 +- .../rapidminer/gui/tools/DockingTools.java | 2 +- .../gui/tools/EditBlockingProgressThread.java | 2 +- .../gui/tools/ExtendedCheckTree.java | 2 +- .../tools/ExtendedCheckTreeCellRenderer.java | 2 +- ...xtendedCheckTreeMouseSelectionManager.java | 2 +- .../ExtendedCheckTreeSelectionModel.java | 2 +- .../gui/tools/ExtendedFixedColumnJTable.java | 2 +- .../gui/tools/ExtendedHTMLEditorKit.java | 2 +- .../gui/tools/ExtendedHTMLJEditorPane.java | 2 +- .../gui/tools/ExtendedJComboBox.java | 2 +- .../gui/tools/ExtendedJFileChooser.java | 2 +- .../rapidminer/gui/tools/ExtendedJList.java | 2 +- .../gui/tools/ExtendedJScrollPane.java | 2 +- .../rapidminer/gui/tools/ExtendedJSlider.java | 2 +- .../gui/tools/ExtendedJSliderToolTips.java | 2 +- .../gui/tools/ExtendedJTabbedPane.java | 2 +- .../rapidminer/gui/tools/ExtendedJTable.java | 2 +- .../ExtendedJTableColumnFitMouseListener.java | 2 +- .../gui/tools/ExtendedJTablePacker.java | 2 +- .../gui/tools/ExtendedJTableSorterModel.java | 2 +- .../gui/tools/ExtendedJTextField.java | 2 +- .../gui/tools/ExtendedJToolBar.java | 2 +- .../gui/tools/ExtendedListCellRenderer.java | 2 +- .../gui/tools/ExtendedListModel.java | 2 +- .../gui/tools/ExtendedStyledDocument.java | 2 +- .../gui/tools/ExtendedTriStateCheckBox.java | 2 +- .../rapidminer/gui/tools/FilterListener.java | 2 +- .../rapidminer/gui/tools/FilterTextField.java | 25 +- .../gui/tools/FilterableListModel.java | 2 +- .../gui/tools/FrameIconProvider.java | 2 +- .../com/rapidminer/gui/tools/HTMLEditor.java | 2 +- .../com/rapidminer/gui/tools/IconSize.java | 8 +- .../com/rapidminer/gui/tools/ImagePanel.java | 2 +- .../rapidminer/gui/tools/ImageTextPanel.java | 2 +- .../com/rapidminer/gui/tools/Ionicon.java | 2 +- .../gui/tools/JDelayedCalculationPanel.java | 2 +- .../gui/tools/JRadioSelectionPanel.java | 2 +- .../com/rapidminer/gui/tools/JavaEditor.java | 2 +- .../rapidminer/gui/tools/LeanFormatter.java | 2 +- .../rapidminer/gui/tools/ListHoverHelper.java | 2 +- .../gui/tools/NotificationPopup.java | 2 +- .../rapidminer/gui/tools/OperatorFilter.java | 2 +- .../rapidminer/gui/tools/OperatorList.java | 2 +- .../gui/tools/OperatorListCellRenderer.java | 19 +- .../gui/tools/ParentButtonModel.java | 2 +- .../gui/tools/ParentButtonPanel.java | 2 +- .../rapidminer/gui/tools/PasswordDialog.java | 2 +- .../rapidminer/gui/tools/PlainTextEditor.java | 2 +- .../rapidminer/gui/tools/PrintingTools.java | 2 +- .../rapidminer/gui/tools/ProcessGUITools.java | 2 +- .../rapidminer/gui/tools/ProgressDisplay.java | 2 +- .../rapidminer/gui/tools/ProgressMonitor.java | 2 +- .../rapidminer/gui/tools/ProgressThread.java | 2 +- .../gui/tools/ProgressThreadDialog.java | 2 +- .../gui/tools/ProgressThreadDisplay.java | 2 +- .../gui/tools/ProgressThreadListener.java | 2 +- .../tools/ProgressThreadStateListener.java | 2 +- .../tools/ProgressThreadStoppedException.java | 2 +- .../com/rapidminer/gui/tools/Registry.java | 2 +- .../rapidminer/gui/tools/RegistryEvent.java | 2 +- .../gui/tools/RegistryListener.java | 2 +- .../gui/tools/RepositoryEntryTextField.java | 2 +- .../gui/tools/RepositoryGuiTools.java | 2 +- .../rapidminer/gui/tools/ResourceAction.java | 63 +- .../gui/tools/ResourceActionAdapter.java | 2 +- .../gui/tools/ResourceActionTransmitter.java | 2 +- .../rapidminer/gui/tools/ResourceDockKey.java | 2 +- .../rapidminer/gui/tools/ResourceLabel.java | 2 +- .../rapidminer/gui/tools/ResourceMenu.java | 2 +- .../gui/tools/ResourceTabbedPane.java | 2 +- .../ResultWarningPreventionRegistry.java | 2 +- .../rapidminer/gui/tools/RowNumberTable.java | 2 +- .../com/rapidminer/gui/tools/SQLEditor.java | 2 +- .../rapidminer/gui/tools/ScaledImageIcon.java | 2 +- .../gui/tools/ScrollableJPopupMenu.java | 2 +- .../tools/SelectionNavigationListener.java | 2 +- .../gui/tools/SimpleFileFilter.java | 2 +- .../rapidminer/gui/tools/SplashScreen.java | 2 +- .../com/rapidminer/gui/tools/StatusBar.java | 2 +- .../com/rapidminer/gui/tools/SwingTools.java | 42 +- .../rapidminer/gui/tools/SystemMonitor.java | 2 +- .../gui/tools/TextFieldWithAction.java | 62 +- .../com/rapidminer/gui/tools/TextPanel.java | 2 +- .../gui/tools/TipOfTheDayProvider.java | 2 +- .../rapidminer/gui/tools/TutorialTools.java | 2 +- .../com/rapidminer/gui/tools/UpdateQueue.java | 2 +- .../rapidminer/gui/tools/VersionNumber.java | 2 +- .../com/rapidminer/gui/tools/ViewToolBar.java | 2 +- .../com/rapidminer/gui/tools/XMLEditor.java | 2 +- .../actions/AddToSortingColumnsAction.java | 2 +- .../actions/EqualColumnWidthsAction.java | 2 +- .../actions/FitAllColumnWidthsAction.java | 2 +- .../tools/actions/FitColumnWidthAction.java | 2 +- .../RestoreOriginalColumnOrderAction.java | 2 +- .../gui/tools/actions/SelectColumnAction.java | 2 +- .../gui/tools/actions/SelectRowAction.java | 2 +- .../actions/SelectionDependentAction.java | 2 +- .../gui/tools/actions/SortByColumnAction.java | 2 +- .../SortColumnsAccordingToNameAction.java | 2 +- .../AutoCompleteComboBoxAddition.java | 2 +- .../gui/tools/bubble/BubbleWindow.java | 2 +- .../gui/tools/bubble/ButtonBubble.java | 2 +- .../tools/bubble/ComponentBubbleWindow.java | 2 +- .../gui/tools/bubble/DockableBubble.java | 2 +- .../gui/tools/bubble/OperatorInfoBubble.java | 2 +- .../bubble/ParameterErrorInfoBubble.java | 2 +- .../gui/tools/bubble/PortInfoBubble.java | 2 +- .../gui/tools/bubble/WindowChoreographer.java | 2 +- .../tools/components/AbstractLinkButton.java | 2 +- .../tools/components/ButtonBarCardPanel.java | 2 +- .../tools/components/ButtonDecotrator.java | 2 +- .../rapidminer/gui/tools/components/Card.java | 2 +- .../tools/components/CardCellRenderer.java | 2 +- .../tools/components/CardSelectionEvent.java | 2 +- .../components/CardSelectionListener.java | 2 +- .../gui/tools/components/ColorIcon.java | 2 +- .../components/ColorSelectionButton.java | 2 +- .../components/ColorSelectionListener.java | 2 +- .../gui/tools/components/DropDownButton.java | 2 +- .../tools/components/DropDownPopupButton.java | 121 +- .../tools/components/ExtendedCardLayout.java | 65 + .../gui/tools/components/FancyButton.java | 2 +- .../gui/tools/components/FancyConstants.java | 2 +- .../tools/components/FancyDropDownButton.java | 2 +- .../components/FixedWidthEditorPane.java | 2 +- .../gui/tools/components/FixedWidthLabel.java | 2 +- .../gui/tools/components/LinkButton.java | 2 +- .../gui/tools/components/LinkLocalButton.java | 2 +- .../tools/components/LinkRemoteButton.java | 2 +- .../components/PlainArrowDropDownButton.java | 2 +- .../components/PrintableComponentCard.java | 2 +- .../gui/tools/components/ResourceCard.java | 2 +- .../components/ToggleDropDownButton.java | 2 +- .../gui/tools/components/ToolTipWindow.java | 2 +- .../components/TransparentGlassPanePanel.java | 2 +- .../components/composite/CompositeButton.java | 18 +- .../composite/CompositeButtonPainter.java | 37 +- .../composite/CompositeMenuToggleButton.java | 39 +- .../composite/CompositeToggleButton.java | 2 +- .../PerspectiveMenuToggleButton.java | 54 +- .../composite/PerspectiveToggleGroup.java | 94 +- .../components/composite/SplitButton.java | 2 +- .../composite/ToggleButtonGroup.java | 2 +- .../gui/tools/dialogs/AboutBox.java | 2 +- .../gui/tools/dialogs/ButtonDialog.java | 2 +- .../gui/tools/dialogs/ConfirmDialog.java | 2 +- .../gui/tools/dialogs/DataImportDialog.java | 2 +- .../DecisionRememberingConfirmDialog.java | 2 +- .../gui/tools/dialogs/ErrorDialog.java | 2 +- .../tools/dialogs/ExtendedErrorDialog.java | 2 +- .../gui/tools/dialogs/InputDialog.java | 2 +- .../gui/tools/dialogs/InputValidator.java | 2 +- .../gui/tools/dialogs/LongMessageDialog.java | 2 +- .../gui/tools/dialogs/MessageDialog.java | 2 +- .../gui/tools/dialogs/MultiConfirmDialog.java | 2 +- .../gui/tools/dialogs/MultiPageDialog.java | 2 +- .../dialogs/RepositoryEntryInputDialog.java | 2 +- .../gui/tools/dialogs/ResultViewDialog.java | 2 +- .../gui/tools/dialogs/SelectionDialog.java | 2 +- .../tools/dialogs/SelectionInputDialog.java | 2 +- .../gui/tools/dialogs/SetParameterDialog.java | 2 +- .../tools/dialogs/wizards/AbstractWizard.java | 2 +- .../gui/tools/dialogs/wizards/WizardStep.java | 2 +- .../AttributeSelectionWizardStep.java | 2 +- .../wizards/dataimport/DataEditor.java | 2 +- .../wizards/dataimport/DataImportWizard.java | 2 +- .../dataimport/DataImportWizardFactory.java | 2 +- .../dataimport/DataImportWizardRegistry.java | 2 +- .../dataimport/FileSelectionWizardStep.java | 2 +- .../dataimport/MetaDataDeclarationEditor.java | 2 +- .../MetaDataDeclerationWizardStep.java | 2 +- ...RepositoryLocationSelectionWizardStep.java | 2 +- .../dataimport/WizardCreationException.java | 2 +- .../wizards/dataimport/csv/CSVFileReader.java | 2 +- .../wizards/dataimport/csv/DataEvaluator.java | 2 +- .../wizards/dataimport/csv/LineReader.java | 2 +- .../excel/AnnotationCellEditor.java | 2 +- .../IOObjectCacheEntryPanel.java | 2 +- .../ioobjectcache/IOObjectCacheViewer.java | 2 +- .../actions/ClearCacheAction.java | 2 +- .../actions/OpenCacheEntryAction.java | 2 +- .../actions/RemoveCacheEntryAction.java | 2 +- .../gui/tools/logging/AbstractLogModel.java | 2 +- .../tools/logging/AbstractPullLogModel.java | 2 +- .../tools/logging/AbstractPushLogModel.java | 2 +- .../gui/tools/logging/LogEntry.java | 2 +- .../gui/tools/logging/LogHandlerModel.java | 2 +- .../gui/tools/logging/LogModel.java | 2 +- .../gui/tools/logging/LogModelRegistry.java | 2 +- .../gui/tools/logging/LogRecordEntry.java | 2 +- .../gui/tools/logging/LogSelectionModel.java | 2 +- .../gui/tools/logging/LogUpdateException.java | 2 +- .../gui/tools/logging/LogViewer.java | 2 +- .../gui/tools/logging/SimpleLogEntry.java | 2 +- .../logging/actions/ClearMessageAction.java | 2 +- .../tools/logging/actions/LogCloseAction.java | 2 +- .../logging/actions/LogRefreshAction.java | 2 +- .../logging/actions/LogSearchAction.java | 2 +- .../logging/actions/SaveLogFileAction.java | 2 +- .../tools/syntax/BatchFileTokenMarker.java | 2 +- .../gui/tools/syntax/CCTokenMarker.java | 2 +- .../gui/tools/syntax/CTokenMarker.java | 2 +- .../gui/tools/syntax/DefaultInputHandler.java | 2 +- .../tools/syntax/ExpressionTokenMaker.java | 2 +- .../gui/tools/syntax/HTMLTokenMarker.java | 2 +- .../gui/tools/syntax/InputHandler.java | 2 +- .../gui/tools/syntax/JEditTextArea.java | 2 +- .../tools/syntax/JavaScriptTokenMarker.java | 2 +- .../gui/tools/syntax/JavaTokenMarker.java | 2 +- .../gui/tools/syntax/KeywordMap.java | 2 +- .../gui/tools/syntax/MakefileTokenMarker.java | 2 +- .../gui/tools/syntax/PHPTokenMarker.java | 2 +- .../gui/tools/syntax/PatchTokenMarker.java | 2 +- .../gui/tools/syntax/PerlTokenMarker.java | 2 +- .../gui/tools/syntax/PropsTokenMarker.java | 2 +- .../gui/tools/syntax/PythonTokenMarker.java | 2 +- .../gui/tools/syntax/SQLTokenMarker.java | 2 +- .../tools/syntax/ShellScriptTokenMarker.java | 2 +- .../gui/tools/syntax/SyntaxDocument.java | 2 +- .../gui/tools/syntax/SyntaxStyle.java | 2 +- .../gui/tools/syntax/SyntaxUtilities.java | 2 +- .../gui/tools/syntax/TSQLTokenMarker.java | 2 +- .../gui/tools/syntax/TeXTokenMarker.java | 2 +- .../gui/tools/syntax/TextAreaDefaults.java | 2 +- .../gui/tools/syntax/TextAreaPainter.java | 2 +- .../gui/tools/syntax/TextUtilities.java | 2 +- .../rapidminer/gui/tools/syntax/Token.java | 2 +- .../gui/tools/syntax/TokenMarker.java | 2 +- .../gui/tools/syntax/XMLTokenMarker.java | 2 +- .../gui/tools/table/EditableHeaderJTable.java | 2 +- .../gui/tools/table/EditableTableHeader.java | 2 +- .../table/EditableTableHeaderColumn.java | 2 +- .../tools/table/EditableTableHeaderUI.java | 2 +- .../gui/viewer/ANOVAMatrixViewer.java | 2 +- .../gui/viewer/ANOVAMatrixViewerTable.java | 2 +- .../viewer/ANOVAMatrixViewerTableModel.java | 2 +- .../gui/viewer/AnovaCalculatorViewer.java | 2 +- .../gui/viewer/AssociationRuleFilter.java | 2 +- .../viewer/AssociationRuleFilterListener.java | 2 +- .../gui/viewer/AssociationRuleTableModel.java | 2 +- .../viewer/AssociationRuleTableViewer.java | 2 +- .../gui/viewer/AverageVectorViewer.java | 2 +- .../gui/viewer/ClusterTreeVisualization.java | 2 +- .../gui/viewer/ConfusionMatrixViewer.java | 2 +- .../viewer/ConfusionMatrixViewerTable.java | 2 +- .../ConfusionMatrixViewerTableModel.java | 2 +- .../gui/viewer/DataTableColumnEditTable.java | 2 +- .../viewer/DataTableColumnEditTableModel.java | 2 +- .../gui/viewer/DataTableViewer.java | 2 +- .../gui/viewer/DataTableViewerTable.java | 2 +- .../gui/viewer/DataTableViewerTableModel.java | 2 +- .../com/rapidminer/gui/viewer/DataViewer.java | 2 +- .../gui/viewer/DataViewerTable.java | 2 +- .../gui/viewer/DataViewerTableModel.java | 2 +- .../gui/viewer/DendrogramPlotter.java | 2 +- .../viewer/FrequentItemSetVisualization.java | 2 +- .../viewer/FrequentItemSetsTableModel.java | 2 +- .../rapidminer/gui/viewer/MetaDataViewer.java | 2 +- .../gui/viewer/MetaDataViewerTable.java | 2 +- .../gui/viewer/MetaDataViewerTableModel.java | 2 +- .../NumericalMatrixViewerTableModel.java | 2 +- .../gui/viewer/PerformanceVectorViewer.java | 2 +- .../gui/viewer/ROCChartPlotter.java | 2 +- .../com/rapidminer/gui/viewer/ROCViewer.java | 2 +- .../gui/viewer/RuleSetTableModel.java | 2 +- .../SimilarityKDistanceVisualization.java | 2 +- .../gui/viewer/SimilarityTable.java | 2 +- .../gui/viewer/SimilarityTableModel.java | 2 +- .../gui/viewer/SimilarityVisualization.java | 2 +- .../CollectionTreeCellRenderer.java | 2 +- .../collection/CollectionTreeElement.java | 2 +- .../collection/CollectionTreeModel.java | 2 +- .../viewer/collection/CollectionViewer.java | 2 +- .../metadata/AttributeStatisticsPanel.java | 2 +- .../MetaDataStatisticsController.java | 2 +- .../metadata/MetaDataStatisticsViewer.java | 2 +- .../metadata/actions/AttributePopupMenu.java | 2 +- .../CopyAllMetaDataToClipboardAction.java | 2 +- .../actions/CopyAttributeNameAction.java | 2 +- .../actions/CopyDateTimeFromValueAction.java | 2 +- .../actions/CopyDateTimeUntilValueAction.java | 2 +- .../actions/CopyNumAvgValueAction.java | 2 +- .../actions/CopyNumDeviationValueAction.java | 2 +- .../actions/CopyNumMaximumValueAction.java | 2 +- .../actions/CopyNumMinimumValueAction.java | 2 +- .../metadata/actions/OpenChartAction.java | 2 +- .../actions/ShowConstructionValueAction.java | 2 +- .../metadata/actions/ShowNomValueAction.java | 2 +- .../metadata/dialogs/NominalValueDialog.java | 2 +- .../event/AttributeStatisticsEvent.java | 2 +- .../AttributeStatisticsEventListener.java | 2 +- .../event/MetaDataStatisticsEvent.java | 2 +- .../MetaDataStatisticsEventListener.java | 2 +- .../AbstractAttributeStatisticsModel.java | 2 +- .../DateTimeAttributeStatisticsModel.java | 2 +- .../model/MetaDataStatisticsModel.java | 2 +- .../NominalAttributeStatisticsModel.java | 2 +- .../model/NominalValueTableModel.java | 2 +- .../NumericalAttributeStatisticsModel.java | 2 +- .../wizards/AbstractConfigurationWizard.java | 2 +- .../AbstractConfigurationWizardCreator.java | 2 +- .../gui/wizards/ConfigurationListener.java | 2 +- .../wizards/ConfigurationWizardCreator.java | 2 +- .../ExampleSourceConfigurationWizard.java | 2 +- ...ConfigurationWizardAttributeTypeTable.java | 2 +- ...ampleSourceConfigurationWizardCreator.java | 2 +- ...pleSourceConfigurationWizardDataTable.java | 2 +- ...urceConfigurationWizardValueTypeTable.java | 2 +- .../gui/wizards/PreviewCreator.java | 2 +- .../gui/wizards/PreviewListener.java | 2 +- src/main/java/com/rapidminer/io/Base64.java | 2 +- .../process/AnnotationProcessXMLFilter.java | 2 +- .../io/process/AutoModelProcessXMLFilter.java | 107 + .../BackgroundImageProcessXMLFilter.java | 2 +- .../io/process/GUIProcessXMLFilter.java | 2 +- .../io/process/ProcessLayoutXMLFilter.java | 2 +- .../io/process/ProcessXMLFilter.java | 2 +- .../io/process/ProcessXMLFilterRegistry.java | 2 +- .../io/process/XMLErrorHandler.java | 2 +- .../rapidminer/io/process/XMLExporter.java | 2 +- .../rapidminer/io/process/XMLImporter.java | 6 +- .../com/rapidminer/io/process/XMLTools.java | 1514 +++--- .../conditions/ParameterEqualsCondition.java | 2 +- .../ParameterUnequalsCondition.java | 2 +- .../conditions/ParseRuleCondition.java | 2 +- .../rules/AbstractConditionedParseRule.java | 2 +- .../rules/AbstractGenericParseRule.java | 2 +- .../io/process/rules/AbstractParseRule.java | 2 +- .../rules/ChangeParameterValueRule.java | 2 +- .../rules/DeleteAfterAutoWireRule.java | 2 +- .../DeleteUnnecessaryOperatorChainRule.java | 2 +- .../rules/ExcelCellAddressParseRule.java | 2 +- .../rules/ExchangeSubprocessesRule.java | 2 +- .../rules/OperatorEnablerRepairRule.java | 2 +- .../io/process/rules/ParseRule.java | 2 +- .../rules/PassthroughShortcutRule.java | 2 +- .../rules/RenamePlotterParametersRule.java | 2 +- .../rules/ReplaceIOMultiplierRule.java | 2 +- .../io/process/rules/ReplaceOperatorRule.java | 2 +- .../process/rules/ReplaceParameterRule.java | 2 +- .../io/process/rules/SetParameterRule.java | 2 +- .../io/process/rules/SetRoleByNameRule.java | 2 +- .../process/rules/SwitchListEntriesRule.java | 2 +- .../io/process/rules/WireAllOperators.java | 2 +- .../com/rapidminer/io/remote/RemoteFile.java | 2 +- .../io/remote/RemoteFileSystemView.java | 2 +- .../AbstractExampleSetProcessing.java | 2 +- .../rapidminer/operator/AbstractIOObject.java | 2 +- .../rapidminer/operator/AbstractModel.java | 2 +- .../com/rapidminer/operator/AddListener.java | 2 +- .../com/rapidminer/operator/Annotations.java | 2 +- .../operator/DataMacroDefinitionOperator.java | 2 +- .../com/rapidminer/operator/DebugMode.java | 2 +- .../operator/DefaultIODescription.java | 2 +- .../rapidminer/operator/DummyOperator.java | 2 +- .../operator/EnabledOperatorView.java | 2 +- .../rapidminer/operator/ExecutionMode.java | 2 +- .../rapidminer/operator/ExecutionUnit.java | 2 +- .../rapidminer/operator/FileEchoOperator.java | 2 +- .../com/rapidminer/operator/FlagUserData.java | 2 +- .../com/rapidminer/operator/GroupedModel.java | 2 +- .../operator/IOConsumeOperator.java | 2 +- .../com/rapidminer/operator/IOContainer.java | 2 +- .../rapidminer/operator/IODescription.java | 2 +- .../com/rapidminer/operator/IOMerger.java | 2 +- .../com/rapidminer/operator/IOMultiplier.java | 2 +- .../operator/IOMultiplyOperator.java | 2 +- .../com/rapidminer/operator/IOObject.java | 2 +- .../operator/IOObjectCollection.java | 2 +- .../operator/IOObjectConverter.java | 2 +- .../com/rapidminer/operator/IOObjectMap.java | 2 +- .../rapidminer/operator/IOObjectMapEvent.java | 2 +- .../operator/IOPublishToAppOperator.java | 2 +- .../operator/IORecallfromAppOperator.java | 2 +- .../operator/IORetrievalOperator.java | 2 +- .../rapidminer/operator/IOSelectOperator.java | 2 +- .../operator/IOStorageOperator.java | 2 +- .../operator/IllegalInputException.java | 2 +- ...llegalNumberOfInnerOperatorsException.java | 2 +- .../rapidminer/operator/InputDescription.java | 2 +- .../rapidminer/operator/ListDescription.java | 2 +- .../operator/MacroConstructionOperator.java | 2 +- .../operator/MacroDefinitionOperator.java | 2 +- .../operator/MailNotSentException.java | 2 +- .../rapidminer/operator/MemoryCleanUp.java | 2 +- .../operator/MissingIOObjectException.java | 2 +- .../java/com/rapidminer/operator/Model.java | 2 +- .../com/rapidminer/operator/ModelApplier.java | 2 +- .../com/rapidminer/operator/ModelGrouper.java | 2 +- .../rapidminer/operator/ModelUngrouper.java | 2 +- .../com/rapidminer/operator/ModelUpdater.java | 2 +- .../com/rapidminer/operator/Operator.java | 2 +- .../operator/OperatorCapability.java | 2 +- .../rapidminer/operator/OperatorChain.java | 2 +- .../operator/OperatorCreationException.java | 2 +- .../operator/OperatorDescription.java | 5 +- .../operator/OperatorException.java | 2 +- .../rapidminer/operator/OperatorProgress.java | 2 +- .../rapidminer/operator/OperatorVersion.java | 2 +- .../rapidminer/operator/PortUserError.java | 6 +- .../operator/ProcessRootOperator.java | 2 +- .../operator/ProcessSetupError.java | 2 +- .../operator/ProcessStoppedException.java | 2 +- .../com/rapidminer/operator/ResultObject.java | 2 +- .../operator/ResultObjectAdapter.java | 2 +- .../operator/ScriptingOperator.java | 2 +- .../operator/SimpleOperatorChain.java | 2 +- .../operator/SimpleProcessSetupError.java | 2 +- .../operator/SimpleResultObject.java | 2 +- .../SingleMacroDefinitionOperator.java | 2 +- .../operator/UnknownParameterInformation.java | 2 +- .../UnsupportedApplicationParameterError.java | 2 +- .../com/rapidminer/operator/UserData.java | 2 +- .../com/rapidminer/operator/UserError.java | 6 +- .../java/com/rapidminer/operator/Value.java | 2 +- .../com/rapidminer/operator/ValueDouble.java | 2 +- .../rapidminer/operator/ValueInterface.java | 2 +- .../com/rapidminer/operator/ValueString.java | 2 +- .../com/rapidminer/operator/ViewModel.java | 2 +- .../WrongNumberOfInnerOperatorsException.java | 2 +- ...xampleSetResourceConsumptionEstimator.java | 2 +- ...xampleSetResourceConsumptionEstimator.java | 2 +- .../annotation/PolynomialFunction.java | 2 +- .../operator/annotation/ResourceConsumer.java | 2 +- .../ResourceConsumptionEstimator.java | 2 +- .../associations/AssociationRulesApplier.java | 2 +- .../operator/clustering/Centroid.java | 9 +- .../clustering/CentroidClusterModel.java | 2 +- .../operator/clustering/Cluster.java | 2 +- .../operator/clustering/ClusterModel.java | 6 +- .../clustering/ClusterModel2ExampleSet.java | 2 +- .../clustering/ClusterModelInterface.java | 2 +- .../clustering/ClusterToPrediction.java | 2 +- .../DendogramHierarchicalClusterModel.java | 2 +- .../clustering/ExtractClusterPrototypes.java | 2 +- .../clustering/FlatFuzzyClusterModel.java | 2 +- .../clustering/FlattenClusterModel.java | 2 +- .../HierarchicalClusterLeafNode.java | 2 +- .../clustering/HierarchicalClusterModel.java | 2 +- .../clustering/HierarchicalClusterNode.java | 2 +- .../clusterer/AbstractClusterer.java | 2 +- .../clusterer/AbstractLinkageMethod.java | 2 +- .../clustering/clusterer/Agglomeration.java | 2 +- .../clusterer/AgglomerativeClustering.java | 2 +- .../clusterer/AverageLinkageMethod.java | 2 +- .../clusterer/CompleteLinkageMethod.java | 2 +- .../operator/clustering/clusterer/DBScan.java | 2 +- .../clustering/clusterer/DistanceMatrix.java | 2 +- .../clusterer/ExampleSet2ClusterModel.java | 2 +- .../clustering/clusterer/FastKMeans.java | 2 +- .../operator/clustering/clusterer/KMeans.java | 4 +- .../clustering/clusterer/KMedoids.java | 2 +- .../clustering/clusterer/KernelKMeans.java | 2 +- .../clusterer/RMAbstractClusterer.java | 2 +- .../clusterer/RandomClustering.java | 2 +- .../clustering/clusterer/SVCExampleSet.java | 2 +- .../clustering/clusterer/SVClustering.java | 2 +- .../clusterer/SVClusteringAlgorithm.java | 2 +- .../clusterer/SingleLinkageMethod.java | 2 +- .../clusterer/TopDownClustering.java | 2 +- .../operator/clustering/clusterer/XMeans.java | 2 +- .../clusterer/soft/EMClusterer.java | 2 +- .../CollectionIterationOperator.java | 2 +- .../collections/CollectionOperator.java | 2 +- .../collections/SelectionOperator.java | 2 +- .../operator/collections/UnfoldOperator.java | 2 +- .../internal/ParallelOperatorChain.java | 2 +- .../condition/AllInnerOperatorCondition.java | 2 +- .../CombinedInnerOperatorCondition.java | 2 +- .../FirstInnerOperatorCondition.java | 2 +- .../condition/InnerOperatorCondition.java | 2 +- .../condition/LastInnerOperatorCondition.java | 2 +- .../SimpleChainInnerOperatorCondition.java | 2 +- .../SpecificInnerOperatorCondition.java | 2 +- .../error/AttributeNotFoundError.java | 2 +- .../error/AttributeWrongTypeError.java | 2 +- .../operator/error/ParameterError.java | 2 +- ...rocessExecutionOperatorExceptionError.java | 2 +- .../error/ProcessExecutionUserErrorError.java | 2 +- .../operator/execution/FlowCleaner.java | 2 +- .../operator/execution/FlowData.java | 2 +- .../operator/execution/ProcessFlowFilter.java | 2 +- .../execution/SimpleUnitExecutionFactory.java | 2 +- .../execution/SimpleUnitExecutor.java | 2 +- .../execution/UnitExecutionFactory.java | 2 +- .../operator/execution/UnitExecutor.java | 2 +- .../features/AbstractFeatureProcessing.java | 2 +- .../features/AttributeWeightsApplier.java | 2 +- .../operator/features/FeatureOperator.java | 2 +- .../operator/features/Individual.java | 2 +- .../operator/features/IndividualOperator.java | 2 +- .../operator/features/KeepBest.java | 2 +- .../operator/features/Population.java | 2 +- .../features/PopulationEvaluator.java | 2 +- .../operator/features/PopulationOperator.java | 2 +- .../operator/features/PopulationPlotter.java | 2 +- .../operator/features/RedundanceRemoval.java | 2 +- .../features/SimplePopulationEvaluator.java | 2 +- .../aggregation/AggregationCrossover.java | 2 +- .../aggregation/AggregationIndividual.java | 2 +- .../aggregation/AggregationMutation.java | 2 +- ...gregationNonDominatedSortingSelection.java | 2 +- .../aggregation/AggregationSelection.java | 2 +- .../AggregationTournamentSelection.java | 2 +- .../EvolutionaryFeatureAggregation.java | 2 +- .../operator/features/construction/AGA.java | 2 +- .../AbstractFeatureConstruction.java | 2 +- .../AbstractGeneratingGeneticAlgorithm.java | 2 +- .../AttributeAggregationOperator.java | 2 +- .../construction/AttributeConstruction.java | 2 +- .../construction/AttributeGenerator.java | 2 +- .../CompleteFeatureGenerationOperator.java | 2 +- .../ConditionedFeatureGeneration.java | 2 +- .../construction/ConstantGeneration.java | 2 +- .../features/construction/DirectedGGA.java | 2 +- .../DirectedGeneratingMutation.java | 2 +- .../EquivalentAttributeRemoval.java | 2 +- .../ExampleSetBasedFeatureOperator.java | 2 +- .../ExampleSetBasedIndividual.java | 2 +- .../ExampleSetBasedIndividualOperator.java | 2 +- .../ExampleSetBasedPopulation.java | 2 +- .../ExampleSetBasedPopulationOperator.java | 2 +- .../ExampleSetBasedSelectionCrossover.java | 2 +- .../ExampleSetBasedSelectionMutation.java | 2 +- .../ExampleSetBasedTournamentSelection.java | 2 +- .../features/construction/FourierGGA.java | 2 +- .../FourierGeneratingMutation.java | 2 +- .../construction/FourierGenerator.java | 2 +- .../GaussFeatureConstructionOperator.java | 2 +- .../GeneratingGeneticAlgorithm.java | 2 +- .../construction/GeneratingMutation.java | 2 +- .../LinearCombinationOperator.java | 2 +- .../ProductGenerationOperator.java | 2 +- .../construction/RemoveUselessAttributes.java | 2 +- .../construction/UnbalancedCrossover.java | 2 +- .../operator/features/construction/YAGGA.java | 2 +- .../features/construction/YAGGA2.java | 2 +- .../selection/AbstractFeatureSelection.java | 2 +- .../selection/AbstractGeneticAlgorithm.java | 2 +- .../selection/AttributeWeightSelection.java | 2 +- .../BackwardAttributeEliminationOperator.java | 2 +- .../selection/BackwardElimination.java | 2 +- .../features/selection/BestSelection.java | 2 +- .../selection/BoltzmannSelection.java | 2 +- .../selection/BruteForceSelection.java | 2 +- .../features/selection/CutSelection.java | 2 +- .../selection/FeatureSelectionOperator.java | 2 +- .../ForwardAttributeSelectionOperator.java | 2 +- .../features/selection/ForwardSelection.java | 2 +- .../selection/ForwardSelectionOperator.java | 2 +- .../features/selection/GeneticAlgorithm.java | 2 +- .../selection/IterativeFeatureAdding.java | 2 +- .../NonDominatedSortingSelection.java | 2 +- .../features/selection/RandomSelection.java | 2 +- .../features/selection/RankSelection.java | 2 +- .../selection/RemoveCorrelatedFeatures.java | 2 +- .../selection/RemoveUselessFeatures.java | 2 +- .../features/selection/RouletteWheel.java | 2 +- .../selection/SaveIntermediateWeights.java | 2 +- .../selection/SelectionCrossover.java | 2 +- .../features/selection/SelectionMutation.java | 2 +- .../StochasticUniversalSampling.java | 2 +- .../selection/SwitchingForwardSelection.java | 2 +- .../selection/TournamentSelection.java | 2 +- .../features/selection/UniformSelection.java | 2 +- .../WeightGuidedSelectionOperator.java | 2 +- .../AbstractEigenvectorModel.java | 2 +- .../AbstractFeatureTransformation.java | 2 +- .../transformation/ComponentVector.java | 2 +- .../ComponentWeightsCreatable.java | 2 +- .../transformation/DimensionalityReducer.java | 2 +- .../DimensionalityReducerModel.java | 2 +- .../features/transformation/Eigenvector.java | 2 +- .../features/transformation/FastICA.java | 2 +- .../features/transformation/FastICAModel.java | 2 +- .../transformation/FourierTransform.java | 2 +- .../operator/features/transformation/GHA.java | 2 +- .../features/transformation/GHAModel.java | 2 +- .../JamaDimensionalityReduction.java | 2 +- .../features/transformation/KernelPCA.java | 2 +- .../transformation/KernelPCAModel.java | 2 +- .../operator/features/transformation/PCA.java | 2 +- .../features/transformation/PCAModel.java | 2 +- .../SOMDimensionalityReduction.java | 2 +- .../SOMDimensionalityReductionModel.java | 2 +- .../features/transformation/SVDModel.java | 2 +- .../features/transformation/SVDReduction.java | 2 +- .../features/transformation/WeightVector.java | 2 +- .../weighting/AbstractEntropyWeighting.java | 2 +- .../features/weighting/AbstractWeighting.java | 2 +- .../AttributeWeights2ExampleSet.java | 2 +- .../features/weighting/BackwardWeighting.java | 2 +- .../weighting/ChiSquaredWeighting.java | 2 +- .../features/weighting/ComponentWeights.java | 2 +- .../CorpusBasedFeatureWeighting.java | 2 +- .../weighting/CorrelationWeighting.java | 2 +- .../weighting/EvolutionaryWeighting.java | 2 +- .../ExampleSet2AttributeWeights.java | 2 +- .../features/weighting/FeatureWeighting.java | 2 +- .../weighting/ForestBasedWeighting.java | 2 +- .../features/weighting/ForwardWeighting.java | 2 +- .../features/weighting/GiniWeighting.java | 2 +- .../weighting/InfoGainRatioWeighting.java | 2 +- .../features/weighting/InfoGainWeighting.java | 2 +- .../InteractiveAttributeWeighting.java | 2 +- .../weighting/NameBasedWeighting.java | 2 +- .../weighting/OneRErrorWeighting.java | 2 +- .../features/weighting/PCAWeighting.java | 2 +- .../features/weighting/PSOWeighting.java | 2 +- .../ProcessLog2AttributeWeights.java | 2 +- .../features/weighting/ReliefWeighting.java | 2 +- .../features/weighting/SVMWeighting.java | 2 +- .../features/weighting/SimpleWeighting.java | 2 +- .../weighting/StandardDeviationWeighting.java | 2 +- .../SymmetricalUncertaintyOperator.java | 2 +- .../features/weighting/VarianceAdaption.java | 2 +- .../features/weighting/WeightingMutation.java | 2 +- .../operator/filesystem/CopyFileOperator.java | 2 +- .../filesystem/CreateDirectoryOperator.java | 2 +- .../filesystem/DeleteFileOperator.java | 2 +- .../operator/filesystem/MoveFileOperator.java | 2 +- .../filesystem/RenameFileOperator.java | 2 +- .../CheckerboardClassificationFunction.java | 2 +- .../ChurnReductionExampleSetGenerator.java | 2 +- .../generator/ClassificationFunction.java | 2 +- .../operator/generator/Cluster.java | 2 +- .../operator/generator/ClusterFunction.java | 2 +- .../generator/ComplicatedFunction.java | 2 +- .../generator/ComplicatedFunction2.java | 2 +- .../DirectMailingExampleSetGenerator.java | 2 +- .../rapidminer/operator/generator/Dot.java | 2 +- .../generator/DrillerOscillationFunction.java | 2 +- .../generator/ExampleSetGenerator.java | 2 +- .../operator/generator/GaussianFunction.java | 2 +- .../generator/GaussianMixtureFunction.java | 2 +- .../GlobalAndLocalPatternsFunction.java | 2 +- .../operator/generator/GridFunction.java | 2 +- .../InteractionClassificationFunction.java | 2 +- .../generator/MassiveDataGenerator.java | 2 +- .../MultiClassificationFunction.java | 2 +- .../generator/MultipleLabelGenerator.java | 2 +- .../generator/NominalExampleSetGenerator.java | 2 +- .../operator/generator/NonLinearFunction.java | 2 +- .../generator/OneThirdClassification.java | 2 +- .../OneVariableNonLinearFunction.java | 2 +- .../PolynomialClassificationFunction.java | 2 +- .../generator/PolynomialFunction.java | 2 +- .../QuadraticClassificationFunction.java | 2 +- .../RandomClassificationFunction.java | 2 +- .../RandomDotsClassificationFunction.java | 2 +- .../operator/generator/RandomFunction.java | 2 +- .../generator/RegressionFunction.java | 2 +- .../generator/RingClusteringFunction.java | 2 +- .../generator/SalesExampleSetGenerator.java | 2 +- ...SimpleNonLinearClassificationFunction.java | 2 +- ...implePolynomialClassificationFunction.java | 2 +- .../generator/SimpleSinusFunction.java | 2 +- .../SimpleSuperpositionFunction.java | 2 +- .../operator/generator/SincFunction.java | 2 +- .../SinusClassificationFunction.java | 2 +- .../generator/SinusFrequencyFunction.java | 2 +- .../operator/generator/SinusFunction.java | 2 +- .../generator/SinusWithTrendFunction.java | 2 +- .../generator/SpiralClusteringFunction.java | 2 +- .../generator/SquarePulseFunction.java | 2 +- .../generator/SumClassificationFunction.java | 2 +- .../operator/generator/SumFunction.java | 2 +- .../operator/generator/TargetFunction.java | 2 +- .../TeamProfitExampleSetGenerator.java | 2 +- ...ransactionClustersExampleSetGenerator.java | 2 +- .../generator/TransactionDatasetFunction.java | 2 +- .../TransfersExampleSetGenerator.java | 2 +- .../generator/TriangularFunction.java | 2 +- .../TwoGaussiansClassificationFunction.java | 2 +- .../UpSellingExampleSetGenerator.java | 2 +- .../UserSpecificationDataGenerator.java | 2 +- .../internal/ProcessEmbeddingOperator.java | 2 +- .../operator/io/AbstractDataReader.java | 2 +- .../operator/io/AbstractExampleSetWriter.java | 2 +- .../operator/io/AbstractExampleSource.java | 2 +- .../operator/io/AbstractModelLoader.java | 2 +- .../operator/io/AbstractReader.java | 2 +- .../operator/io/AbstractStreamWriter.java | 2 +- .../operator/io/AbstractWriter.java | 2 +- .../io/AppendingExampleSetWriter.java | 2 +- .../operator/io/BytewiseExampleSource.java | 2 +- .../operator/io/CSVExampleSetWriter.java | 2 +- .../operator/io/CSVExampleSource.java | 2 +- .../operator/io/ExampleSetWriter.java | 2 +- .../rapidminer/operator/io/ExampleSource.java | 18 +- .../operator/io/ExcelExampleSetWriter.java | 6 +- .../operator/io/IOContainerReader.java | 2 +- .../rapidminer/operator/io/OutputTypes.java | 2 +- .../operator/io/RepositorySource.java | 2 +- .../operator/io/RepositoryStorer.java | 2 +- .../rapidminer/operator/io/ResultWriter.java | 2 +- .../operator/io/SimpleExampleSource.java | 2 +- .../io/SpecialFormatExampleSetWriter.java | 2 +- .../operator/io/URLExampleSource.java | 2 +- .../operator/learner/AbstractLearner.java | 2 +- .../operator/learner/CapabilityCheck.java | 2 +- .../operator/learner/CapabilityProvider.java | 2 +- .../operator/learner/FormulaProvider.java | 2 +- .../rapidminer/operator/learner/Learner.java | 2 +- .../operator/learner/PredictionModel.java | 2 +- .../learner/SimpleBinaryPredictionModel.java | 2 +- .../learner/SimplePredictionModel.java | 2 +- .../learner/UpdateablePredictionModel.java | 2 +- .../learner/associations/AssociationRule.java | 2 +- .../AssociationRuleGenerator.java | 2 +- .../associations/AssociationRules.java | 2 +- .../associations/BooleanAttributeItem.java | 2 +- .../learner/associations/FrequentItemSet.java | 2 +- .../FrequentItemSetAttributeCreator.java | 2 +- .../FrequentItemSetUnificator.java | 2 +- .../associations/FrequentItemSets.java | 2 +- .../associations/FrequentItemSetsToData.java | 2 +- .../operator/learner/associations/Item.java | 2 +- .../learner/associations/PowerSet.java | 2 +- .../associations/fpgrowth/FPGrowth.java | 2 +- .../learner/associations/fpgrowth/FPTree.java | 2 +- .../associations/fpgrowth/FPTreeNode.java | 2 +- .../associations/fpgrowth/FrequencyStack.java | 2 +- .../learner/associations/fpgrowth/Header.java | 2 +- .../fpgrowth/ListFrequencyStack.java | 2 +- .../gsp/CountingInformations.java | 2 +- .../associations/gsp/DataSequence.java | 2 +- .../learner/associations/gsp/GSPOperator.java | 2 +- .../learner/associations/gsp/GSPSet.java | 2 +- .../associations/gsp/HashTreeInnerNode.java | 2 +- .../associations/gsp/HashTreeLeafNode.java | 2 +- .../associations/gsp/HashTreeNode.java | 2 +- .../associations/gsp/HashTreeRootNode.java | 2 +- .../learner/associations/gsp/Item.java | 2 +- .../learner/associations/gsp/Sequence.java | 2 +- .../learner/associations/gsp/Transaction.java | 2 +- .../associations/gsp/TransactionSet.java | 2 +- .../learner/bayes/DiscriminantModel.java | 2 +- .../learner/bayes/DistributionModel.java | 2 +- .../bayes/KernelDistributionModel.java | 2 +- .../learner/bayes/KernelNaiveBayes.java | 2 +- .../bayes/LinearDiscriminantAnalysis.java | 2 +- .../operator/learner/bayes/NaiveBayes.java | 2 +- .../bayes/QuadraticDiscriminantAnalysis.java | 2 +- .../RegularizedDiscriminantAnalysis.java | 19 +- .../bayes/SimpleDistributionModel.java | 2 +- .../learner/functions/FastLargeMargin.java | 2 +- .../learner/functions/FastMarginModel.java | 2 +- .../learner/functions/HyperplaneModel.java | 2 +- .../functions/LinearRegressionModel.java | 2 +- .../learner/functions/LogisticRegression.java | 2 +- .../functions/LogisticRegressionModel.java | 2 +- .../LogisticRegressionOptimization.java | 2 +- .../learner/functions/Perceptron.java | 2 +- .../functions/PolynomialRegression.java | 2 +- .../functions/PolynomialRegressionModel.java | 2 +- .../SeeminglyUnrelatedRegressionModel.java | 2 +- .../SeeminglyUnrelatedRegressionOperator.java | 2 +- .../functions/VectorLinearRegression.java | 2 +- .../functions/VectorRegressionModel.java | 2 +- .../kernel/AbstractKernelBasedLearner.java | 2 +- .../kernel/AbstractMySVMLearner.java | 2 +- .../functions/kernel/AbstractMySVMModel.java | 2 +- .../learner/functions/kernel/GPLearner.java | 2 +- .../learner/functions/kernel/GPModel.java | 2 +- .../functions/kernel/JMySVMLearner.java | 2 +- .../learner/functions/kernel/JMySVMModel.java | 2 +- .../kernel/KernelLogisticRegression.java | 2 +- .../kernel/KernelLogisticRegressionModel.java | 2 +- .../KernelLogisticRegressionOptimization.java | 2 +- .../learner/functions/kernel/KernelModel.java | 2 +- .../functions/kernel/LibSVMLearner.java | 2 +- .../learner/functions/kernel/LibSVMModel.java | 2 +- .../functions/kernel/LinearMySVMLearner.java | 2 +- .../functions/kernel/LinearMySVMModel.java | 2 +- .../functions/kernel/MyKLRLearner.java | 4 +- .../learner/functions/kernel/MyKLRModel.java | 2 +- .../learner/functions/kernel/RVMLearner.java | 2 +- .../learner/functions/kernel/RVMModel.java | 2 +- .../functions/kernel/SupportVector.java | 2 +- .../evosvm/ClassificationEvoOptimization.java | 2 +- .../ClassificationOptimizationFunction.java | 2 +- .../kernel/evosvm/EvoOptimization.java | 2 +- .../functions/kernel/evosvm/EvoSVM.java | 2 +- .../functions/kernel/evosvm/EvoSVMModel.java | 2 +- .../kernel/evosvm/OptimizationFunction.java | 2 +- .../functions/kernel/evosvm/PSOSVM.java | 2 +- .../kernel/evosvm/PSOSVMOptimization.java | 2 +- .../evosvm/RegressionEvoOptimization.java | 2 +- .../RegressionOptimizationFunction.java | 2 +- .../kernel/gaussianprocess/GPBase.java | 2 +- .../kernel/gaussianprocess/Model.java | 2 +- .../kernel/gaussianprocess/Parameter.java | 2 +- .../kernel/gaussianprocess/Problem.java | 2 +- .../kernel/gaussianprocess/Regression.java | 2 +- .../gaussianprocess/RegressionProblem.java | 2 +- .../kernel/hyperhyper/HyperHyper.java | 2 +- .../kernel/hyperhyper/HyperModel.java | 2 +- .../kernel/jmysvm/examples/SVMExample.java | 2 +- .../kernel/jmysvm/examples/SVMExamples.java | 2 +- .../kernel/jmysvm/kernel/Kernel.java | 2 +- .../kernel/jmysvm/kernel/KernelAnova.java | 2 +- .../kernel/jmysvm/kernel/KernelDot.java | 2 +- .../jmysvm/kernel/KernelEpanechnikov.java | 2 +- .../kernel/KernelGaussianCombination.java | 2 +- .../jmysvm/kernel/KernelMultiquadric.java | 2 +- .../kernel/jmysvm/kernel/KernelNeural.java | 2 +- .../jmysvm/kernel/KernelPolynomial.java | 2 +- .../kernel/jmysvm/kernel/KernelRadial.java | 2 +- .../jmysvm/optimizer/QuadraticProblem.java | 2 +- .../jmysvm/optimizer/QuadraticProblemSMO.java | 2 +- .../functions/kernel/jmysvm/svm/SVM.java | 2 +- .../kernel/jmysvm/svm/SVMInterface.java | 2 +- .../kernel/jmysvm/svm/SVMpattern.java | 2 +- .../kernel/jmysvm/svm/SVMregression.java | 2 +- .../functions/kernel/jmysvm/util/Cache.java | 2 +- .../functions/kernel/jmysvm/util/Heap.java | 2 +- .../functions/kernel/jmysvm/util/MaxHeap.java | 2 +- .../functions/kernel/jmysvm/util/MinHeap.java | 2 +- .../functions/kernel/logistic/KLR.java | 2 +- .../kernel/rvm/ClassificationProblem.java | 2 +- .../kernel/rvm/ConstructiveRegression.java | 2 +- .../learner/functions/kernel/rvm/Model.java | 2 +- .../functions/kernel/rvm/Parameter.java | 2 +- .../learner/functions/kernel/rvm/Problem.java | 2 +- .../learner/functions/kernel/rvm/RVMBase.java | 2 +- .../kernel/rvm/RVMClassification.java | 2 +- .../functions/kernel/rvm/RVMRegression.java | 2 +- .../kernel/rvm/RegressionProblem.java | 2 +- .../functions/kernel/rvm/kernel/Kernel.java | 2 +- .../rvm/kernel/KernelBasisFunction.java | 2 +- .../kernel/rvm/kernel/KernelCauchy.java | 2 +- .../kernel/rvm/kernel/KernelEpanechnikov.java | 2 +- .../rvm/kernel/KernelGaussianCombination.java | 2 +- .../kernel/rvm/kernel/KernelLaplace.java | 2 +- .../kernel/rvm/kernel/KernelMultiquadric.java | 2 +- .../kernel/rvm/kernel/KernelPoly.java | 2 +- .../kernel/rvm/kernel/KernelRadial.java | 2 +- .../kernel/rvm/kernel/KernelSigmoid.java | 2 +- .../rvm/util/SECholeskyDecomposition.java | 2 +- .../linear/GreedyLinearRegressionMethod.java | 8 +- .../IterativeTTestLinearRegressionMethod.java | 4 +- .../functions/linear/LinearRegression.java | 4 +- .../linear/LinearRegressionMethod.java | 2 +- .../linear/M5PLinearRegressionMethod.java | 8 +- .../linear/PlainLinearRegressionMethod.java | 2 +- .../linear/TTestLinearRegressionMethod.java | 6 +- .../neuralnet/ActivationFunction.java | 2 +- .../neuralnet/ImprovedNeuralNetLearner.java | 2 +- .../neuralnet/ImprovedNeuralNetModel.java | 2 +- .../ImprovedNeuralNetVisualizer.java | 2 +- .../functions/neuralnet/InnerNode.java | 2 +- .../functions/neuralnet/InputNode.java | 2 +- .../functions/neuralnet/LinearFunction.java | 2 +- .../learner/functions/neuralnet/Node.java | 2 +- .../functions/neuralnet/OutputNode.java | 2 +- .../functions/neuralnet/SigmoidFunction.java | 2 +- .../operator/learner/igss/IGSSResult.java | 2 +- .../operator/learner/igss/IteratingGSS.java | 2 +- .../operator/learner/igss/Result.java | 2 +- .../learner/igss/hypothesis/GSSModel.java | 2 +- .../learner/igss/hypothesis/Hypothesis.java | 2 +- .../learner/igss/hypothesis/Literal.java | 2 +- .../learner/igss/hypothesis/Rule.java | 2 +- .../learner/igss/utility/AbstractUtility.java | 2 +- .../learner/igss/utility/Accuracy.java | 2 +- .../learner/igss/utility/Binomial.java | 2 +- .../learner/igss/utility/Coverage.java | 2 +- .../igss/utility/InstanceAveraging.java | 2 +- .../operator/learner/igss/utility/Linear.java | 2 +- .../learner/igss/utility/Squared.java | 2 +- .../learner/igss/utility/Utility.java | 2 +- .../operator/learner/igss/utility/WRAcc.java | 2 +- .../lazy/AttributeBasedVotingLearner.java | 2 +- .../lazy/AttributeBasedVotingModel.java | 2 +- .../learner/lazy/AttributeDefaultModel.java | 2 +- .../operator/learner/lazy/DefaultLearner.java | 2 +- .../operator/learner/lazy/DefaultModel.java | 2 +- .../learner/lazy/KNNClassificationModel.java | 2 +- .../operator/learner/lazy/KNNLearner.java | 2 +- .../learner/lazy/KNNRegressionModel.java | 2 +- .../learner/local/AtLeastNeighborhood.java | 2 +- .../learner/local/DistanceNeighborhood.java | 2 +- .../local/LocalPolynomialRegressionModel.java | 2 +- .../LocalPolynomialRegressionOperator.java | 2 +- .../local/NearestNeighborNeighborhood.java | 2 +- .../operator/learner/local/Neighborhood.java | 2 +- .../operator/learner/local/Neighborhoods.java | 2 +- .../learner/local/RelativeNeighborhood.java | 2 +- .../learner/meta/AbstractMetaLearner.java | 2 +- .../learner/meta/AbstractStacking.java | 2 +- .../operator/learner/meta/AdaBoost.java | 2 +- .../operator/learner/meta/AdaBoostModel.java | 2 +- .../meta/AdaBoostPerformanceMeasures.java | 2 +- .../learner/meta/AdditiveRegression.java | 2 +- .../learner/meta/AdditiveRegressionModel.java | 2 +- .../operator/learner/meta/Bagging.java | 2 +- .../operator/learner/meta/BaggingModel.java | 2 +- .../learner/meta/BayBoostBaseModelInfo.java | 2 +- .../operator/learner/meta/BayBoostModel.java | 2 +- .../operator/learner/meta/BayBoostStream.java | 2 +- .../learner/meta/BayesianBoosting.java | 2 +- .../meta/Binary2MultiClassLearner.java | 2 +- .../learner/meta/Binary2MultiClassModel.java | 2 +- .../meta/ClassificationByRegression.java | 2 +- .../learner/meta/ConfidenceVoteModel.java | 2 +- .../learner/meta/ContingencyMatrix.java | 2 +- .../meta/CostBasedThresholdLearner.java | 2 +- .../learner/meta/DelegationModel.java | 2 +- .../learner/meta/HierarchicalLearner.java | 2 +- .../learner/meta/HierarchicalModel.java | 2 +- .../meta/HierarchicalMultiClassLearner.java | 2 +- .../meta/HierarchicalMultiClassModel.java | 2 +- .../operator/learner/meta/MetaCost.java | 2 +- .../operator/learner/meta/MetaCostModel.java | 2 +- .../operator/learner/meta/MetaModel.java | 2 +- .../learner/meta/MultiModelByRegression.java | 2 +- .../learner/meta/RelativeRegression.java | 2 +- .../learner/meta/RelativeRegressionModel.java | 2 +- .../operator/learner/meta/SDEnsemble.java | 2 +- .../learner/meta/SDReweightMeasures.java | 2 +- .../learner/meta/SDRulesetInduction.java | 2 +- .../learner/meta/SimpleVoteModel.java | 2 +- .../operator/learner/meta/Stacking.java | 2 +- .../operator/learner/meta/StackingModel.java | 2 +- .../operator/learner/meta/ThresholdModel.java | 2 +- .../learner/meta/TransformedRegression.java | 2 +- .../meta/TransformedRegressionModel.java | 2 +- .../learner/meta/Tree2RuleConverter.java | 2 +- .../operator/learner/meta/Vote.java | 2 +- .../meta/WeightedPerformanceMeasures.java | 2 +- .../learner/rules/AbstractCriterion.java | 2 +- .../learner/rules/AccuracyCriterion.java | 2 +- .../learner/rules/BestRuleInduction.java | 2 +- .../learner/rules/ConjunctiveRuleModel.java | 2 +- .../operator/learner/rules/Criterion.java | 2 +- .../learner/rules/InfoGainCriterion.java | 2 +- .../learner/rules/NumericalSplitter.java | 2 +- .../operator/learner/rules/Rule.java | 2 +- .../operator/learner/rules/RuleLearner.java | 2 +- .../operator/learner/rules/RuleModel.java | 2 +- .../learner/rules/SimpleRuleLearner.java | 2 +- .../learner/rules/SingleRuleLearner.java | 2 +- .../operator/learner/rules/Split.java | 2 +- .../learner/rules/TermDetermination.java | 2 +- .../operator/learner/subgroups/RuleSet.java | 2 +- .../learner/subgroups/SubgroupDiscovery.java | 2 +- .../subgroups/hypothesis/Hypothesis.java | 2 +- .../learner/subgroups/hypothesis/Literal.java | 2 +- .../learner/subgroups/hypothesis/Rule.java | 2 +- .../learner/subgroups/utility/Accuracy.java | 2 +- .../learner/subgroups/utility/Bias.java | 2 +- .../learner/subgroups/utility/Binomial.java | 2 +- .../learner/subgroups/utility/Coverage.java | 2 +- .../learner/subgroups/utility/Lift.java | 2 +- .../learner/subgroups/utility/Odds.java | 2 +- .../learner/subgroups/utility/OddsRatio.java | 2 +- .../learner/subgroups/utility/Precision.java | 2 +- .../learner/subgroups/utility/Squared.java | 2 +- .../subgroups/utility/UtilityFunction.java | 2 +- .../learner/subgroups/utility/WRAcc.java | 2 +- .../tree/AbstractParallelTreeBuilder.java | 2 +- .../tree/AbstractParallelTreeLearner.java | 2 +- .../learner/tree/AbstractSplitCondition.java | 2 +- .../learner/tree/AbstractTreeLearner.java | 2 +- .../learner/tree/AttributePreprocessing.java | 2 +- .../operator/learner/tree/Benefit.java | 2 +- .../learner/tree/BenefitCalculator.java | 2 +- .../operator/learner/tree/CHAIDLearner.java | 2 +- .../learner/tree/ColumnEmptyTermination.java | 2 +- .../learner/tree/ColumnExampleTable.java | 2 +- .../tree/ColumnFrequencyCalculator.java | 2 +- .../tree/ColumnMaxDepthTermination.java | 2 +- .../tree/ColumnMinSizeTermination.java | 2 +- .../ColumnNoAttributeLeftTermination.java | 2 +- .../tree/ColumnNumericalRandomSplitter.java | 2 +- .../learner/tree/ColumnNumericalSplitter.java | 2 +- .../tree/ColumnSingleLabelTermination.java | 2 +- .../tree/ColumnSingleValueTermination.java | 2 +- .../learner/tree/ColumnTerminator.java | 2 +- .../learner/tree/ConcurrentTreeBuilder.java | 2 +- .../tree/ConfigurableRandomForestModel.java | 2 +- .../learner/tree/ContainsSplitCondition.java | 2 +- .../learner/tree/DecisionStumpLearner.java | 2 +- .../learner/tree/DecisionTreeLeafCreator.java | 2 +- .../learner/tree/DecisionTreeLearner.java | 2 +- .../operator/learner/tree/Edge.java | 2 +- .../learner/tree/EmptyTermination.java | 2 +- .../learner/tree/FrequencyCalculator.java | 2 +- .../learner/tree/GreaterSplitCondition.java | 2 +- .../operator/learner/tree/ID3Learner.java | 2 +- .../learner/tree/ID3NumericalLearner.java | 2 +- .../operator/learner/tree/LeafCreator.java | 2 +- .../tree/LessEqualsSplitCondition.java | 2 +- .../learner/tree/MaxDepthTermination.java | 2 +- .../learner/tree/MinSizeTermination.java | 2 +- .../learner/tree/MinimalGainHandler.java | 2 +- .../tree/MultiCriterionDecisionStumps.java | 2 +- .../learner/tree/MultiwayDecisionTree.java | 2 +- .../tree/NoAttributeLeftTermination.java | 2 +- .../learner/tree/NominalSplitCondition.java | 2 +- .../NonParallelBootstrappingTreeBuilder.java | 2 +- .../NonParallelPreprocessingTreeBuilder.java | 2 +- .../learner/tree/NonParallelTreeBuilder.java | 2 +- .../tree/NotContainsSplitCondition.java | 2 +- .../tree/NumericalMissingSplitCondition.java | 2 +- .../learner/tree/NumericalSplitter.java | 2 +- .../learner/tree/ParallelBenefit.java | 2 +- .../tree/ParallelDecisionTreeLeafCreator.java | 6 +- .../learner/tree/PessimisticPruner.java | 2 +- .../operator/learner/tree/Pruner.java | 2 +- .../RandomAttributeSubsetPreprocessing.java | 2 +- .../learner/tree/RandomBenefitCalculator.java | 2 +- .../learner/tree/RandomForestLearner.java | 2 +- .../learner/tree/RandomForestModel.java | 2 +- .../tree/RandomSubsetPreprocessing.java | 2 +- .../learner/tree/RandomTreeLearner.java | 2 +- .../operator/learner/tree/RegressionTree.java | 2 +- .../learner/tree/RegressionTreeModel.java | 2 +- .../learner/tree/RelevanceTreeLearner.java | 2 +- .../learner/tree/SelectionCreator.java | 2 +- .../learner/tree/SingleLabelTermination.java | 2 +- .../operator/learner/tree/SplitCondition.java | 2 +- .../learner/tree/SplitPreprocessing.java | 2 +- .../operator/learner/tree/Terminator.java | 2 +- .../operator/learner/tree/Tree.java | 2 +- .../operator/learner/tree/TreeBuilder.java | 2 +- .../operator/learner/tree/TreeModel.java | 2 +- .../learner/tree/TreePredictionModel.java | 2 +- .../tree/TreebasedPessimisticPruner.java | 2 +- .../criterions/AbstractColumnCriterion.java | 2 +- .../tree/criterions/AbstractCriterion.java | 2 +- .../criterions/AccuracyColumnCriterion.java | 2 +- .../tree/criterions/AccuracyCriterion.java | 2 +- .../tree/criterions/ColumnCriterion.java | 2 +- .../learner/tree/criterions/Criterion.java | 2 +- .../criterions/GainRatioColumnCriterion.java | 2 +- .../tree/criterions/GainRatioCriterion.java | 2 +- .../criterions/GiniIndexColumnCriterion.java | 2 +- .../tree/criterions/GiniIndexCriterion.java | 2 +- .../criterions/InfoGainColumnCriterion.java | 2 +- .../tree/criterions/InfoGainCriterion.java | 2 +- .../LeastSquareColumnCriterion.java | 2 +- .../tree/criterions/WeightDistribution.java | 2 +- .../libraries/AbstractOperatorLibrary.java | 2 +- .../libraries/LibraryOperatorDescription.java | 2 +- .../operator/libraries/OperatorLibrary.java | 2 +- .../libraries/OperatorLibraryDocBundle.java | 2 +- .../operator/macros/UnsetMacroOperator.java | 2 +- .../operator/meta/AbsoluteSplitChain.java | 2 +- .../operator/meta/AbstractFileIterator.java | 2 +- .../meta/AbstractIteratingOperatorChain.java | 2 +- .../meta/AbstractRepositoryIterator.java | 2 +- .../operator/meta/AbstractSplitChain.java | 2 +- .../operator/meta/AverageBuilder.java | 2 +- .../operator/meta/BatchProcessing.java | 2 +- .../operator/meta/ClusterIterator.java | 2 +- .../meta/ESParameterOptimization.java | 2 +- ...utionaryParameterOptimizationOperator.java | 2 +- .../operator/meta/ExampleIterator.java | 2 +- .../operator/meta/ExampleSetIterator.java | 2 +- .../operator/meta/ExceptionHandling.java | 2 +- .../operator/meta/FeatureIterator.java | 2 +- .../operator/meta/FeatureSubsetIteration.java | 2 +- .../operator/meta/FileIterator.java | 2 +- ...idSearchParameterOptimizationOperator.java | 2 +- .../operator/meta/IteratingOperatorChain.java | 2 +- .../operator/meta/LearningCurveOperator.java | 2 +- .../operator/meta/MultipleLabelIterator.java | 2 +- .../operator/meta/OperatorEnabler.java | 2 +- .../operator/meta/OperatorSelector.java | 4 +- .../operator/meta/ParameterCloner.java | 2 +- .../operator/meta/ParameterConfigurator.java | 2 +- .../meta/ParameterIteratingOperatorChain.java | 52 +- .../operator/meta/ParameterIteration.java | 2 +- .../meta/ParameterOptimizationOperator.java | 2 +- .../operator/meta/ParameterSet.java | 24 +- .../operator/meta/ParameterSetter.java | 2 +- .../operator/meta/ParameterValue.java | 2 +- .../meta/PartialExampleSetLearner.java | 2 +- ...uadraticParameterOptimizationOperator.java | 2 +- .../meta/RandomOptimizationChain.java | 2 +- .../operator/meta/RatioSplitChain.java | 2 +- .../meta/RepeatUntilOperatorChain.java | 2 +- .../operator/meta/RepositoryIterator.java | 2 +- .../operator/meta/ThrowExceptionOperator.java | 2 +- .../operator/meta/ValueIteration.java | 2 +- .../operator/meta/ValueSubgroupIteration.java | 2 +- .../operator/meta/XVPrediction.java | 2 +- .../operator/meta/ZippedFileIterator.java | 2 +- .../branch/AttributeAvailableCondition.java | 2 +- .../meta/branch/DataValueCondition.java | 2 +- .../meta/branch/ExpressionCondition.java | 2 +- .../meta/branch/FileExistsCondition.java | 2 +- .../meta/branch/InputExistsCondition.java | 2 +- .../meta/branch/MacroDefinedCondition.java | 2 +- .../meta/branch/MaxFitnessCondition.java | 2 +- .../MaxNumberOfAttributesCondition.java | 2 +- .../branch/MaxNumberOfExamplesCondition.java | 2 +- .../branch/MaxPerformanceValueCondition.java | 2 +- .../meta/branch/MinFitnessCondition.java | 2 +- .../MinNumberOfAttributesCondition.java | 2 +- .../branch/MinNumberOfExamplesCondition.java | 2 +- .../branch/MinPerformanceValueCondition.java | 2 +- .../operator/meta/branch/ProcessBranch.java | 6 +- .../meta/branch/ProcessBranchCondition.java | 2 +- .../nio/AbstractDataImportWizard.java | 2 +- .../operator/nio/AnnotationCellEditor.java | 2 +- .../nio/AnnotationDeclarationWizardStep.java | 2 +- .../operator/nio/AnnotationTableModel.java | 2 +- .../operator/nio/CSVExampleSource.java | 2 +- ...ampleSourceConfigurationWizardCreator.java | 2 +- .../nio/CSVFileSelectionWizardStep.java | 2 +- .../operator/nio/CSVImportWizard.java | 2 +- .../nio/CSVSyntaxConfigurationWizardStep.java | 2 +- .../operator/nio/ErrorTableModel.java | 2 +- .../operator/nio/ExcelExampleSource.java | 45 +- ...ampleSourceConfigurationWizardCreator.java | 2 +- .../nio/ExcelFileSelectionWizardStep.java | 2 +- .../nio/ExcelFormatExampleSource.java | 2 +- .../operator/nio/ExcelImportWizard.java | 2 +- .../nio/ExcelSheetSelectionWizardStep.java | 5 +- .../operator/nio/ExcelSheetTableModel.java | 2 +- .../operator/nio/ExcelWorkbookPane.java | 4 +- .../operator/nio/ImportWizardUtils.java | 2 +- .../operator/nio/LoadingContentPane.java | 2 +- .../nio/MetaDataDeclarationWizardStep.java | 2 +- .../nio/MetaDataTableHeaderCellEditor.java | 2 +- .../operator/nio/MetaDataValidator.java | 2 +- .../operator/nio/RowFilteringTableModel.java | 2 +- .../operator/nio/StoreDataWizardStep.java | 2 +- .../operator/nio/file/BufferedFileObject.java | 2 +- .../nio/file/FileInputPortHandler.java | 2 +- .../operator/nio/file/FileObject.java | 2 +- .../nio/file/FileOutputPortHandler.java | 2 +- .../operator/nio/file/LoadFileOperator.java | 2 +- .../nio/file/RepositoryBlobObject.java | 2 +- .../operator/nio/file/SimpleFileObject.java | 2 +- .../operator/nio/file/WriteFileOperator.java | 2 +- .../operator/nio/file/ZipEntryObject.java | 2 +- .../compression/AddEntryToArchiveFile.java | 2 +- .../file/compression/ArchiveFileObject.java | 2 +- .../CreateArchiveFileOperator.java | 2 +- .../nio/file/compression/ZipFileObject.java | 2 +- .../model/AbstractDataResultSetReader.java | 25 +- .../operator/nio/model/CSVResultSet.java | 2 +- .../nio/model/CSVResultSetConfiguration.java | 2 +- .../operator/nio/model/ColumnMetaData.java | 2 +- .../operator/nio/model/DataResultSet.java | 2 +- .../nio/model/DataResultSetFactory.java | 2 +- ...DataResultSetTranslationConfiguration.java | 7 +- .../nio/model/DataResultSetTranslator.java | 2 +- .../nio/model/DateFormatProvider.java | 2 +- .../operator/nio/model/DefaultPreview.java | 2 +- .../nio/model/Excel2007ResultSet.java | 6 +- .../operator/nio/model/ExcelResultSet.java | 6 +- .../model/ExcelResultSetConfiguration.java | 1362 ++--- .../nio/model/ExcelSheetSelection.java | 176 + .../operator/nio/model/ParseException.java | 2 +- .../operator/nio/model/ParsingError.java | 2 +- .../operator/nio/model/WizardState.java | 2 +- .../model/xlsx/AbstractXlsxSAXHandler.java | 2 +- .../operator/nio/model/xlsx/XlsxCellType.java | 2 +- .../model/xlsx/XlsxNumberFormatParser.java | 2 +- .../nio/model/xlsx/XlsxNumberFormats.java | 2 +- .../nio/model/xlsx/XlsxResultSet.java | 58 +- .../model/xlsx/XlsxSharedStringsParser.java | 2 +- .../model/xlsx/XlsxSheetContentParser.java | 2 +- .../nio/model/xlsx/XlsxSheetMetaData.java | 2 +- .../model/xlsx/XlsxSheetMetaDataParser.java | 2 +- .../nio/model/xlsx/XlsxSheetTableModel.java | 25 +- .../nio/model/xlsx/XlsxUtilities.java | 2 +- .../nio/model/xlsx/XlsxWorkbookParser.java | 2 +- .../xlsx/XlsxWorkbookRelationParser.java | 2 +- .../operator/performance/AbsoluteError.java | 2 +- .../AbstractExampleSetEvaluator.java | 2 +- .../AbstractPerformanceEvaluator.java | 2 +- .../operator/performance/AreaUnderCurve.java | 2 +- .../performance/AttributeCounter.java | 2 +- .../BinaryClassificationPerformance.java | 2 +- ...nalClassificationPerformanceEvaluator.java | 2 +- .../performance/ClassWeightedPerformance.java | 2 +- .../performance/CorrelationCriterion.java | 2 +- .../operator/performance/CrossEntropy.java | 2 +- .../performance/Data2Performance.java | 2 +- .../performance/EstimatedPerformance.java | 2 +- .../performance/LenientRelativeError.java | 2 +- .../operator/performance/LogisticLoss.java | 2 +- .../operator/performance/MDLCriterion.java | 2 +- .../operator/performance/Margin.java | 2 +- .../performance/MeasuredPerformance.java | 2 +- .../operator/performance/MinMaxCriterion.java | 2 +- .../operator/performance/MinMaxWrapper.java | 2 +- .../MultiClassificationPerformance.java | 2 +- .../performance/NormalizedAbsoluteError.java | 2 +- ...meterizedMeasuredPerformanceCriterion.java | 2 +- .../performance/PerformanceComparator.java | 2 +- .../performance/PerformanceCriterion.java | 2 +- .../performance/PerformanceEvaluator.java | 2 +- .../performance/PerformanceVector.java | 2 +- .../PerformanceVectorToExampleSet.java | 2 +- ...nalClassificationPerformanceEvaluator.java | 2 +- .../performance/PredictionAverage.java | 2 +- .../operator/performance/RankCorrelation.java | 2 +- .../operator/performance/RankStatistics.java | 2 +- .../RegressionPerformanceEvaluator.java | 2 +- .../operator/performance/RelativeError.java | 2 +- .../performance/RootMeanSquaredError.java | 2 +- .../performance/RootRelativeSquaredError.java | 2 +- .../SimpleClassificationError.java | 2 +- .../operator/performance/SimpleCriterion.java | 2 +- .../SimplePerformanceEvaluator.java | 2 +- .../operator/performance/SoftMarginLoss.java | 2 +- .../SquaredCorrelationCriterion.java | 2 +- .../operator/performance/SquaredError.java | 2 +- .../performance/StrictRelativeError.java | 2 +- .../performance/SupportVectorCounter.java | 2 +- .../UserBasedPerformanceEvaluator.java | 2 +- .../WeightedMultiClassPerformance.java | 2 +- .../WeightedPerformanceCreator.java | 2 +- .../cost/ClassificationCostCriterion.java | 2 +- .../performance/cost/CostEvaluator.java | 4 +- .../performance/cost/RankingCriterion.java | 2 +- .../performance/cost/RankingEvaluator.java | 4 +- ...CollectingOrIteratingPortPairExtender.java | 2 +- .../ports/CollectingPortPairExtender.java | 2 +- .../operator/ports/DummyPortPairExtender.java | 2 +- .../ports/IncompatibleMDClassException.java | 2 +- .../rapidminer/operator/ports/InputPort.java | 2 +- .../operator/ports/InputPortExtender.java | 2 +- .../rapidminer/operator/ports/InputPorts.java | 2 +- .../ports/MetaDataChangeListener.java | 2 +- .../ports/MultiInputPortPairExtender.java | 2 +- .../ports/MultiOutputPortPairExtender.java | 2 +- .../operator/ports/MultiPortPairExtender.java | 2 +- .../operator/ports/Multiplicity.java | 2 +- .../OrderPreservingPortPairExtender.java | 2 +- .../rapidminer/operator/ports/OutputPort.java | 2 +- .../operator/ports/OutputPortExtender.java | 2 +- .../operator/ports/OutputPorts.java | 2 +- .../com/rapidminer/operator/ports/Port.java | 2 +- .../operator/ports/PortException.java | 2 +- .../operator/ports/PortExtender.java | 2 +- .../rapidminer/operator/ports/PortOwner.java | 2 +- .../operator/ports/PortPairExtender.java | 2 +- .../com/rapidminer/operator/ports/Ports.java | 2 +- .../operator/ports/ProcessingStep.java | 2 +- .../operator/ports/SinglePortExtender.java | 2 +- .../ports/impl/AbstractInputPort.java | 2 +- .../ports/impl/AbstractOutputPort.java | 2 +- .../operator/ports/impl/AbstractPort.java | 2 +- .../operator/ports/impl/AbstractPorts.java | 2 +- .../impl/CannotConnectPortException.java | 2 +- .../operator/ports/impl/InputPortImpl.java | 2 +- .../operator/ports/impl/InputPortsImpl.java | 2 +- .../operator/ports/impl/OutputPortImpl.java | 2 +- .../operator/ports/impl/OutputPortsImpl.java | 2 +- .../ports/metadata/AbstractPrecondition.java | 2 +- ...ributeAddingExampleSetPassThroughRule.java | 2 +- .../ports/metadata/AttributeMetaData.java | 2 +- .../AttributeParameterPrecondition.java | 2 +- .../metadata/AttributeSetPrecondition.java | 2 +- .../AttributeSubsetPassThroughRule.java | 2 +- .../metadata/CapabilityPrecondition.java | 2 +- .../ports/metadata/CollectionMetaData.java | 2 +- .../metadata/CollectionPrecondition.java | 2 +- .../ports/metadata/CompatibilityLevel.java | 2 +- .../metadata/DistanceMeasurePrecondition.java | 2 +- .../ports/metadata/DummyMetaData.java | 2 +- .../ExampleSetContainsSeriesPrecondition.java | 2 +- .../ports/metadata/ExampleSetMetaData.java | 2 +- .../metadata/ExampleSetPassThroughRule.java | 2 +- .../metadata/ExampleSetPrecondition.java | 7 +- .../metadata/ExampleSetSizePrecondition.java | 2 +- .../ports/metadata/ExampleSetUnionRule.java | 2 +- .../metadata/FlatteningPassThroughRule.java | 2 +- .../GenerateModelTransformationRule.java | 2 +- .../metadata/GenerateNewExampleSetMDRule.java | 2 +- .../ports/metadata/GenerateNewMDRule.java | 2 +- ...ratePredictionModelTransformationRule.java | 2 +- .../metadata/InputMissingMetaDataError.java | 2 +- .../ports/metadata/LearnerPrecondition.java | 2 +- .../operator/ports/metadata/MDInteger.java | 2 +- .../operator/ports/metadata/MDNumber.java | 2 +- .../operator/ports/metadata/MDReal.java | 2 +- .../ports/metadata/MDTransformationRule.java | 2 +- .../ports/metadata/MDTransformer.java | 2 +- .../metadata/ManyToManyPassThroughRule.java | 2 +- .../metadata/ManyToOnePassThroughRule.java | 2 +- .../operator/ports/metadata/MetaData.java | 2 +- .../ports/metadata/MetaDataError.java | 2 +- .../ports/metadata/MetaDataFactory.java | 2 +- .../operator/ports/metadata/MetaDataInfo.java | 2 +- .../metadata/MetaDataUnderspecifiedError.java | 2 +- .../ports/metadata/ModelApplicationRule.java | 2 +- .../ports/metadata/ModelMetaData.java | 2 +- .../metadata/OneToManyPassThroughRule.java | 2 +- .../ports/metadata/OperatorLoopError.java | 2 +- .../ParameterConditionedPrecondition.java | 2 +- .../metadata/PassThroughOrGenerateRule.java | 2 +- .../PassThroughOrGenerateRuleCondition.java | 2 +- .../ports/metadata/PassThroughRule.java | 2 +- .../operator/ports/metadata/Precondition.java | 2 +- .../metadata/PredictionModelMetaData.java | 2 +- .../operator/ports/metadata/SetRelation.java | 2 +- .../ports/metadata/SimpleMetaDataError.java | 2 +- .../ports/metadata/SimplePrecondition.java | 2 +- .../metadata/SubprocessTransformRule.java | 2 +- .../ports/quickfix/AbstractQuickFix.java | 2 +- .../AddCompatibleOperatorQuickFix.java | 2 +- .../quickfix/AttributeSelectionQuickFix.java | 2 +- .../quickfix/CategorySelectionQuickFix.java | 2 +- .../quickfix/ChangeAttributeRoleQuickFix.java | 2 +- .../ports/quickfix/ConnectToQuickFix.java | 2 +- .../ports/quickfix/DictionaryQuickFix.java | 2 +- .../ports/quickfix/DisconnectQuickFix.java | 2 +- .../quickfix/OperatorInsertionQuickFix.java | 2 +- .../quickfix/ParameterSettingQuickFix.java | 2 +- .../operator/ports/quickfix/QuickFix.java | 2 +- .../RelativizeRepositoryLocationQuickfix.java | 2 +- .../GeneratePredictionOperator.java | 2 +- .../GeneratePredictionRankingOperator.java | 2 +- .../postprocessing/PlattParameters.java | 2 +- .../operator/postprocessing/PlattScaling.java | 2 +- .../postprocessing/PlattScalingModel.java | 2 +- .../postprocessing/RecallChooser.java | 2 +- ...pleUncertainPredictionsTransformation.java | 2 +- .../operator/postprocessing/Threshold.java | 2 +- .../postprocessing/ThresholdApplier.java | 2 +- .../postprocessing/ThresholdCreator.java | 2 +- .../postprocessing/ThresholdFinder.java | 2 +- .../preprocessing/AbstractDataProcessing.java | 2 +- .../AbstractValueProcessing.java | 2 +- .../AttributeSubsetPreprocessing.java | 2 +- .../preprocessing/ExampleSetTranspose.java | 2 +- .../preprocessing/GroupByOperator.java | 2 +- .../preprocessing/GuessValueTypes.java | 2 +- .../operator/preprocessing/IdTagging.java | 2 +- .../MaterializeDataInMemory.java | 2 +- .../operator/preprocessing/NoiseModel.java | 2 +- .../operator/preprocessing/NoiseOperator.java | 2 +- .../preprocessing/PreprocessingModel.java | 2 +- .../preprocessing/PreprocessingOperator.java | 2 +- .../RemoveUnusedNominalValuesModel.java | 2 +- .../RemoveUnusedNominalValuesOperator.java | 2 +- .../preprocessing/UseRowAsAttributeNames.java | 2 +- .../AbsoluteDiscretization.java | 2 +- .../AbstractDiscretizationOperator.java | 2 +- .../discretization/BinDiscretization.java | 2 +- .../discretization/DiscretizationModel.java | 2 +- .../FrequencyDiscretization.java | 2 +- .../MinMaxBinDiscretization.java | 2 +- .../MinimalEntropyDiscretization.java | 10 +- .../UserBasedDiscretization.java | 2 +- .../filter/AbsoluteValueFilter.java | 2 +- .../filter/AbstractDateDataProcessing.java | 2 +- .../AbstractFilteredDataProcessing.java | 2 +- .../preprocessing/filter/AddNominalValue.java | 4 +- .../preprocessing/filter/AttributeAdd.java | 2 +- .../preprocessing/filter/AttributeCopy.java | 2 +- .../preprocessing/filter/AttributeMerge.java | 2 +- .../filter/AttributeValueMapper.java | 2 +- .../filter/AttributeValueReplace.java | 2 +- .../filter/AttributeValueSplit.java | 2 +- .../filter/AttributeValueSubstring.java | 2 +- .../filter/AttributeValueTrim.java | 2 +- .../filter/ChangeAttributeName.java | 2 +- .../filter/ChangeAttributeNames2Generic.java | 2 +- .../filter/ChangeAttributeNamesReplace.java | 2 +- .../filter/ChangeAttributeRole.java | 2 +- .../filter/Construction2Names.java | 2 +- .../preprocessing/filter/Date2Nominal.java | 2 +- .../preprocessing/filter/Date2Numerical.java | 2 +- .../preprocessing/filter/DateAdjust.java | 2 +- .../filter/DeclareMissingValueOperator.java | 2 +- .../preprocessing/filter/Dictionary.java | 2 +- .../preprocessing/filter/ExampleFilter.java | 2 +- .../filter/ExampleRangeFilter.java | 2 +- .../filter/ExampleSetToDictionary.java | 2 +- .../filter/ExchangeAttributeRoles.java | 2 +- .../filter/FeatureBlockTypeFilter.java | 2 +- .../preprocessing/filter/FeatureFilter.java | 2 +- .../filter/FeatureNameFilter.java | 2 +- .../filter/FeatureRangeRemoval.java | 2 +- .../filter/FeatureValueTypeFilter.java | 2 +- .../preprocessing/filter/FillDataGaps.java | 2 +- .../filter/InfiniteValueReplenishment.java | 2 +- .../filter/InternalBinominalRemapping.java | 2 +- .../filter/MergeNominalValues.java | 2 +- .../filter/MissingValueImputation.java | 2 +- .../filter/MissingValueReplenishment.java | 20 +- .../filter/MissingValueReplenishmentView.java | 2 +- .../preprocessing/filter/Nominal2Date.java | 2 +- .../preprocessing/filter/Nominal2String.java | 2 +- .../filter/NominalNumbers2Numerical.java | 2 +- .../filter/NominalToBinominal.java | 2 +- .../filter/NominalToBinominalModel.java | 2 +- .../filter/NominalToNumeric.java | 2 +- .../filter/NominalToNumericModel.java | 2 +- .../filter/NonDominatedSorting.java | 2 +- .../filter/NumericToBinominal.java | 2 +- .../filter/NumericToFormattedNominal.java | 2 +- .../filter/NumericToNominal.java | 2 +- .../filter/NumericToPolynominal.java | 2 +- .../preprocessing/filter/Numerical2Date.java | 2 +- .../preprocessing/filter/Numerical2Real.java | 2 +- .../filter/PermutationOperator.java | 2 +- .../preprocessing/filter/Real2Integer.java | 2 +- .../filter/RemoveDuplicates.java | 2 +- .../preprocessing/filter/SetData.java | 2 +- .../preprocessing/filter/Sorting.java | 2 +- .../preprocessing/filter/String2Nominal.java | 2 +- .../preprocessing/filter/TFIDFFilter.java | 2 +- .../filter/ValueReplenishment.java | 2 +- .../filter/ValueReplenishmentModel.java | 2 +- .../AbstractAttributeFilterCondition.java | 2 +- .../filter/attributes/AttributeFilter.java | 2 +- .../attributes/AttributeFilterCondition.java | 2 +- .../attributes/AttributeOrderingOperator.java | 2 +- .../attributes/BlockTypeAttributeFilter.java | 2 +- .../attributes/DateAttributeFilter.java | 2 +- .../MissingValuesAttributeFilter.java | 2 +- .../NoMissingValuesAttributeFilter.java | 2 +- .../attributes/NominalAttributeFilter.java | 2 +- .../NumericValueAttributeFilter.java | 2 +- .../attributes/NumericalAttributeFilter.java | 2 +- .../attributes/RegexpAttributeFilter.java | 2 +- .../attributes/SingleAttributeFilter.java | 2 +- .../attributes/SubsetAttributeFilter.java | 2 +- .../TransparentAttributeFilter.java | 2 +- .../attributes/ValueTypeAttributeFilter.java | 2 +- .../join/AbstractExampleSetJoin.java | 18 +- .../join/ExampleSetCartesian.java | 2 +- .../join/ExampleSetIntersect.java | 2 +- .../preprocessing/join/ExampleSetJoin.java | 128 +- .../preprocessing/join/ExampleSetMerge.java | 6 +- .../preprocessing/join/ExampleSetMinus.java | 2 +- .../join/ExampleSetSuperset.java | 2 +- .../preprocessing/join/ExampleSetUnion.java | 2 +- .../AbstractNormalizationMethod.java | 2 +- .../AbstractNormalizationModel.java | 2 +- .../normalization/DenormalizationModel.java | 2 +- .../DenormalizationOperator.java | 2 +- .../normalization/IQRNormalizationMethod.java | 2 +- .../normalization/IQRNormalizationModel.java | 2 +- .../MinMaxNormalizationModel.java | 2 +- .../normalization/Normalization.java | 2 +- .../normalization/NormalizationMethod.java | 2 +- .../ProportionNormalizationMethod.java | 2 +- .../ProportionNormalizationModel.java | 2 +- .../RangeNormalizationMethod.java | 2 +- .../normalization/ZTransformationModel.java | 2 +- .../ZTransformationNormalizationMethod.java | 2 +- .../outlier/AbstractOutlierDetection.java | 2 +- .../preprocessing/outlier/COFKnn.java | 2 +- .../preprocessing/outlier/COFObject.java | 2 +- .../outlier/DBOutlierOperator.java | 2 +- .../outlier/DKNOutlierOperator.java | 2 +- .../preprocessing/outlier/EcodbOperator.java | 8 +- .../outlier/KdistanceContainer.java | 2 +- .../outlier/LOFOutlierOperator.java | 2 +- .../preprocessing/outlier/SearchObject.java | 2 +- .../preprocessing/outlier/SearchSpace.java | 2 +- .../sampling/AbsoluteSampling.java | 2 +- .../sampling/AbsoluteStratifiedSampling.java | 2 +- .../sampling/AbstractBootstrapping.java | 2 +- .../sampling/AbstractSamplingOperator.java | 2 +- .../sampling/AbstractStratifiedSampling.java | 2 +- .../preprocessing/sampling/Bootstrapping.java | 2 +- .../sampling/BootstrappingOperator.java | 2 +- .../sampling/KennardStoneSampling.java | 2 +- .../sampling/ModelBasedSampling.java | 2 +- .../sampling/PartitionOperator.java | 2 +- .../sampling/RatioStratifiedSampling.java | 2 +- .../sampling/SamplingOperator.java | 2 +- .../sampling/StratifiedSamplingOperator.java | 2 +- .../sampling/WeightedBootstrapping.java | 2 +- .../AbsoluteSamplingSequenceGenerator.java | 2 +- .../ProbabilitySamplingSequenceGenerator.java | 2 +- .../RelativeSamplingSequenceGenerator.java | 2 +- .../sequences/SamplingSequenceGenerator.java | 2 +- .../transformation/AggregationOperator.java | 2 +- .../Attribute2ExamplePivoting.java | 2 +- .../Example2AttributePivoting.java | 2 +- .../ExampleSetTransformationOperator.java | 2 +- .../transformation/GroupedANOVAOperator.java | 2 +- ...AbstractCountRatioAggregationFunction.java | 2 +- .../aggregation/AggregationFunction.java | 2 +- .../AggregationFunctionMetaDataProvider.java | 2 +- .../aggregation/AggregationOperator.java | 2 +- .../aggregation/Aggregator.java | 2 +- .../ConcatAggregationFunction.java | 2 +- .../aggregation/ConcatAggregator.java | 2 +- .../aggregation/CountAggregationFunction.java | 2 +- .../aggregation/CountAggregator.java | 2 +- .../CountFractionalAggregationFunction.java | 2 +- ...ntIgnoringMissingsAggregationFunction.java | 2 +- .../CountIgnoringMissingsAggregator.java | 2 +- ...tIncludingMissingsAggregationFunction.java | 2 +- .../CountIncludingMissingsAggregator.java | 2 +- .../CountPercentageAggregationFunction.java | 2 +- ...ltAggregationFunctionMetaDataProvider.java | 2 +- .../aggregation/LeastAggregationFunction.java | 2 +- .../aggregation/LeastAggregator.java | 2 +- .../LeastOccurringAggregationFunction.java | 2 +- .../aggregation/LeastOccurringAggregator.java | 2 +- .../LogProductAggregationFunction.java | 2 +- .../aggregation/LogProductAggregator.java | 2 +- ...ngAggregationFunctionMetaDataProvider.java | 2 +- .../aggregation/MaxAggregationFunction.java | 2 +- .../aggregation/MaxAggregator.java | 2 +- .../aggregation/MeanAggregationFunction.java | 2 +- .../aggregation/MeanAggregator.java | 2 +- .../MedianAggregationFunction.java | 2 +- .../MedianAggregationFunctionLegacy.java | 2 +- .../aggregation/MedianAggregator.java | 2 +- .../aggregation/MedianAggregatorLegacy.java | 2 +- .../aggregation/MinAggregationFunction.java | 2 +- .../aggregation/MinAggregator.java | 2 +- .../aggregation/ModeAggregationFunction.java | 2 +- .../aggregation/ModeAggregator.java | 2 +- .../NominalAggregationFunction.java | 2 +- .../NumericalAggregationFunction.java | 2 +- .../aggregation/NumericalAggregator.java | 2 +- .../ProductAggregationFunction.java | 2 +- .../aggregation/ProductAggregator.java | 2 +- .../StandardDeviationAggregationFunction.java | 2 +- .../StandardDeviationAggregator.java | 2 +- .../aggregation/SumAggregationFunction.java | 2 +- .../aggregation/SumAggregator.java | 2 +- .../SumFractionalAggregationFunction.java | 2 +- .../VarianceAggregationFunction.java | 2 +- .../aggregation/VarianceAggregator.java | 2 +- .../weighting/AbstractExampleWeighting.java | 2 +- .../weighting/EqualLabelWeighting.java | 2 +- ...calPolynomialExampleWeightingOperator.java | 2 +- ...ractRepositoryEntryRelocationOperator.java | 2 +- .../AbstractRepositoryManagerOperator.java | 2 +- .../RepositoryEntryCopyOperator.java | 2 +- .../RepositoryEntryDeleteOperator.java | 2 +- .../RepositoryEntryMoveOperator.java | 2 +- .../RepositoryEntryRenameOperator.java | 2 +- .../similarity/CrossDistancesOperator.java | 2 +- .../similarity/ExampleSet2Similarity.java | 2 +- .../ExampleSet2SimilarityExampleSet.java | 2 +- .../similarity/Similarity2ExampleSet.java | 2 +- .../similarity/SimilarityMeasureObject.java | 2 +- .../tools/AttributeSubsetSelector.java | 2 +- .../operator/tools/BodySerializer.java | 2 +- .../operator/tools/ConsolePrintOperator.java | 2 +- .../operator/tools/DelayOperator.java | 2 +- .../operator/tools/ExampleSetToStream.java | 2 +- .../tools/ExpressionEvaluationException.java | 2 +- .../operator/tools/IOObjectSerializer.java | 2 +- .../operator/tools/OperatorCreationHook.java | 2 +- .../operator/tools/RMObjectInputStream.java | 2 +- .../operator/tools/SendMailOperator.java | 2 +- .../operator/tools/SerializationType.java | 2 +- .../StreamedExampleSetBodySerializer.java | 2 +- .../util/annotations/AnnotateOperator.java | 2 +- .../util/annotations/AnnotationsToData.java | 2 +- .../util/annotations/DataToAnnotations.java | 2 +- .../util/annotations/ExtractAnnotation.java | 2 +- .../AbstractBootstrappingValidation.java | 2 +- .../operator/validation/BatchXValidation.java | 2 +- .../validation/BootstrappingValidation.java | 2 +- .../validation/FixedSplitValidationChain.java | 2 +- .../IteratingPerformanceAverage.java | 2 +- .../RandomSplitValidationChain.java | 2 +- .../RandomSplitWrapperValidationChain.java | 2 +- .../validation/SplitValidationOperator.java | 2 +- .../rapidminer/operator/validation/Tools.java | 2 +- .../operator/validation/ValidationChain.java | 2 +- .../WeightedBootstrappingValidation.java | 2 +- .../validation/WrapperValidationChain.java | 2 +- .../validation/WrapperXValidation.java | 2 +- .../operator/validation/XValidation.java | 2 +- .../clustering/CentroidBasedEvaluator.java | 2 +- .../clustering/ClusterDensityEvaluator.java | 2 +- .../clustering/ClusterNumberEvaluator.java | 2 +- .../ExampleDistributionEvaluator.java | 2 +- .../ExampleDistributionMeasure.java | 2 +- .../exampledistribution/GiniCoefficient.java | 2 +- .../exampledistribution/SumOfSquares.java | 2 +- .../AnovaSignificanceTestOperator.java | 2 +- .../SignificanceTestOperator.java | 2 +- .../TTestSignificanceTestOperator.java | 2 +- .../visualization/ClearProcessLog.java | 2 +- .../operator/visualization/Data2Log.java | 2 +- .../visualization/DataStatistics.java | 2 +- .../visualization/DataStatisticsOperator.java | 2 +- .../ExampleVisualizationOperator.java | 2 +- .../visualization/FormulaExtractor.java | 2 +- .../visualization/LiftChartGenerator.java | 10 +- .../visualization/LiftParetoChart.java | 2 +- .../LiftParetoChartGenerator.java | 2 +- .../operator/visualization/Macro2Log.java | 2 +- .../visualization/ProcessLog2ExampleSet.java | 2 +- .../visualization/ProcessLogOperator.java | 2 +- .../ROCBasedComparisonOperator.java | 2 +- .../visualization/ROCChartGenerator.java | 10 +- .../operator/visualization/ROCComparison.java | 2 +- .../visualization/SOMModelPlotter.java | 2 +- .../visualization/SOMModelVisualization.java | 2 +- .../dependencies/ANOVAMatrix.java | 2 +- .../dependencies/ANOVAMatrixOperator.java | 2 +- .../AbstractPairwiseMatrixOperator.java | 2 +- .../CorrelationMatrixOperator.java | 4 +- .../CovarianceMatrixOperator.java | 2 +- .../MutualInformationMatrixOperator.java | 2 +- .../dependencies/NumericalMatrix.java | 24 +- .../dependencies/RainflowMatrix.java | 2 +- .../dependencies/RainflowMatrixOperator.java | 2 +- .../dependencies/TransitionGraph.java | 2 +- .../dependencies/TransitionGraphOperator.java | 2 +- .../TransitionMatrixOperator.java | 2 +- .../parameter/CombinedParameterType.java | 2 +- .../IOObjectCacheSuggestionProvider.java | 2 +- .../parameter/MetaDataProvider.java | 2 +- .../rapidminer/parameter/OAuthMechanism.java | 2 +- .../parameter/ParameterHandler.java | 2 +- .../rapidminer/parameter/ParameterType.java | 2 +- .../parameter/ParameterTypeAttribute.java | 2 +- .../parameter/ParameterTypeAttributeFile.java | 2 +- .../ParameterTypeAttributeOrderingRules.java | 2 +- .../parameter/ParameterTypeAttributes.java | 2 +- .../parameter/ParameterTypeBoolean.java | 2 +- .../parameter/ParameterTypeCategory.java | 2 +- .../parameter/ParameterTypeChar.java | 2 +- .../parameter/ParameterTypeColor.java | 2 +- .../parameter/ParameterTypeConfiguration.java | 2 +- .../ParameterTypeCronExpression.java | 2 +- .../parameter/ParameterTypeDate.java | 2 +- .../parameter/ParameterTypeDateFormat.java | 2 +- .../parameter/ParameterTypeDirectory.java | 2 +- .../parameter/ParameterTypeDouble.java | 2 +- .../parameter/ParameterTypeEnumeration.java | 2 +- .../parameter/ParameterTypeExpression.java | 2 +- .../parameter/ParameterTypeFile.java | 2 +- .../parameter/ParameterTypeFilter.java | 2 +- .../parameter/ParameterTypeInnerOperator.java | 2 +- .../parameter/ParameterTypeInt.java | 2 +- .../parameter/ParameterTypeLinkButton.java | 2 +- .../parameter/ParameterTypeList.java | 2 +- .../parameter/ParameterTypeLong.java | 2 +- .../parameter/ParameterTypeMatrix.java | 2 +- .../parameter/ParameterTypeNumber.java | 2 +- .../parameter/ParameterTypeOAuth.java | 2 +- .../ParameterTypeParameterValue.java | 2 +- .../parameter/ParameterTypePassword.java | 2 +- .../parameter/ParameterTypePreview.java | 2 +- .../ParameterTypeProcessLocation.java | 2 +- .../parameter/ParameterTypeRegexp.java | 2 +- .../parameter/ParameterTypeRemoteFile.java | 2 +- .../ParameterTypeRepositoryLocation.java | 2 +- .../parameter/ParameterTypeSingle.java | 2 +- .../parameter/ParameterTypeString.java | 2 +- .../ParameterTypeStringCategory.java | 2 +- .../parameter/ParameterTypeSuggestion.java | 2 +- .../parameter/ParameterTypeText.java | 2 +- .../parameter/ParameterTypeTupel.java | 2 +- .../parameter/ParameterTypeValue.java | 2 +- .../com/rapidminer/parameter/Parameters.java | 2 +- .../rapidminer/parameter/PortProvider.java | 2 +- .../parameter/StaticMetaDataProvider.java | 2 +- .../parameter/SuggestionProvider.java | 2 +- .../com/rapidminer/parameter/TextType.java | 2 +- .../parameter/UndefinedMacroError.java | 2 +- .../parameter/UndefinedParameterError.java | 2 +- .../AboveOperatorVersionCondition.java | 2 +- .../conditions/AbstractLogicalCondition.java | 2 +- .../conditions/AndParameterCondition.java | 2 +- .../BelowOrEqualOperatorVersionCondition.java | 2 +- .../conditions/BooleanParameterCondition.java | 2 +- .../EqualOperatorVersionCondition.java | 2 +- .../conditions/EqualStringCondition.java | 2 +- .../conditions/EqualTypeCondition.java | 2 +- .../InputPortNotConnectedCondition.java | 2 +- .../conditions/NonEqualStringCondition.java | 2 +- .../conditions/NonEqualTypeCondition.java | 2 +- .../conditions/OrParameterCondition.java | 2 +- .../OutputPortNotConnectedCondition.java | 2 +- .../conditions/ParameterCondition.java | 2 +- .../conditions/PortConnectedCondition.java | 2 +- .../parameter/value/ParameterValueGrid.java | 2 +- .../parameter/value/ParameterValueList.java | 2 +- .../parameter/value/ParameterValueRange.java | 2 +- .../parameter/value/ParameterValues.java | 2 +- .../java/com/rapidminer/report/Readable.java | 2 +- .../com/rapidminer/report/Renderable.java | 2 +- .../rapidminer/report/ReportException.java | 2 +- .../com/rapidminer/report/ReportStream.java | 2 +- .../com/rapidminer/report/Reportable.java | 2 +- .../java/com/rapidminer/report/Tableable.java | 2 +- .../com/rapidminer/repository/AccessFlag.java | 2 +- .../com/rapidminer/repository/AccessType.java | 2 +- .../com/rapidminer/repository/BlobEntry.java | 2 +- .../repository/ConnectionListener.java | 44 + .../repository/ConnectionRepository.java | 50 + .../repository/CustomRepositoryFactory.java | 2 +- .../repository/CustomRepositoryRegistry.java | 2 +- .../com/rapidminer/repository/DataEntry.java | 2 +- .../com/rapidminer/repository/DateEntry.java | 2 +- .../java/com/rapidminer/repository/Entry.java | 2 +- .../repository/FileRepositoryProvider.java | 11 +- .../com/rapidminer/repository/Folder.java | 2 +- .../rapidminer/repository/IOObjectEntry.java | 2 +- .../MalformedRepositoryLocationException.java | 2 +- .../rapidminer/repository/ProcessEntry.java | 2 +- .../repository/RemoteProcessState.java | 2 +- .../com/rapidminer/repository/Repository.java | 12 +- .../repository/RepositoryAccessor.java | 2 +- .../repository/RepositoryActionCondition.java | 2 +- ...ryActionConditionImplConfigRepository.java | 2 +- ...oryActionConditionImplExampleSetsOnly.java | 40 +- ...RepositoryActionConditionImplStandard.java | 2 +- ...tionConditionImplStandardNoRepository.java | 2 +- .../repository/RepositoryConstants.java | 2 +- .../repository/RepositoryException.java | 2 +- .../repository/RepositoryFactory.java | 2 +- .../repository/RepositoryListener.java | 73 +- .../repository/RepositoryLocation.java | 2 +- .../repository/RepositoryManager.java | 86 +- .../repository/RepositoryManagerListener.java | 52 + .../repository/RepositoryProvider.java | 2 +- .../repository/RepositorySortingMethod.java | 2 +- .../RepositorySortingMethodListener.java | 2 +- .../repository/RepositoryTools.java | 2 +- .../repository/RepositoryVisitor.java | 2 +- .../repository/gui/LocalRepositoryPanel.java | 2 +- .../repository/gui/NewRepositoryDialog.java | 2 +- .../repository/gui/RepositoryBrowser.java | 58 +- .../gui/RepositoryConfigurationDialog.java | 2 +- .../gui/RepositoryConfigurationPanel.java | 2 +- .../gui/RepositoryLocationChooser.java | 2 +- .../gui/RepositorySelectionEvent.java | 2 +- .../gui/RepositorySelectionListener.java | 2 +- .../repository/gui/RepositoryTree.java | 32 +- .../gui/RepositoryTreeCellRenderer.java | 2 +- .../repository/gui/RepositoryTreeModel.java | 6 +- .../repository/gui/RepositoryTreeUtil.java | 17 +- .../gui/RescalingProgressListener.java | 2 +- .../repository/gui/ToolTipProviderHelper.java | 2 +- .../gui/actions/AbstractRepositoryAction.java | 4 +- .../actions/ConfigureRepositoryAction.java | 2 +- .../actions/CopyEntryRepositoryAction.java | 2 +- .../gui/actions/CopyLocationAction.java | 2 +- .../gui/actions/CreateFolderAction.java | 2 +- .../gui/actions/CutEntryRepositoryAction.java | 2 +- .../actions/DeleteRepositoryEntryAction.java | 2 +- .../gui/actions/NewRepositoryAction.java | 47 + .../gui/actions/OpenEntryAction.java | 5 +- .../gui/actions/OpenInFileBrowserAction.java | 2 +- .../actions/PasteEntryRepositoryAction.java | 2 +- .../actions/RefreshRepositoryEntryAction.java | 2 +- .../actions/RenameRepositoryEntryAction.java | 30 +- .../ShowProcessInRepositoryAction.java | 2 +- .../repository/gui/actions/SortByAction.java | 2 +- .../gui/actions/SortByLastModifiedAction.java | 2 +- .../gui/actions/SortByNameAction.java | 2 +- .../gui/actions/StoreProcessAction.java | 2 +- .../gui/process/ExceptionWrapper.java | 2 +- .../gui/process/OutputLocation.java | 2 +- .../RepositoryGlobalSearchGUIProvider.java | 344 ++ .../repository/internal/db/DBRepository.java | 2 +- .../internal/remote/ConnectionListener.java | 2 +- .../internal/remote/RemoteBlobEntry.java | 2 +- .../internal/remote/RemoteContentManager.java | 2 +- .../internal/remote/RemoteDataEntry.java | 2 +- .../internal/remote/RemoteEntry.java | 2 +- .../internal/remote/RemoteFolder.java | 2 +- .../internal/remote/RemoteIOObjectEntry.java | 2 +- .../internal/remote/RemoteInfoService.java | 2 +- .../internal/remote/RemoteProcessEntry.java | 2 +- .../internal/remote/RemoteRepository.java | 29 +- .../remote/RemoteRepositoryFactory.java | 2 +- .../RemoteRepositoryFactoryRegistry.java | 2 +- .../internal/remote/RemoteScheduler.java | 2 +- .../repository/local/LocalRepository.java | 12 +- .../repository/local/SimpleBlobEntry.java | 2 +- .../repository/local/SimpleDataEntry.java | 2 +- .../repository/local/SimpleEntry.java | 8 +- .../repository/local/SimpleFolder.java | 10 +- .../repository/local/SimpleIOObjectEntry.java | 7 +- .../repository/local/SimpleProcessEntry.java | 6 +- .../resource/ResourceDataEntry.java | 2 +- .../repository/resource/ResourceEntry.java | 2 +- .../repository/resource/ResourceFolder.java | 2 +- .../resource/ResourceIOObjectEntry.java | 2 +- .../resource/ResourceProcessEntry.java | 2 +- .../resource/ResourceRepository.java | 2 +- .../repository/resource/TemplatesFolder.java | 2 +- .../repository/resource/TutorialFolder.java | 2 +- .../resource/TutorialGroupFolder.java | 2 +- .../resource/ZipResourceBlobEntry.java | 2 +- .../resource/ZipResourceFolder.java | 2 +- .../resource/ZipResourceIOObjectEntry.java | 2 +- .../resource/ZipResourceProcessEntry.java | 2 +- .../resource/ZipStreamResource.java | 2 +- .../search/RepositoryGlobalSearch.java | 60 + .../search/RepositoryGlobalSearchItem.java | 142 + .../search/RepositoryGlobalSearchManager.java | 491 ++ .../search/AbstractGlobalSearchManager.java | 307 ++ .../search/GlobalSearchCategory.java | 75 + .../search/GlobalSearchDefaultField.java | 74 + .../search/GlobalSearchHandler.java | 364 ++ .../search/GlobalSearchIndexer.java | 354 ++ .../search/GlobalSearchManager.java | 92 + .../search/GlobalSearchRegistry.java | 189 + .../rapidminer/search/GlobalSearchResult.java | 132 + .../search/GlobalSearchResultBuilder.java | 177 + .../search/GlobalSearchUtilities.java | 315 ++ .../rapidminer/search/GlobalSearchable.java | 36 + .../GlobalSearchManagerEventHandler.java | 145 + .../event/GlobalSearchManagerListener.java | 66 + .../event/GlobalSearchRegistryEvent.java | 69 + .../GlobalSearchRegistryEventListener.java | 48 + .../security/PluginSandboxPolicy.java | 88 +- .../security/PluginSecurityManager.java | 2 +- .../internal/InternalPluginClassLoader.java | 2 +- .../internal/ConcurrencyExecutionService.java | 2 +- .../ConcurrencyExecutionServiceProvider.java | 2 +- .../internal/ExecutionExceptionHandling.java | 65 +- .../internal/RecursiveWrapper.java | 2 +- .../internal/StudioConcurrencyContext.java | 50 +- .../internal/util/BackgroundExecution.java | 2 +- .../BackgroundExecutionServiceListener.java | 2 +- .../internal/util/ExampleSetAppender.java | 2 +- .../util/ProcessBackgroundExecution.java | 2 +- .../util/ProcessBackgroundExecutionState.java | 2 +- .../util/ProcessExecutionStackEntry.java | 2 +- .../NoStartupDialogRegistreredException.java | 2 +- .../internal/ParameterServiceProvider.java | 2 +- .../internal/ParameterServiceRegistry.java | 2 +- .../internal/ProcessFlowFilterRegistry.java | 2 +- .../ProcessStoppedRuntimeException.java | 2 +- .../rapidminer/studio/internal/Resources.java | 2 +- .../studio/internal/RuleProvider.java | 2 +- .../studio/internal/RuleProviderRegistry.java | 2 +- .../internal/StartupDialogProvider.java | 2 +- .../internal/StartupDialogRegistry.java | 2 +- .../studio/io/data/DataSetReader.java | 2 +- .../studio/io/data/DefaultColumnMetaData.java | 2 +- .../io/data/DefaultDataSetMetaData.java | 2 +- .../HeaderRowBehindStartRowException.java | 2 +- .../io/data/HeaderRowNotFoundException.java | 2 +- .../io/data/StartRowNotFoundException.java | 2 +- .../io/data/internal/ResultSetAdapter.java | 2 +- .../data/internal/ResultSetAdapterUtils.java | 2 +- .../internal/file/LocalFileDataSource.java | 2 +- .../file/LocalFileDataSourceFactory.java | 2 +- .../file/LocalFileLocationChooserView.java | 2 +- .../file/LocalFileLocationWizardStep.java | 2 +- .../file/binary/BinaryDataSource.java | 2 +- .../file/binary/BinaryDataSourceFactory.java | 2 +- .../BinaryImportDestinationChooser.java | 2 +- .../file/binary/DumpToRepositoryStep.java | 11 +- .../data/internal/file/csv/CSVDataSource.java | 2 +- .../file/csv/CSVDataSourceFactory.java | 2 +- .../file/csv/CSVFormatSpecificationPanel.java | 2 +- .../csv/CSVFormatSpecificationWizardStep.java | 2 +- .../file/csv/CSVResultSetAdapter.java | 2 +- .../file/excel/CellRangeSelection.java | 2 +- .../internal/file/excel/ExcelDataSource.java | 4 +- .../excel/ExcelDataSourceConfiguration.java | 2 +- .../file/excel/ExcelDataSourceFactory.java | 2 +- .../file/excel/ExcelResultSetAdapter.java | 2 +- .../ExcelSheetSelectionModelListener.java | 2 +- .../file/excel/ExcelSheetSelectionPanel.java | 2 +- .../excel/ExcelSheetSelectionPanelModel.java | 2 +- .../excel/ExcelSheetSelectionWizardStep.java | 3 +- .../io/gui/internal/DataImportWizard.java | 2 +- .../gui/internal/DataImportWizardBuilder.java | 2 +- .../gui/internal/DataImportWizardUtils.java | 2 +- .../io/gui/internal/DataWizardEventType.java | 2 +- .../steps/AbstractToRepositoryStep.java | 2 +- .../internal/steps/AbstractWizardStep.java | 2 +- .../internal/steps/LocationSelectionStep.java | 2 +- .../internal/steps/StoreToRepositoryStep.java | 2 +- .../gui/internal/steps/TypeSelectionStep.java | 2 +- .../gui/internal/steps/TypeSelectionView.java | 2 +- .../AbstractErrorWarningTableModel.java | 2 +- .../configuration/CollapsibleErrorTable.java | 2 +- .../steps/configuration/ColumnError.java | 2 +- .../configuration/ConfigureDataStep.java | 2 +- .../ConfigureDataTableHeader.java | 2 +- .../ConfigureDataTableModel.java | 2 +- .../configuration/ConfigureDataValidator.java | 2 +- .../configuration/ConfigureDataView.java | 2 +- .../configuration/ErrorWarningTableModel.java | 2 +- .../steps/configuration/ParsingError.java | 2 +- .../com/rapidminer/template/Template.java | 2 +- .../rapidminer/template/TemplateManager.java | 2 +- .../test/asserter/AsserterFactory.java | 2 +- .../asserter/AsserterFactoryRapidMiner.java | 2 +- .../com/rapidminer/test_utils/Asserter.java | 2 +- .../test_utils/AsserterRegistry.java | 2 +- .../rapidminer/test_utils/RapidAssert.java | 2 +- .../java/com/rapidminer/test_utils/Util.java | 2 +- .../tools/AbstractChangeAwareSaveable.java | 2 +- .../rapidminer/tools/AbstractObservable.java | 2 +- .../java/com/rapidminer/tools/BugReport.java | 2 +- .../rapidminer/tools/CSVParseException.java | 2 +- .../rapidminer/tools/ChangeAwareSaveable.java | 2 +- .../com/rapidminer/tools/ClassColorMap.java | 2 +- .../com/rapidminer/tools/ClassNameMapper.java | 2 +- .../java/com/rapidminer/tools/DateParser.java | 2 +- .../tools/DefaultMailSessionFactory.java | 2 +- .../rapidminer/tools/DelegatingObserver.java | 2 +- .../tools/DominatingClassFinder.java | 2 +- .../com/rapidminer/tools/DynamicIcon.java | 2 +- .../tools/DynamicIconUrlStreamHandler.java | 2 +- .../tools/ExtensibleResourceBundle.java | 2 +- .../rapidminer/tools/FileSystemService.java | 84 +- .../rapidminer/tools/FixedConsoleHandler.java | 2 +- .../java/com/rapidminer/tools/FontTools.java | 2 +- .../tools/GenericOperatorFactory.java | 2 +- .../com/rapidminer/tools/GlobCompiler.java | 2 +- .../rapidminer/tools/GlobalAuthenticator.java | 2 +- .../java/com/rapidminer/tools/GroupTree.java | 2 +- .../com/rapidminer/tools/GroupTreeNode.java | 2 +- .../com/rapidminer/tools/GroupTreeRoot.java | 2 +- src/main/java/com/rapidminer/tools/I18N.java | 4 +- .../rapidminer/tools/IterationArrayList.java | 2 +- .../com/rapidminer/tools/LaunchListener.java | 2 +- .../java/com/rapidminer/tools/LineParser.java | 2 +- .../java/com/rapidminer/tools/LogService.java | 2 +- .../com/rapidminer/tools/LoggingHandler.java | 2 +- .../java/com/rapidminer/tools/MailSender.java | 2 +- .../com/rapidminer/tools/MailSenderSMTP.java | 2 +- .../rapidminer/tools/MailSenderSendmail.java | 2 +- .../rapidminer/tools/MailSessionFactory.java | 2 +- .../com/rapidminer/tools/MailUtilities.java | 2 +- .../java/com/rapidminer/tools/NetTools.java | 2 +- .../tools/NonClosingZipInputStream.java | 2 +- .../com/rapidminer/tools/NumberParser.java | 2 +- .../tools/ObjectVisualizerService.java | 2 +- .../java/com/rapidminer/tools/Observable.java | 2 +- .../java/com/rapidminer/tools/Observer.java | 2 +- .../java/com/rapidminer/tools/Ontology.java | 2 +- .../OperatorResourceConsumptionHandler.java | 2 +- .../com/rapidminer/tools/OperatorService.java | 16 +- .../tools/OutputStreamMultiplier.java | 2 +- .../rapidminer/tools/ParameterService.java | 8 +- .../rapidminer/tools/ParentResolvingMap.java | 2 +- .../tools/PasswordInputCanceledException.java | 2 +- .../rapidminer/tools/PlatformUtilities.java | 2 +- .../com/rapidminer/tools/ProcessTools.java | 2 +- .../rapidminer/tools/ProgressListener.java | 2 +- .../com/rapidminer/tools/ProxySettings.java | 2 +- .../com/rapidminer/tools/RMUrlHandler.java | 2 +- .../com/rapidminer/tools/RandomGenerator.java | 2 +- .../com/rapidminer/tools/ReferenceCache.java | 2 +- .../com/rapidminer/tools/ResourceSource.java | 2 +- .../com/rapidminer/tools/ResultService.java | 2 +- .../rapidminer/tools/SimpleObservable.java | 2 +- .../rapidminer/tools/StrictDecimalFormat.java | 4 +- .../com/rapidminer/tools/StringColorMap.java | 2 +- .../rapidminer/tools/StringProperties.java | 2 +- .../rapidminer/tools/SystemInfoUtilities.java | 2 +- .../java/com/rapidminer/tools/TimeFormat.java | 2 +- src/main/java/com/rapidminer/tools/Tools.java | 28 +- .../com/rapidminer/tools/WebServiceTools.java | 32 +- .../com/rapidminer/tools/WeightedObject.java | 2 +- .../tools/WrapperLoggingHandler.java | 2 +- .../rapidminer/tools/WriterMultiplier.java | 2 +- .../com/rapidminer/tools/XMLException.java | 2 +- .../rapidminer/tools/XMLParserException.java | 19 + .../rapidminer/tools/XMLSerialization.java | 2 +- .../com/rapidminer/tools/XmlRpcHandler.java | 2 +- .../tools/att/AttributeDataSource.java | 10 +- .../tools/att/AttributeDataSourceCreator.java | 2 +- .../tools/att/AttributeDataSources.java | 2 +- .../rapidminer/tools/att/AttributeSet.java | 2 +- .../tools/cipher/CipherException.java | 2 +- .../tools/cipher/CipherKeyProvider.java | 2 +- .../rapidminer/tools/cipher/CipherTools.java | 24 +- .../tools/cipher/FileCipherKeyProvider.java | 2 +- .../tools/cipher/KeyGenerationException.java | 2 +- .../tools/cipher/KeyGeneratorTool.java | 2 +- .../tools/cipher/KeyLoadingException.java | 2 +- .../tools/cipher/KeyStoringException.java | 2 +- .../tools/config/AbstractConfigurable.java | 2 +- .../tools/config/AbstractConfigurator.java | 2 +- .../config/ClientConfigurationManager.java | 2 +- .../rapidminer/tools/config/Configurable.java | 2 +- .../tools/config/ConfigurationException.java | 2 +- .../tools/config/ConfigurationManager.java | 92 +- .../ConfigurationNameConflictException.java | 2 +- .../rapidminer/tools/config/Configurator.java | 2 +- .../config/ConfiguratorParameterHandler.java | 2 +- .../config/ParameterTypeConfigurable.java | 2 +- .../tools/config/TestConfigurableAction.java | 2 +- .../tools/config/actions/ActionResult.java | 2 +- .../config/actions/ConfigurableAction.java | 2 +- .../config/actions/SimpleActionResult.java | 2 +- .../gui/ConfigurableAdminPasswordDialog.java | 3 +- .../config/gui/ConfigurableController.java | 15 +- .../gui/ConfigurableCreationDialog.java | 3 +- .../tools/config/gui/ConfigurableDialog.java | 25 +- .../gui/ConfigurableUserAccessDialog.java | 10 +- .../gui/ConfiguratorParameterPanel.java | 2 +- .../gui/LoginAsAdminDropDownButton.java | 2 +- .../RefreshConfigurablesDropDownButton.java | 45 +- .../config/gui/event/ConfigurableEvent.java | 2 +- .../event/ConfigurableModelEventListener.java | 2 +- .../config/gui/model/ConfigurableModel.java | 174 +- .../ConfigurableInfoLabelRenderer.java | 2 +- .../gui/renderer/ConfigurableRenderer.java | 2 +- .../gui/renderer/ConfigurationRenderer.java | 2 +- .../rapidminer/tools/config/jwt/JwtClaim.java | 52 + .../tools/config/jwt/JwtReader.java | 112 + .../tools/container/ComparablePair.java | 2 +- .../container/MultidimensionalArraySet.java | 2 +- .../com/rapidminer/tools/container/Pair.java | 2 +- .../rapidminer/tools/container/Triple.java | 2 +- .../com/rapidminer/tools/container/Tupel.java | 2 +- .../tools/container/ValueAndCount.java | 2 +- .../rapidminer/tools/container/ValueSet.java | 2 +- .../tools/documentation/ExampleProcess.java | 2 +- .../documentation/GroupDocumentation.java | 2 +- .../documentation/OperatorDocBundle.java | 2 +- .../documentation/OperatorDocumentation.java | 2 +- .../documentation/XMLOperatorDocBundle.java | 21 +- .../rapidminer/tools/expression/Constant.java | 2 +- .../tools/expression/DoubleCallable.java | 2 +- .../tools/expression/ExampleResolver.java | 2 +- .../tools/expression/Expression.java | 2 +- .../tools/expression/ExpressionContext.java | 2 +- .../tools/expression/ExpressionEvaluator.java | 2 +- .../tools/expression/ExpressionException.java | 2 +- .../tools/expression/ExpressionParser.java | 2 +- .../expression/ExpressionParserBuilder.java | 2 +- .../expression/ExpressionParserModule.java | 2 +- .../ExpressionParsingException.java | 2 +- .../tools/expression/ExpressionRegistry.java | 2 +- .../tools/expression/ExpressionType.java | 2 +- .../rapidminer/tools/expression/Function.java | 2 +- .../tools/expression/FunctionDescription.java | 2 +- .../tools/expression/FunctionInput.java | 2 +- .../expression/FunctionInputException.java | 2 +- .../tools/expression/MacroResolver.java | 2 +- .../rapidminer/tools/expression/Resolver.java | 2 +- .../tools/expression/UnknownValue.java | 2 +- .../expression/internal/BasicConstants.java | 2 +- .../expression/internal/ConstantResolver.java | 2 +- .../internal/ExpressionParserConstants.java | 2 +- .../internal/ExpressionParserUtils.java | 2 +- .../expression/internal/SimpleConstant.java | 2 +- .../internal/SimpleExpressionContext.java | 2 +- .../internal/SimpleExpressionEvaluator.java | 2 +- .../StandardFunctionsWithConstants.java | 2 +- .../internal/StandardOperations.java | 2 +- .../UnknownResolverVariableException.java | 2 +- .../internal/antlr/AntlrParser.java | 2 +- .../antlr/CapitulatingErrorStrategy.java | 2 +- .../CapitulatingFunctionExpressionLexer.java | 2 +- .../antlr/CapitulatingRuntimeException.java | 2 +- .../antlr/EvaluatorCreationVisitor.java | 2 +- .../antlr/ExpressionErrorListener.java | 2 +- .../internal/antlr/FunctionListener.java | 2 +- .../internal/antlr/SimpleExpression.java | 2 +- .../UnknownDynamicVariableException.java | 2 +- .../antlr/UnknownFunctionException.java | 2 +- .../antlr/UnknownScopeConstantException.java | 2 +- .../antlr/UnknownVariableException.java | 2 +- .../Abstract1DoubleInputFunction.java | 2 +- .../Abstract2DoubleInputFunction.java | 2 +- .../AbstractArbitraryDoubleInputFunction.java | 2 +- ...itraryStringInputStringOutputFunction.java | 2 +- .../internal/function/AbstractFunction.java | 2 +- .../internal/function/basic/Divide.java | 2 +- .../internal/function/basic/Minus.java | 2 +- .../internal/function/basic/Modulus.java | 2 +- .../internal/function/basic/Multiply.java | 2 +- .../internal/function/basic/Plus.java | 2 +- .../internal/function/basic/Power.java | 2 +- .../internal/function/bitwise/BitAnd.java | 2 +- .../internal/function/bitwise/BitNot.java | 2 +- .../internal/function/bitwise/BitOr.java | 2 +- .../internal/function/bitwise/BitXor.java | 2 +- ...AbstractComparisonFunctionWith2Inputs.java | 2 +- .../AbstractEqualityFunctionWith2Inputs.java | 2 +- .../internal/function/comparison/Equals.java | 2 +- .../internal/function/comparison/Finite.java | 2 +- .../function/comparison/GreaterEqualThan.java | 2 +- .../function/comparison/GreaterThan.java | 2 +- .../function/comparison/LessEqualThan.java | 2 +- .../function/comparison/LessThan.java | 2 +- .../internal/function/comparison/Missing.java | 2 +- .../function/comparison/NotEquals.java | 2 +- .../function/conversion/DateParse.java | 2 +- .../function/conversion/DateParseCustom.java | 2 +- .../conversion/DateParseWithLocale.java | 2 +- .../function/conversion/DateString.java | 2 +- .../function/conversion/DateStringCustom.java | 2 +- .../function/conversion/DateStringLocale.java | 2 +- .../conversion/NumericalToString.java | 2 +- .../conversion/StringToNumerical.java | 2 +- .../date/Abstract2DateInputBooleanOutput.java | 2 +- ...stract2DateInputIntegerOutputFunction.java | 2 +- .../AbstractDateManipulationFunction.java | 2 +- .../internal/function/date/DateAdd.java | 2 +- .../internal/function/date/DateAfter.java | 2 +- .../internal/function/date/DateBefore.java | 2 +- .../internal/function/date/DateDiff.java | 2 +- .../internal/function/date/DateGet.java | 2 +- .../internal/function/date/DateMillis.java | 2 +- .../internal/function/date/DateNow.java | 2 +- .../internal/function/date/DateSet.java | 2 +- .../internal/function/eval/Evaluation.java | 2 +- .../SubexpressionEvaluationException.java | 2 +- .../internal/function/eval/TypeConstants.java | 2 +- .../logical/AbstractLogicalFunction.java | 2 +- .../AbstractLogicalFunctionWith1Input.java | 2 +- .../AbstractLogicalFunctionWith2Inputs.java | 2 +- .../internal/function/logical/And.java | 2 +- .../internal/function/logical/If.java | 2 +- .../internal/function/logical/Not.java | 2 +- .../internal/function/logical/Or.java | 2 +- .../function/mathematical/AbsoluteValue.java | 2 +- .../mathematical/BinaryLogarithm.java | 2 +- .../mathematical/CommonLogarithm.java | 2 +- .../mathematical/ExponentialFunction.java | 2 +- .../mathematical/ModulusAsFunction.java | 2 +- .../mathematical/NaturalLogarithm.java | 2 +- .../mathematical/PowerAsFunction.java | 2 +- .../function/mathematical/Signum.java | 2 +- .../function/mathematical/SquareRoot.java | 2 +- .../internal/function/process/MacroValue.java | 2 +- .../function/process/ParameterValue.java | 2 +- .../Abstract1or2DoubleInputFunction.java | 2 +- .../internal/function/rounding/Ceil.java | 2 +- .../internal/function/rounding/Floor.java | 2 +- .../internal/function/rounding/Rint.java | 2 +- .../internal/function/rounding/Round.java | 2 +- .../function/statistical/Average.java | 2 +- .../function/statistical/Binominal.java | 2 +- .../function/statistical/Maximum.java | 2 +- .../function/statistical/Minimum.java | 2 +- .../internal/function/statistical/Random.java | 2 +- .../internal/function/statistical/Sum.java | 2 +- ...ract1StringInputIntegerOutputFunction.java | 2 +- ...ract2StringInputBooleanOutputFunction.java | 2 +- ...ract2StringInputIntegerOutputFunction.java | 2 +- ...tringIntegerInputStringOutputFunction.java | 2 +- .../internal/function/text/CharAt.java | 2 +- .../internal/function/text/Compare.java | 2 +- .../internal/function/text/Concat.java | 2 +- .../internal/function/text/Contains.java | 2 +- .../internal/function/text/Cut.java | 2 +- .../internal/function/text/Ends.java | 2 +- .../internal/function/text/EscapeHTML.java | 2 +- .../internal/function/text/Finds.java | 2 +- .../internal/function/text/Index.java | 2 +- .../internal/function/text/Length.java | 2 +- .../internal/function/text/Lower.java | 2 +- .../internal/function/text/Matches.java | 2 +- .../internal/function/text/Prefix.java | 2 +- .../internal/function/text/Replace.java | 2 +- .../internal/function/text/ReplaceAll.java | 2 +- .../internal/function/text/Starts.java | 2 +- .../internal/function/text/Suffix.java | 2 +- .../internal/function/text/TextEquals.java | 2 +- .../internal/function/text/Trim.java | 2 +- .../internal/function/text/Upper.java | 2 +- .../function/trigonometric/ArcCosine.java | 2 +- .../trigonometric/ArcHyperbolicCosine.java | 2 +- .../trigonometric/ArcHyperbolicSine.java | 2 +- .../trigonometric/ArcHyperbolicTangent.java | 2 +- .../function/trigonometric/ArcSine.java | 2 +- .../function/trigonometric/ArcTangent.java | 2 +- .../function/trigonometric/ArcTangent2.java | 2 +- .../function/trigonometric/Cosecant.java | 2 +- .../function/trigonometric/Cosine.java | 2 +- .../function/trigonometric/Cotangent.java | 2 +- .../trigonometric/HyperbolicCosine.java | 2 +- .../trigonometric/HyperbolicSine.java | 2 +- .../trigonometric/HyperbolicTangent.java | 2 +- .../function/trigonometric/Secant.java | 2 +- .../function/trigonometric/Sinus.java | 2 +- .../function/trigonometric/Tangent.java | 2 +- .../com/rapidminer/tools/io/Encoding.java | 2 +- .../tools/io/GlobFilenameFilter.java | 2 +- .../io/ProgressReportingInputStream.java | 2 +- .../io/ProgressReportingOutputStream.java | 2 +- .../tools/io/TransferableImage.java | 2 +- .../tools/math/AnovaCalculator.java | 2 +- .../com/rapidminer/tools/math/Averagable.java | 2 +- .../rapidminer/tools/math/AverageVector.java | 2 +- .../tools/math/BinaryPeakFinder.java | 2 +- .../tools/math/CombinationGenerator.java | 2 +- .../com/rapidminer/tools/math/Complex.java | 2 +- .../tools/math/ContingencyTableTools.java | 2 +- .../tools/math/FastFourierTransform.java | 2 +- .../tools/math/LiftDataGenerator.java | 2 +- .../tools/math/LinearRegression.java | 2 +- .../rapidminer/tools/math/MathFunctions.java | 46 +- .../java/com/rapidminer/tools/math/Peak.java | 2 +- .../com/rapidminer/tools/math/PeakFinder.java | 2 +- .../com/rapidminer/tools/math/ROCBias.java | 2 +- .../com/rapidminer/tools/math/ROCData.java | 2 +- .../tools/math/ROCDataGenerator.java | 2 +- .../com/rapidminer/tools/math/ROCPoint.java | 2 +- .../com/rapidminer/tools/math/RunVector.java | 2 +- .../SignificanceCalculationException.java | 2 +- .../tools/math/SignificanceTestResult.java | 2 +- .../tools/math/SimplePeakFinder.java | 2 +- .../rapidminer/tools/math/SpectrumFilter.java | 2 +- .../tools/math/StringToMatrixConverter.java | 2 +- .../com/rapidminer/tools/math/TestGroup.java | 2 +- .../com/rapidminer/tools/math/VectorMath.java | 2 +- .../math/WeightedConfidenceAndLabel.java | 2 +- .../rapidminer/tools/math/WindowFunction.java | 2 +- .../tools/math/container/BallTree.java | 2 +- .../tools/math/container/BallTreeNode.java | 2 +- .../math/container/BoundedPriorityQueue.java | 2 +- .../container/GeometricDataCollection.java | 2 +- .../tools/math/container/KDTree.java | 2 +- .../tools/math/container/KDTreeNode.java | 2 +- .../tools/math/container/LinearList.java | 2 +- .../tools/math/container/Range.java | 2 +- .../ReverseComparableComparator.java | 2 +- .../math/container/ReverseComparator.java | 2 +- .../distribution/ContinuousDistribution.java | 2 +- .../distribution/DiscreteDistribution.java | 2 +- .../tools/math/distribution/Distribution.java | 2 +- .../distribution/EmpiricalDistribution.java | 2 +- .../EmpiricalNormalDistribution.java | 2 +- .../math/distribution/NormalDistribution.java | 2 +- .../kernel/FullKernelDistribution.java | 2 +- .../kernel/GreedyKernelDistribution.java | 2 +- .../kernel/KernelDistribution.java | 2 +- .../distribution/kernel/NormalKernel.java | 2 +- .../AbstractAggregationFunction.java | 2 +- .../aggregation/AggregationFunction.java | 2 +- .../function/aggregation/AverageFunction.java | 2 +- .../function/aggregation/CountFunction.java | 2 +- .../function/aggregation/MaxFunction.java | 2 +- .../function/aggregation/MedianFunction.java | 2 +- .../function/aggregation/MinFunction.java | 2 +- .../function/aggregation/ModeFunction.java | 2 +- .../function/aggregation/ProductFunction.java | 2 +- .../StandardDeviationFunction.java | 2 +- .../function/aggregation/SumFunction.java | 2 +- .../aggregation/VarianceFunction.java | 2 +- .../window/BartlettWindowFunction.java | 2 +- .../window/BlackmanHarrisWindowFunction.java | 2 +- .../window/BlackmanWindowFunction.java | 2 +- .../window/GaussianWindowFunction.java | 2 +- .../window/HammingWindowFunction.java | 2 +- .../function/window/HannWindowFunction.java | 2 +- .../window/RectangularWindowFunction.java | 2 +- .../window/TriangularWindowFunction.java | 2 +- .../math/function/window/WindowFunction.java | 2 +- .../tools/math/kernels/AnovaKernel.java | 2 +- .../tools/math/kernels/DotKernel.java | 2 +- .../math/kernels/EpanechnikovKernel.java | 2 +- .../tools/math/kernels/FullCache.java | 2 +- .../kernels/GaussianCombinationKernel.java | 2 +- .../rapidminer/tools/math/kernels/Kernel.java | 2 +- .../tools/math/kernels/KernelCache.java | 2 +- .../tools/math/kernels/MapBasedCache.java | 2 +- .../math/kernels/MultiquadricKernel.java | 2 +- .../tools/math/kernels/PolynomialKernel.java | 2 +- .../tools/math/kernels/RBFKernel.java | 2 +- .../tools/math/kernels/SigmoidKernel.java | 2 +- .../tools/math/matrix/CovarianceMatrix.java | 2 +- .../tools/math/matrix/MatrixTools.java | 2 +- .../tools/math/optimization/Optimization.java | 2 +- .../ec/es/BoltzmannSelection.java | 2 +- .../math/optimization/ec/es/Crossover.java | 2 +- .../math/optimization/ec/es/CutSelection.java | 2 +- .../optimization/ec/es/ESOptimization.java | 2 +- .../optimization/ec/es/ElitistSelection.java | 2 +- .../optimization/ec/es/GaussianMutation.java | 2 +- .../math/optimization/ec/es/Individual.java | 2 +- .../math/optimization/ec/es/Mutation.java | 2 +- .../ec/es/NonDominatedSortingSelection.java | 2 +- .../ec/es/OptimizationValueType.java | 2 +- .../math/optimization/ec/es/Population.java | 2 +- .../ec/es/PopulationOperator.java | 2 +- .../optimization/ec/es/PopulationPlotter.java | 2 +- .../optimization/ec/es/RankSelection.java | 2 +- .../optimization/ec/es/RouletteWheel.java | 2 +- .../optimization/ec/es/SparsityMutation.java | 2 +- .../ec/es/StochasticUniversalSampling.java | 2 +- .../optimization/ec/es/SwitchingMutation.java | 2 +- .../ec/es/TournamentSelection.java | 2 +- .../optimization/ec/es/UniformSelection.java | 2 +- .../optimization/ec/es/VarianceAdaption.java | 2 +- .../optimization/ec/pso/PSOOptimization.java | 2 +- .../math/optimization/ec/pso/Population.java | 2 +- .../OrderedSamplingWithoutReplacement.java | 2 +- .../math/similarity/BregmanDivergence.java | 2 +- .../math/similarity/DistanceMeasure.java | 2 +- .../similarity/DistanceMeasureHelper.java | 2 +- .../math/similarity/DistanceMeasures.java | 2 +- .../math/similarity/SimilarityMeasure.java | 2 +- .../divergences/GeneralizedIDivergence.java | 2 +- .../divergences/ItakuraSaitoDistance.java | 2 +- .../similarity/divergences/KLDivergence.java | 2 +- .../divergences/LogarithmicLoss.java | 2 +- .../similarity/divergences/LogisticLoss.java | 2 +- .../divergences/MahalanobisDistance.java | 2 +- .../divergences/SquaredEuclideanDistance.java | 2 +- .../similarity/divergences/SquaredLoss.java | 2 +- .../mixed/MixedEuclideanDistance.java | 2 +- .../nominal/AbstractNominalSimilarity.java | 2 +- .../nominal/DiceNominalSimilarity.java | 2 +- .../nominal/JaccardNominalSimilarity.java | 2 +- .../nominal/KulczynskiNominalSimilarity.java | 2 +- .../nominal/LevenshteinDistance.java | 2 +- .../similarity/nominal/NominalDistance.java | 2 +- .../RogersTanimotoNominalSimilarity.java | 2 +- .../nominal/RussellRaoNominalSimilarity.java | 2 +- .../SimpleMatchingNominalSimilarity.java | 2 +- .../numerical/CamberraNumericalDistance.java | 2 +- .../numerical/ChebychevNumericalDistance.java | 2 +- .../numerical/CorrelationSimilarity.java | 2 +- .../numerical/CosineSimilarity.java | 2 +- .../similarity/numerical/DTWDistance.java | 2 +- .../numerical/DiceNumericalSimilarity.java | 2 +- .../numerical/EuclideanDistance.java | 2 +- .../numerical/InnerProductSimilarity.java | 2 +- .../numerical/JaccardNumericalSimilarity.java | 2 +- .../numerical/KernelEuclideanDistance.java | 2 +- .../numerical/ManhattanDistance.java | 2 +- .../numerical/MaxProductSimilarity.java | 2 +- .../numerical/OverlapNumericalSimilarity.java | 2 +- .../smoothing/BisquareSmoothingKernel.java | 2 +- .../EpanechnikovSmoothingKernel.java | 2 +- .../smoothing/ExponentialSmoothingKernel.java | 2 +- .../smoothing/GaussianSmoothingKernel.java | 2 +- .../math/smoothing/McLainSmoothingKernel.java | 2 +- .../smoothing/RectangularSmoothingKernel.java | 2 +- .../tools/math/smoothing/SmoothingKernel.java | 2 +- .../math/smoothing/SmoothingKernels.java | 2 +- .../smoothing/TriangularSmoothingKernel.java | 2 +- .../smoothing/TricubeSmoothingKernel.java | 2 +- .../smoothing/TriweightSmoothingKernel.java | 2 +- .../tools/math/som/AdaptationFunction.java | 2 +- .../tools/math/som/DistanceFunction.java | 2 +- .../tools/math/som/EuclideanDistance.java | 2 +- .../rapidminer/tools/math/som/KohonenNet.java | 2 +- .../tools/math/som/KohonenNode.java | 2 +- .../tools/math/som/KohonenTrainingsData.java | 2 +- .../tools/math/som/ProgressListener.java | 2 +- .../tools/math/som/RandomDataContainer.java | 2 +- .../tools/math/som/RitterAdaptation.java | 2 +- .../tools/metadata/MetaDataTools.java | 2 +- .../rapidminer/tools/parameter/Parameter.java | 2 +- .../parameter/ParameterChangeListener.java | 2 +- .../tools/parameter/ParameterScope.java | 2 +- .../tools/parameter/ParameterWriter.java | 2 +- .../parameter/WindowsBatParameterWriter.java | 2 +- .../parameter/WindowsExeParameterWriter.java | 2 +- .../DataManagementParameterHelper.java | 2 +- .../rapidminer/tools/patterns/Visitor.java | 2 +- .../tools/plugin/AllPluginsClassLoader.java | 2 +- .../rapidminer/tools/plugin/Dependency.java | 2 +- .../tools/plugin/ManagedExtension.java | 10 +- .../com/rapidminer/tools/plugin/Plugin.java | 3 +- .../tools/plugin/PluginClassLoader.java | 2 +- .../tools/plugin/PluginException.java | 2 +- .../tools/update/internal/UpdateManager.java | 2 +- .../update/internal/UpdateManagerFactory.java | 2 +- .../internal/UpdateManagerRegistry.java | 2 +- .../usagestats/ActionStatisticsCollector.java | 200 +- .../usagestats/ActionStatisticsTable.java | 2 +- .../usagestats/CallToActionScheduler.java | 2 +- .../rapidminer/tools/usagestats/CtaDao.java | 2 +- .../tools/usagestats/CtaDataSource.java | 2 +- .../tools/usagestats/CtaEventAggregator.java | 6 +- .../tools/usagestats/LocalRuleProvider.java | 2 +- .../tools/usagestats/RemoteRuleProvider.java | 2 +- .../com/rapidminer/tools/usagestats/Rule.java | 2 +- .../tools/usagestats/RuleService.java | 2 +- .../tools/usagestats/UsageStatistics.java | 5 +- .../tools/usagestats/UsageStatsScheduler.java | 7 +- .../UsageStatsTransmissionDialog.java | 2 +- .../tools/usagestats/VerifiableRule.java | 2 +- .../tools/xml/MapBasedNamespaceContext.java | 2 +- .../tools/xml/XHTMLEntityResolver.java | 2 +- .../com/rapidminer/tutorial/Tutorial.java | 2 +- .../rapidminer/tutorial/TutorialGroup.java | 2 +- .../rapidminer/tutorial/TutorialManager.java | 2 +- .../rapidminer/tutorial/TutorialRegistry.java | 2 +- .../tutorial/gui/TutorialBrowser.java | 10 +- .../tutorial/gui/TutorialSelector.java | 2 +- .../madm/operator/ClusteringAlgorithms.java | 2 +- .../java/de/dfki/madm/operator/KMeanspp.java | 2 +- .../madm/operator/clustering/XMeansCore.java | 2 +- ...AutoMLPImprovedNeuralNetModelRenderer.java | 2 +- .../AutoMLPImprovedNeuralNetLearner.java | 2 +- .../AutoMLPImprovedNeuralNetModel.java | 2 +- .../AutoMLPImprovedNeuralNetVisualizer.java | 2 +- .../rapidminer/resources/OperatorsCore.xml | 4666 +++++++++-------- .../resources/about_infos.properties | 2 +- .../resources/i18n/Errors.properties | 1 + .../rapidminer/resources/i18n/GUI.properties | 135 +- .../resources/i18n/LogMessages.properties | 62 +- .../i18n/OperatorsCoreDocumentation.xml | 6 +- .../resources/i18n/Settings.properties | 13 + .../i18n/UserErrorMessages.properties | 8 +- .../02_Preprocessing/15_ExampleSetJoin.rmp | 2 +- .../21_CreateAndNameOutlierCluster.rmp | 2 +- .../22_CreateAndNameOutlierCluster.rmp | 2 +- .../processes/07_Clustering/01_KMeans.rmp | 2 +- .../07_Clustering/02_RestartsKMeans.rmp | 2 +- ...06_ClusterClassificationWithEvaluation.rmp | 2 +- .../07_ClusterClassification.rmp | 2 +- .../07_Clustering/08_KMeansWithEvaluation.rmp | 2 +- .../07_Clustering/09_KMeansWithPlot.rmp | 2 +- .../07_Clustering/11_TopDownClustering.rmp | 2 +- .../com/rapidminer/resources/settings.xml | 5 + .../resources/splash_infos.properties | 2 +- .../template/credit_risk_modeling.template | Bin 69508 -> 70520 bytes .../template/geographic_distances.template | Bin 562646 -> 161974 bytes .../template/predictive_maintenance.template | Bin 66922 -> 68635 bytes .../example/set/ColumnCleanupTest.java | 2 +- .../ConcurrentExampleSetModificationTest.java | 2 +- .../example/set/ExampleSetCreatorsTest.java | 2 +- .../example/set/PartitionCompositionTest.java | 2 +- .../SplittedExampleSetCompositionTest.java | 2 +- .../example/table/NominalAttributeTest.java | 2 +- .../table/internal/AutoColumnTest.java | 2 +- .../internal/ColumnarExampleTableTest.java | 2 +- .../table/internal/SparseChunkTest.java | 2 +- .../example/test/DataRowConcurrencyTest.java | 2 +- .../rapidminer/example/test/DataRowTest.java | 2 +- .../example/test/ExampleTestTools.java | 2 +- .../example/test/SparseReaderTest.java | 2 +- .../example/utils/ExampleSetsTest.java | 2 +- .../rapidminer/gui/security/WalletTest.java | 147 + .../gui/tools/VersionNumberOrderingTest.java | 2 +- .../rapidminer/io/process/XMLToolsTest.java | 31 + .../test/PolynomialFunctionTest.java | 2 +- .../associations/AssociationRulesTest.java | 2 +- .../nio/model/xlsx/XlsxUtiliesTest.java | 2 +- .../test/AbstractCriterionTestCase.java | 2 +- .../test/ClassificationCriterionTest.java | 2 +- .../test/EstimatedCriterionTest.java | 2 +- .../test/MeasuredCriterionTest.java | 2 +- .../MaterializeDataInMemoryTest.java | 2 +- .../resource/ConcurrentRepositoryTest.java | 2 +- .../repository/resource/TestIOObject.java | 2 +- .../AbstractGlobalSearchManagerTest.java | 137 + .../search/GlobalSearchCategoryTest.java | 73 + .../search/GlobalSearchHandlerTest.java | 198 + .../search/GlobalSearchRegistryTest.java | 174 + .../search/GlobalSearchResultBuilderTest.java | 153 + .../rapidminer/search/ParallelUsageTest.java | 313 ++ .../search/util/GlobalSearchableTextTest.java | 184 + .../internal/ExampleSetAppenderTest.java | 2 +- .../studio/io/data/DataSetReaderTest.java | 2 +- .../file/FileDataSourceTestUtils.java | 2 +- .../file/csv/CSVDataSourceDataTest.java | 2 +- .../file/csv/CSVResultSetAdapterTest.java | 2 +- .../AbstractExcelDataSourceDataTest.java | 6 +- .../ExcelDataSourceConfigurationTest.java | 2 +- .../file/excel/ExcelResultSetAdapterTest.java | 6 +- .../file/excel/XlsDataSourceDataTest.java | 2 +- .../file/excel/XlsxDataSourceDataTest.java | 2 +- .../ConfigureDataTableModelTest.java | 2 +- .../ConfigureDataValidatorTest.java | 2 +- .../java/com/rapidminer/test/EscapeTest.java | 2 +- .../test/IterationArrayListTest.java | 2 +- .../com/rapidminer/test/MathUtilsTest.java | 2 +- .../rapidminer/test/OperatorVersionTest.java | 2 +- .../java/com/rapidminer/test/SECDTest.java | 2 +- .../tools/StrictDecimalFormatTest.java | 31 +- .../java/com/rapidminer/tools/ToolsTest.java | 2 +- .../OperatorDescriptionTest.java | 2 +- .../internal/antlr/ExpressionParserTest.java | 2 +- .../internal/antlr/ParserConstantsTest.java | 2 +- .../antlr/ParserExamplesAndMacrosTest.java | 2 +- .../internal/function/AnltrParserIfTest.java | 2 +- .../function/AntlrParserBasicTest.java | 2 +- .../function/AntlrParserBitwiseTest.java | 2 +- .../function/AntlrParserComparisonTest.java | 2 +- .../function/AntlrParserConversionTest.java | 2 +- .../function/AntlrParserDateTest.java | 2 +- .../function/AntlrParserEqualsTest.java | 2 +- .../function/AntlrParserEvalTest.java | 2 +- .../function/AntlrParserLogicalTest.java | 2 +- .../function/AntlrParserMathematicalTest.java | 2 +- .../AntlrParserProcessFunctionTest.java | 2 +- .../function/AntlrParserRoundingTest.java | 2 +- .../function/AntlrParserStatisticalTest.java | 2 +- .../AntlrParserStringInformationTest.java | 2 +- .../AntlrParserStringTransformationTest.java | 2 +- .../internal/function/AntlrParserTest.java | 2 +- .../AntlrParserTrigonometricTest.java | 2 +- .../com/rapidminer/gui/security/secrets.xml | 30 + .../rapidminer/io/process/XXE_corrupted.xml | 79 + .../rapidminer/io/process/some_process.xml | 77 + .../resources/com/rapidminer/search/br.txt | 61 + 3716 files changed, 21060 insertions(+), 8704 deletions(-) create mode 100644 src/main/java/com/rapidminer/gui/actions/ManageConfigurablesAction.java create mode 100644 src/main/java/com/rapidminer/gui/actions/ManagePasswordsAction.java create mode 100644 src/main/java/com/rapidminer/gui/actions/RestoreDefaultPerspectiveAction.java create mode 100644 src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearch.java create mode 100644 src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearchGUIProvider.java create mode 100644 src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearchManager.java create mode 100644 src/main/java/com/rapidminer/gui/actions/search/DockableAction.java create mode 100644 src/main/java/com/rapidminer/gui/dnd/TransferableRepositoryEntry.java create mode 100644 src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearch.java create mode 100644 src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearchGUIProvider.java create mode 100644 src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearchManager.java create mode 100644 src/main/java/com/rapidminer/gui/search/GlobalSearchCategoryPanel.java create mode 100644 src/main/java/com/rapidminer/gui/search/GlobalSearchController.java create mode 100644 src/main/java/com/rapidminer/gui/search/GlobalSearchDialog.java create mode 100644 src/main/java/com/rapidminer/gui/search/GlobalSearchGUIRegistry.java create mode 100644 src/main/java/com/rapidminer/gui/search/GlobalSearchGUIUtilities.java create mode 100644 src/main/java/com/rapidminer/gui/search/GlobalSearchPanel.java create mode 100644 src/main/java/com/rapidminer/gui/search/GlobalSearchableGUIProvider.java create mode 100644 src/main/java/com/rapidminer/gui/search/action/GlobalSearchAction.java create mode 100644 src/main/java/com/rapidminer/gui/search/event/GlobalSearchCategoryEvent.java create mode 100644 src/main/java/com/rapidminer/gui/search/event/GlobalSearchEventListener.java create mode 100644 src/main/java/com/rapidminer/gui/search/event/GlobalSearchInteractionEvent.java create mode 100644 src/main/java/com/rapidminer/gui/search/event/GlobalSearchInteractionListener.java create mode 100644 src/main/java/com/rapidminer/gui/search/event/GlobalSearchModelEvent.java create mode 100644 src/main/java/com/rapidminer/gui/search/model/GlobalSearchModel.java create mode 100644 src/main/java/com/rapidminer/gui/search/model/GlobalSearchRow.java create mode 100644 src/main/java/com/rapidminer/gui/tools/components/ExtendedCardLayout.java create mode 100644 src/main/java/com/rapidminer/io/process/AutoModelProcessXMLFilter.java create mode 100644 src/main/java/com/rapidminer/operator/nio/model/ExcelSheetSelection.java create mode 100644 src/main/java/com/rapidminer/repository/ConnectionListener.java create mode 100644 src/main/java/com/rapidminer/repository/ConnectionRepository.java create mode 100644 src/main/java/com/rapidminer/repository/RepositoryManagerListener.java create mode 100644 src/main/java/com/rapidminer/repository/gui/actions/NewRepositoryAction.java create mode 100644 src/main/java/com/rapidminer/repository/gui/search/RepositoryGlobalSearchGUIProvider.java create mode 100644 src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearch.java create mode 100644 src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearchItem.java create mode 100644 src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearchManager.java create mode 100644 src/main/java/com/rapidminer/search/AbstractGlobalSearchManager.java create mode 100644 src/main/java/com/rapidminer/search/GlobalSearchCategory.java create mode 100644 src/main/java/com/rapidminer/search/GlobalSearchDefaultField.java create mode 100644 src/main/java/com/rapidminer/search/GlobalSearchHandler.java create mode 100644 src/main/java/com/rapidminer/search/GlobalSearchIndexer.java create mode 100644 src/main/java/com/rapidminer/search/GlobalSearchManager.java create mode 100644 src/main/java/com/rapidminer/search/GlobalSearchRegistry.java create mode 100644 src/main/java/com/rapidminer/search/GlobalSearchResult.java create mode 100644 src/main/java/com/rapidminer/search/GlobalSearchResultBuilder.java create mode 100644 src/main/java/com/rapidminer/search/GlobalSearchUtilities.java create mode 100644 src/main/java/com/rapidminer/search/GlobalSearchable.java create mode 100644 src/main/java/com/rapidminer/search/event/GlobalSearchManagerEventHandler.java create mode 100644 src/main/java/com/rapidminer/search/event/GlobalSearchManagerListener.java create mode 100644 src/main/java/com/rapidminer/search/event/GlobalSearchRegistryEvent.java create mode 100644 src/main/java/com/rapidminer/search/event/GlobalSearchRegistryEventListener.java create mode 100644 src/main/java/com/rapidminer/tools/XMLParserException.java create mode 100644 src/main/java/com/rapidminer/tools/config/jwt/JwtClaim.java create mode 100644 src/main/java/com/rapidminer/tools/config/jwt/JwtReader.java create mode 100644 src/test/java/com/rapidminer/gui/security/WalletTest.java create mode 100644 src/test/java/com/rapidminer/io/process/XMLToolsTest.java create mode 100644 src/test/java/com/rapidminer/search/AbstractGlobalSearchManagerTest.java create mode 100644 src/test/java/com/rapidminer/search/GlobalSearchCategoryTest.java create mode 100644 src/test/java/com/rapidminer/search/GlobalSearchHandlerTest.java create mode 100644 src/test/java/com/rapidminer/search/GlobalSearchRegistryTest.java create mode 100644 src/test/java/com/rapidminer/search/GlobalSearchResultBuilderTest.java create mode 100644 src/test/java/com/rapidminer/search/ParallelUsageTest.java create mode 100644 src/test/java/com/rapidminer/search/util/GlobalSearchableTextTest.java create mode 100644 src/test/resources/com/rapidminer/gui/security/secrets.xml create mode 100644 src/test/resources/com/rapidminer/io/process/XXE_corrupted.xml create mode 100644 src/test/resources/com/rapidminer/io/process/some_process.xml create mode 100644 src/test/resources/com/rapidminer/search/br.txt diff --git a/build.gradle b/build.gradle index 7a1405945..268aa8f03 100644 --- a/build.gradle +++ b/build.gradle @@ -63,8 +63,8 @@ dependencies { compile('net.sourceforge.jexcelapi:jxl:2.6.12') { exclude group: 'log4j', module: 'log4j' } // Apache POI for manipulating various file formats based upon Office Open XML standards (http://poi.apache.org/) - compile 'org.apache.poi:poi-ooxml:3.13' - compile 'org.apache.poi:poi-scratchpad:3.13' + compile 'org.apache.poi:poi-ooxml:3.17' + compile 'org.apache.poi:poi-scratchpad:3.17' // JGoodies Looks for TODO (http://www.jgoodies.com/freeware/libraries/looks/) compile 'com.jgoodies:looks:2.2.2' @@ -86,7 +86,7 @@ dependencies { compile 'org.swinglabs.swingx:swingx-all:1.6.5' // XStreams for generic XML serialization (http://xstream.codehaus.org/) - compile 'com.thoughtworks.xstream:xstream:1.4.7' + compile 'com.thoughtworks.xstream:xstream:1.4.10' // XMLRPC for XMLRPC connections to Bugzilla (http://ws.apache.org/xmlrpc/) compile('org.apache.xmlrpc:xmlrpc-client:3.1.3') { exclude group: 'junit', module: 'junit' } @@ -94,6 +94,9 @@ dependencies { // HttpClient used by the Bugzilla XML RPC client (http://hc.apache.org/httpcomponents-client) compile 'commons-httpclient:commons-httpclient:3.1' + // FileUtils useful for various things + compile 'commons-io:commons-io:2.6' + // JAMA for matrix calculations (http://math.nist.gov/javanumerics/jama/) compile 'gov.nist.math:jama:1.0.3' @@ -129,7 +132,7 @@ dependencies { compile 'com.github.tdbear:microba:0.4.4.3' // Apache Tika for file MIME type detection (https://tika.apache.org/) - compile 'org.apache.tika:tika-core:1.11' + compile 'org.apache.tika:tika-core:1.17' // The xalan version used by the JRE for XML handling contains a bug which results in XSLT not working with an enabled SecurityManager // Using this version manually to override the JRE fixes the problem. Otherwise all our operator documentation would not work at all @@ -142,6 +145,16 @@ dependencies { // up until 7.4.1 this was a transitive dependency coming from license-commons (jackson version 2.4.0) compile 'com.fasterxml.jackson.core:jackson-core:2.6.6' compile 'com.fasterxml.jackson.core:jackson-databind:2.6.6' + + // Advanced Search functionality via Lucene + compile 'org.apache.lucene:lucene-queryparser:7.2.0' + // Highlight Lucene search result matches + compile 'org.apache.lucene:lucene-highlighter:7.2.0' + compile 'org.jsoup:jsoup:1.8.3' + + // tests require mockito + testCompile 'org.mockito:mockito-core:2.13.0' + } task wrapper(type: Wrapper) { gradleVersion = '4.0.1' } diff --git a/gradle.properties b/gradle.properties index 622cb2253..8fb880578 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version=8.0.0 +version=8.1.0 group=com.rapidminer.studio diff --git a/src/generated/java/com/rapid_i/repository/wsimport/AccessRights.java b/src/generated/java/com/rapid_i/repository/wsimport/AccessRights.java index c5ca31adf..d25f697ec 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/AccessRights.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/AccessRights.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/CancelTrigger.java b/src/generated/java/com/rapid_i/repository/wsimport/CancelTrigger.java index d5ab710e3..d142a1fcb 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/CancelTrigger.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/CancelTrigger.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/CancelTriggerResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/CancelTriggerResponse.java index f76fbcef1..57e91632a 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/CancelTriggerResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/CancelTriggerResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/CreateBlob.java b/src/generated/java/com/rapid_i/repository/wsimport/CreateBlob.java index e32cad62f..e1b6ffdd5 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/CreateBlob.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/CreateBlob.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/CreateBlobResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/CreateBlobResponse.java index 25efac0a7..acbd2f111 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/CreateBlobResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/CreateBlobResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/DeleteEntry.java b/src/generated/java/com/rapid_i/repository/wsimport/DeleteEntry.java index 41a51ee22..a6f30289d 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/DeleteEntry.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/DeleteEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/DeleteEntryResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/DeleteEntryResponse.java index 9e66228c4..a84370bf0 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/DeleteEntryResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/DeleteEntryResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/EntryResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/EntryResponse.java index 24686bfb3..111213f4d 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/EntryResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/EntryResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron.java index 51445ea70..19438d4d3 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron13.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron13.java index 8e084f256..cac947d8b 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron13.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron13.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron13Response.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron13Response.java index 026359ed4..ce693478b 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron13Response.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCron13Response.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCronResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCronResponse.java index 102df8328..3840ee84f 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCronResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessCronResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple.java index 9158f9c6e..235e970c8 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple13.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple13.java index 1e3651dba..2352c5992 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple13.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple13.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple13Response.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple13Response.java index 1e0a02764..582bcd1de 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple13Response.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimple13Response.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimpleResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimpleResponse.java index cbf99eff5..2237092b6 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimpleResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessSimpleResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessWithOffset.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessWithOffset.java index f8c5b012f..0f60ac894 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessWithOffset.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessWithOffset.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessWithOffsetResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessWithOffsetResponse.java index 42e92e053..8cd007f62 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessWithOffsetResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecuteProcessWithOffsetResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ExecutionResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/ExecutionResponse.java index 6db90c8aa..cc8daf0fe 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ExecutionResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ExecutionResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/FolderContentsResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/FolderContentsResponse.java index 5c1aff1a9..1427979ce 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/FolderContentsResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/FolderContentsResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetAccessRights.java b/src/generated/java/com/rapid_i/repository/wsimport/GetAccessRights.java index 2bc452c3a..13cd22a74 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetAccessRights.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetAccessRights.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetAccessRightsResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetAccessRightsResponse.java index 2aaafef7e..67ce04ddd 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetAccessRightsResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetAccessRightsResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetAllGroupNames.java b/src/generated/java/com/rapid_i/repository/wsimport/GetAllGroupNames.java index b386847e2..95b41ccd4 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetAllGroupNames.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetAllGroupNames.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetAllGroupNamesResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetAllGroupNamesResponse.java index da813b461..69c3cddb4 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetAllGroupNamesResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetAllGroupNamesResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetEntry.java b/src/generated/java/com/rapid_i/repository/wsimport/GetEntry.java index 95805710c..6e6ca7f83 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetEntry.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetEntryResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetEntryResponse.java index cd9fa0c17..8ed8db099 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetEntryResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetEntryResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetFolderContents.java b/src/generated/java/com/rapid_i/repository/wsimport/GetFolderContents.java index e39bea7ff..eeea7f967 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetFolderContents.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetFolderContents.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetFolderContentsResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetFolderContentsResponse.java index 68478087e..188331693 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetFolderContentsResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetFolderContentsResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetFreeMemory.java b/src/generated/java/com/rapid_i/repository/wsimport/GetFreeMemory.java index 779899a35..46a0ba79c 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetFreeMemory.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetFreeMemory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetFreeMemoryResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetFreeMemoryResponse.java index 949353521..0ee4ff102 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetFreeMemoryResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetFreeMemoryResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetInstalledPlugins.java b/src/generated/java/com/rapid_i/repository/wsimport/GetInstalledPlugins.java index 35900d1a8..d282b4455 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetInstalledPlugins.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetInstalledPlugins.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetInstalledPluginsResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetInstalledPluginsResponse.java index d62d70fd5..acecaa605 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetInstalledPluginsResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetInstalledPluginsResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetMaxMemory.java b/src/generated/java/com/rapid_i/repository/wsimport/GetMaxMemory.java index 76a2d5dc9..3d206440f 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetMaxMemory.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetMaxMemory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetMaxMemoryResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetMaxMemoryResponse.java index f259606dc..3ccb8b8e5 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetMaxMemoryResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetMaxMemoryResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetProcessContents.java b/src/generated/java/com/rapid_i/repository/wsimport/GetProcessContents.java index 2433bf560..07de1f22d 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetProcessContents.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetProcessContents.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetProcessContentsResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetProcessContentsResponse.java index 51bc69912..8a729db1e 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetProcessContentsResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetProcessContentsResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetProcessIdsForJobId.java b/src/generated/java/com/rapid_i/repository/wsimport/GetProcessIdsForJobId.java index c37c346a1..a87d190b9 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetProcessIdsForJobId.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetProcessIdsForJobId.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetProcessIdsForJobIdResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetProcessIdsForJobIdResponse.java index 3e4fe1814..698f3c862 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetProcessIdsForJobIdResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetProcessIdsForJobIdResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueInfo.java b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueInfo.java index c370eebfa..043f318af 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueInfo.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueInfo.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueInfoResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueInfoResponse.java index 92c33a62b..6bf10f0c1 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueInfoResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueInfoResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueNames.java b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueNames.java index ad9a588a3..e8212c8ba 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueNames.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueNames.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueNamesResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueNamesResponse.java index da2f215ff..e6f29c62c 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueNamesResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueNamesResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueState.java b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueState.java index b08421d22..60b8bb919 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueState.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueState.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueStateResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueStateResponse.java index cb5ca54dd..1dad7e552 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetQueueStateResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetQueueStateResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcesses.java b/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcesses.java index 14226362e..ea1d7074e 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcesses.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcesses.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesInfo.java b/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesInfo.java index 8884ab181..34e7bdfa5 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesInfo.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesInfo.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesInfoResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesInfoResponse.java index e370421d4..4c6518521 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesInfoResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesInfoResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesResponse.java index c54ba5e35..4ef9721ff 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetRunningProcessesResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetSystemLoadAverage.java b/src/generated/java/com/rapid_i/repository/wsimport/GetSystemLoadAverage.java index f931f9516..3255081ea 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetSystemLoadAverage.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetSystemLoadAverage.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetSystemLoadAverageResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetSystemLoadAverageResponse.java index dfb7a1ebb..581bd8f23 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetSystemLoadAverageResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetSystemLoadAverageResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetTotalMemory.java b/src/generated/java/com/rapid_i/repository/wsimport/GetTotalMemory.java index 24611e405..6484e0954 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetTotalMemory.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetTotalMemory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetTotalMemoryResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetTotalMemoryResponse.java index d2b4ee51e..c3bbdf503 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetTotalMemoryResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetTotalMemoryResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetUpSince.java b/src/generated/java/com/rapid_i/repository/wsimport/GetUpSince.java index b4665c5d2..f10cf3510 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetUpSince.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetUpSince.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetUpSinceResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetUpSinceResponse.java index e5750909c..0e1385a77 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetUpSinceResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetUpSinceResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetVersionNumber.java b/src/generated/java/com/rapid_i/repository/wsimport/GetVersionNumber.java index 6ff91cf0f..a68a3cafd 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetVersionNumber.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetVersionNumber.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/GetVersionNumberResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/GetVersionNumberResponse.java index ac0e3018e..31e307ee2 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/GetVersionNumberResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/GetVersionNumberResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/MacroDefinition.java b/src/generated/java/com/rapid_i/repository/wsimport/MacroDefinition.java index 1526540b1..e3308245f 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/MacroDefinition.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/MacroDefinition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/MakeFolder.java b/src/generated/java/com/rapid_i/repository/wsimport/MakeFolder.java index afa7e5420..c9e848f40 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/MakeFolder.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/MakeFolder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/MakeFolderResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/MakeFolderResponse.java index 2957c5205..d4f237c3c 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/MakeFolderResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/MakeFolderResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/Move.java b/src/generated/java/com/rapid_i/repository/wsimport/Move.java index 1bb91f252..2e7741762 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/Move.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/Move.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/MoveResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/MoveResponse.java index d62ffc736..029a294a7 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/MoveResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/MoveResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ObjectFactory.java b/src/generated/java/com/rapid_i/repository/wsimport/ObjectFactory.java index cc82dba9d..801014969 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ObjectFactory.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ObjectFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/PluginInfo.java b/src/generated/java/com/rapid_i/repository/wsimport/PluginInfo.java index 255d24a0c..d2ae51fb0 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/PluginInfo.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/PluginInfo.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ProcessContentsResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/ProcessContentsResponse.java index 0bb96190c..3ccfc4db9 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ProcessContentsResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ProcessContentsResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ProcessContextWrapper.java b/src/generated/java/com/rapid_i/repository/wsimport/ProcessContextWrapper.java index eca47545f..15f5a0002 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ProcessContextWrapper.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ProcessContextWrapper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ProcessResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/ProcessResponse.java index ec0b0955d..950dddc2f 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ProcessResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ProcessResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ProcessService.java b/src/generated/java/com/rapid_i/repository/wsimport/ProcessService.java index 74eea85e9..2d192641c 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ProcessService.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ProcessService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ProcessService13.java b/src/generated/java/com/rapid_i/repository/wsimport/ProcessService13.java index 938e07873..b3cdb7871 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ProcessService13.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ProcessService13.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ProcessService13_Service.java b/src/generated/java/com/rapid_i/repository/wsimport/ProcessService13_Service.java index 4b3110e53..f5fc5ec0e 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ProcessService13_Service.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ProcessService13_Service.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ProcessService_Service.java b/src/generated/java/com/rapid_i/repository/wsimport/ProcessService_Service.java index 11a359d1e..766f6a657 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ProcessService_Service.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ProcessService_Service.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ProcessStackTrace.java b/src/generated/java/com/rapid_i/repository/wsimport/ProcessStackTrace.java index d79885471..9ac2456d5 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ProcessStackTrace.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ProcessStackTrace.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/ProcessStackTraceElement.java b/src/generated/java/com/rapid_i/repository/wsimport/ProcessStackTraceElement.java index 9df89ce3d..4ddac800f 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/ProcessStackTraceElement.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/ProcessStackTraceElement.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/QueueProperty.java b/src/generated/java/com/rapid_i/repository/wsimport/QueueProperty.java index 753d80910..93e24777b 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/QueueProperty.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/QueueProperty.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/QueueState.java b/src/generated/java/com/rapid_i/repository/wsimport/QueueState.java index 0811e6863..0f5214f4b 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/QueueState.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/QueueState.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/RAInfoService.java b/src/generated/java/com/rapid_i/repository/wsimport/RAInfoService.java index 8d309684a..6f5d3a47e 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/RAInfoService.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/RAInfoService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/RAInfoService_Service.java b/src/generated/java/com/rapid_i/repository/wsimport/RAInfoService_Service.java index 6f1307e38..0e74128a5 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/RAInfoService_Service.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/RAInfoService_Service.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/Rename.java b/src/generated/java/com/rapid_i/repository/wsimport/Rename.java index 203857d56..2995d413a 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/Rename.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/Rename.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/RenameResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/RenameResponse.java index 9872c5f27..d98ba62db 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/RenameResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/RenameResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/RepositoryService.java b/src/generated/java/com/rapid_i/repository/wsimport/RepositoryService.java index 9a00f4647..1ddc36a2a 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/RepositoryService.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/RepositoryService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/RepositoryService_Service.java b/src/generated/java/com/rapid_i/repository/wsimport/RepositoryService_Service.java index 3920b0b42..de9739b60 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/RepositoryService_Service.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/RepositoryService_Service.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/Response.java b/src/generated/java/com/rapid_i/repository/wsimport/Response.java index fb00528cc..23b97214a 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/Response.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/Response.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/SetAccessRights.java b/src/generated/java/com/rapid_i/repository/wsimport/SetAccessRights.java index 19935a062..517782b02 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/SetAccessRights.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/SetAccessRights.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/SetAccessRightsResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/SetAccessRightsResponse.java index c97815611..e1865d51d 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/SetAccessRightsResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/SetAccessRightsResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/StartNewRevision.java b/src/generated/java/com/rapid_i/repository/wsimport/StartNewRevision.java index 818fa07c3..53bcbf1e4 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/StartNewRevision.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/StartNewRevision.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/StartNewRevisionResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/StartNewRevisionResponse.java index 26658d7a5..020c092d7 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/StartNewRevisionResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/StartNewRevisionResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/StopProcess.java b/src/generated/java/com/rapid_i/repository/wsimport/StopProcess.java index d7188eb41..dacd62ca0 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/StopProcess.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/StopProcess.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/StopProcessResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/StopProcessResponse.java index fbedda15e..3e9bc4f0c 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/StopProcessResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/StopProcessResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/StoreProcess.java b/src/generated/java/com/rapid_i/repository/wsimport/StoreProcess.java index 3d3fb0f04..da6a1825c 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/StoreProcess.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/StoreProcess.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/StoreProcessResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/StoreProcessResponse.java index 18429bd6f..1ee9a0775 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/StoreProcessResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/StoreProcessResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/CheckSetup.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/CheckSetup.java index 33fa396c0..2489b9c06 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/CheckSetup.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/CheckSetup.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/CheckSetupResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/CheckSetupResponse.java index 937545662..151e294a3 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/CheckSetupResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/CheckSetupResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/CreateDBConnection.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/CreateDBConnection.java index 512417d11..675f5c20f 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/CreateDBConnection.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/CreateDBConnection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/CreateDBConnectionResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/CreateDBConnectionResponse.java index 928f1c5f6..1fc834f11 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/CreateDBConnectionResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/CreateDBConnectionResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/GetGlobalProperty.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/GetGlobalProperty.java index b1669b98a..cf109fc02 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/GetGlobalProperty.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/GetGlobalProperty.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/GetGlobalPropertyResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/GetGlobalPropertyResponse.java index c052ae02f..841a9b953 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/GetGlobalPropertyResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/GetGlobalPropertyResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/ManagementService.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/ManagementService.java index 0b41c2799..dc07d87e4 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/ManagementService.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/ManagementService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/ManagementServiceService.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/ManagementServiceService.java index 58a3ac62e..7de20492b 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/ManagementServiceService.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/ManagementServiceService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/ObjectFactory.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/ObjectFactory.java index 70e2c208a..b997db996 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/ObjectFactory.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/ObjectFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/Response.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/Response.java index 80d1a2e24..40590aca7 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/Response.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/Response.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/SetGlobalProperty.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/SetGlobalProperty.java index 29bfc0d7a..c59915516 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/SetGlobalProperty.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/SetGlobalProperty.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/SetGlobalPropertyResponse.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/SetGlobalPropertyResponse.java index 0662ba9b7..bd1f3653b 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/SetGlobalPropertyResponse.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/SetGlobalPropertyResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/mgt/package-info.java b/src/generated/java/com/rapid_i/repository/wsimport/mgt/package-info.java index 072617a66..7ddbd17b2 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/mgt/package-info.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/mgt/package-info.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapid_i/repository/wsimport/package-info.java b/src/generated/java/com/rapid_i/repository/wsimport/package-info.java index 3032c0ec9..132278faf 100644 --- a/src/generated/java/com/rapid_i/repository/wsimport/package-info.java +++ b/src/generated/java/com/rapid_i/repository/wsimport/package-info.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionLexer.java b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionLexer.java index 97bedf984..722cdeb49 100644 --- a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionLexer.java +++ b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionLexer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParser.java b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParser.java index 2d6d5e0c3..148bf3ce1 100644 --- a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParser.java +++ b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserBaseListener.java b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserBaseListener.java index b6c28f79b..de773ce96 100644 --- a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserBaseListener.java +++ b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserBaseListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserBaseVisitor.java b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserBaseVisitor.java index eb21d88ea..8fcc8b429 100644 --- a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserBaseVisitor.java +++ b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserBaseVisitor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserListener.java b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserListener.java index e1308b997..5f209599c 100644 --- a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserListener.java +++ b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserVisitor.java b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserVisitor.java index 15247f9a6..552d7be3f 100644 --- a/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserVisitor.java +++ b/src/generated/java/com/rapidminer/tools/expression/internal/antlr/FunctionExpressionParserVisitor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/BreakpointListener.java b/src/main/java/com/rapidminer/BreakpointListener.java index ec5982e3c..3bf1fe0d6 100644 --- a/src/main/java/com/rapidminer/BreakpointListener.java +++ b/src/main/java/com/rapidminer/BreakpointListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/ConsoleInputHandler.java b/src/main/java/com/rapidminer/ConsoleInputHandler.java index ac0b547ab..c8c55a426 100644 --- a/src/main/java/com/rapidminer/ConsoleInputHandler.java +++ b/src/main/java/com/rapidminer/ConsoleInputHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/Experiment.java b/src/main/java/com/rapidminer/Experiment.java index 95050b62b..2429a0a71 100644 --- a/src/main/java/com/rapidminer/Experiment.java +++ b/src/main/java/com/rapidminer/Experiment.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/FileProcessLocation.java b/src/main/java/com/rapidminer/FileProcessLocation.java index 1852914af..7539fa363 100644 --- a/src/main/java/com/rapidminer/FileProcessLocation.java +++ b/src/main/java/com/rapidminer/FileProcessLocation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/InputHandler.java b/src/main/java/com/rapidminer/InputHandler.java index b7a35e7d2..95cd53ada 100644 --- a/src/main/java/com/rapidminer/InputHandler.java +++ b/src/main/java/com/rapidminer/InputHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/LoggingListener.java b/src/main/java/com/rapidminer/LoggingListener.java index 2179c23d1..7c170b3d3 100644 --- a/src/main/java/com/rapidminer/LoggingListener.java +++ b/src/main/java/com/rapidminer/LoggingListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/MacroHandler.java b/src/main/java/com/rapidminer/MacroHandler.java index c1e4fb9b3..3e10c8bd3 100644 --- a/src/main/java/com/rapidminer/MacroHandler.java +++ b/src/main/java/com/rapidminer/MacroHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/NoBugError.java b/src/main/java/com/rapidminer/NoBugError.java index 7fd389a5e..16bcd92fd 100644 --- a/src/main/java/com/rapidminer/NoBugError.java +++ b/src/main/java/com/rapidminer/NoBugError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/NoOpUserError.java b/src/main/java/com/rapidminer/NoOpUserError.java index fcaae2256..f77535db8 100644 --- a/src/main/java/com/rapidminer/NoOpUserError.java +++ b/src/main/java/com/rapidminer/NoOpUserError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/ObjectVisualizer.java b/src/main/java/com/rapidminer/ObjectVisualizer.java index 3ec627c17..f18449ad0 100644 --- a/src/main/java/com/rapidminer/ObjectVisualizer.java +++ b/src/main/java/com/rapidminer/ObjectVisualizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/OperatorLibraryService.java b/src/main/java/com/rapidminer/OperatorLibraryService.java index 8309c4dcd..4dc7411a2 100644 --- a/src/main/java/com/rapidminer/OperatorLibraryService.java +++ b/src/main/java/com/rapidminer/OperatorLibraryService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/Process.java b/src/main/java/com/rapidminer/Process.java index 6625c1b45..5e1d62c39 100644 --- a/src/main/java/com/rapidminer/Process.java +++ b/src/main/java/com/rapidminer/Process.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -42,9 +42,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; - import javax.swing.event.EventListenerList; -import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.xml.sax.InputSource; @@ -58,6 +56,7 @@ import com.rapidminer.gui.tools.ProgressThread; import com.rapidminer.gui.tools.ProgressThreadStoppedException; import com.rapidminer.io.process.XMLImporter; +import com.rapidminer.io.process.XMLTools; import com.rapidminer.license.violation.LicenseViolation; import com.rapidminer.operator.Annotations; import com.rapidminer.operator.DebugMode; @@ -105,6 +104,7 @@ import com.rapidminer.tools.WebServiceTools; import com.rapidminer.tools.WrapperLoggingHandler; import com.rapidminer.tools.XMLException; +import com.rapidminer.tools.XMLParserException; import com.rapidminer.tools.container.Pair; import com.rapidminer.tools.usagestats.ActionStatisticsCollector; @@ -1192,7 +1192,7 @@ public final IOContainer run(final IOContainer input, final int logVerbosity, fi */ public final IOContainer run(final IOContainer input, int logVerbosity, final Map macroMap, final boolean storeOutput) throws OperatorException { - ActionStatisticsCollector.getInstance().logExecutionStarted(); + ActionStatisticsCollector.getInstance().logExecutionStarted(this); try { // make sure the process flow filter is registered ProcessFlowFilter filter = ProcessFlowFilterRegistry.INSTANCE.getProcessFlowFilter(); @@ -1322,7 +1322,7 @@ private IOContainer execute(IOContainer input, boolean storeOutput, Handler logH getLogger().log(Level.INFO, () -> "Process finished successfully after " + Tools.formatDuration(end - start)); } - ActionStatisticsCollector.getInstance().logExecutionSuccess(); + ActionStatisticsCollector.getInstance().logExecutionSuccess(this); return result; } catch (ProcessStoppedException e) { @@ -1502,7 +1502,7 @@ public void readProcess(final Reader in, final ProgressListener progressListener progressListener.setCompleted(0); } try { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(in)); + Document document = XMLTools.createDocumentBuilder().parse(new InputSource(in)); if (progressListener != null) { progressListener.setCompleted(20); } @@ -1512,7 +1512,7 @@ public void readProcess(final Reader in, final ProgressListener progressListener nameMapBackup = operatorNameMap; rootOperator.clear(Port.CLEAR_ALL); - } catch (javax.xml.parsers.ParserConfigurationException e) { + } catch (XMLParserException e) { throw new XMLException(e.toString(), e); } catch (SAXException e) { throw new XMLException("Cannot parse document: " + e.getMessage(), e); diff --git a/src/main/java/com/rapidminer/ProcessContext.java b/src/main/java/com/rapidminer/ProcessContext.java index 6680f5f8d..97a887946 100644 --- a/src/main/java/com/rapidminer/ProcessContext.java +++ b/src/main/java/com/rapidminer/ProcessContext.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/ProcessListener.java b/src/main/java/com/rapidminer/ProcessListener.java index 2bb40c335..dff8d45fa 100644 --- a/src/main/java/com/rapidminer/ProcessListener.java +++ b/src/main/java/com/rapidminer/ProcessListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/ProcessLocation.java b/src/main/java/com/rapidminer/ProcessLocation.java index 1a14e9d95..54c805154 100644 --- a/src/main/java/com/rapidminer/ProcessLocation.java +++ b/src/main/java/com/rapidminer/ProcessLocation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/ProcessSetupListener.java b/src/main/java/com/rapidminer/ProcessSetupListener.java index 5344ee0ff..335f7d21a 100644 --- a/src/main/java/com/rapidminer/ProcessSetupListener.java +++ b/src/main/java/com/rapidminer/ProcessSetupListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/ProcessStateListener.java b/src/main/java/com/rapidminer/ProcessStateListener.java index fab8038ea..778bb3932 100644 --- a/src/main/java/com/rapidminer/ProcessStateListener.java +++ b/src/main/java/com/rapidminer/ProcessStateListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/ProcessStorageListener.java b/src/main/java/com/rapidminer/ProcessStorageListener.java index 17b5b6907..0412d132a 100644 --- a/src/main/java/com/rapidminer/ProcessStorageListener.java +++ b/src/main/java/com/rapidminer/ProcessStorageListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/RapidMiner.java b/src/main/java/com/rapidminer/RapidMiner.java index 01af57aff..2d93a575a 100644 --- a/src/main/java/com/rapidminer/RapidMiner.java +++ b/src/main/java/com/rapidminer/RapidMiner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -670,7 +670,6 @@ public static void init() { * {@link LicenseLocation} from {@link ProductConstraintManager} will be used. */ public static void init(final Product product, final LicenseLocation licenseLocation) { - RapidMiner.splashMessage("init_i18n"); I18N.getErrorBundle(); @@ -734,6 +733,10 @@ public static void init(final Product product, final LicenseLocation licenseLoca Plugin.initAll(); Plugin.initPluginSplashTexts(RapidMiner.splashScreen); + // initialize renderers + RapidMiner.splashMessage("init_renderers"); + RendererService.init(); + RapidMiner.splashMessage("init_ops"); OperatorService.init(); @@ -746,9 +749,7 @@ public static void init(final Product product, final LicenseLocation licenseLoca RapidMiner.splashMessage("init_configurables"); ConfigurationManager.getInstance().initialize(); - // initialize renderers - RapidMiner.splashMessage("init_renderers"); - RendererService.init(); + // initialize xml serialization RapidMiner.splashMessage("xml_serialization"); diff --git a/src/main/java/com/rapidminer/RapidMinerVersion.java b/src/main/java/com/rapidminer/RapidMinerVersion.java index 34a30144c..17661860f 100644 --- a/src/main/java/com/rapidminer/RapidMinerVersion.java +++ b/src/main/java/com/rapidminer/RapidMinerVersion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/RepositoryProcessLocation.java b/src/main/java/com/rapidminer/RepositoryProcessLocation.java index 6dfb9b498..e2eed1c14 100644 --- a/src/main/java/com/rapidminer/RepositoryProcessLocation.java +++ b/src/main/java/com/rapidminer/RepositoryProcessLocation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/core/license/ActionStatisticsLicenseManagerListener.java b/src/main/java/com/rapidminer/core/license/ActionStatisticsLicenseManagerListener.java index 1815b10e3..b1b3c6d39 100644 --- a/src/main/java/com/rapidminer/core/license/ActionStatisticsLicenseManagerListener.java +++ b/src/main/java/com/rapidminer/core/license/ActionStatisticsLicenseManagerListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/core/license/DatabaseConstraintViolationException.java b/src/main/java/com/rapidminer/core/license/DatabaseConstraintViolationException.java index a662c60dd..a3f6fbd2e 100644 --- a/src/main/java/com/rapidminer/core/license/DatabaseConstraintViolationException.java +++ b/src/main/java/com/rapidminer/core/license/DatabaseConstraintViolationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/core/license/LicenseViolationException.java b/src/main/java/com/rapidminer/core/license/LicenseViolationException.java index fc0d9eec8..7e7fdedea 100644 --- a/src/main/java/com/rapidminer/core/license/LicenseViolationException.java +++ b/src/main/java/com/rapidminer/core/license/LicenseViolationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/core/license/OpenSourceLicense.java b/src/main/java/com/rapidminer/core/license/OpenSourceLicense.java index 7e38c0eb5..6feb94f7e 100644 --- a/src/main/java/com/rapidminer/core/license/OpenSourceLicense.java +++ b/src/main/java/com/rapidminer/core/license/OpenSourceLicense.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/core/license/OpenSourceLicenseManager.java b/src/main/java/com/rapidminer/core/license/OpenSourceLicenseManager.java index 711b273ef..dc854ce06 100644 --- a/src/main/java/com/rapidminer/core/license/OpenSourceLicenseManager.java +++ b/src/main/java/com/rapidminer/core/license/OpenSourceLicenseManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/core/license/OpenSourceUser.java b/src/main/java/com/rapidminer/core/license/OpenSourceUser.java index 87a0519fb..af284b8cf 100644 --- a/src/main/java/com/rapidminer/core/license/OpenSourceUser.java +++ b/src/main/java/com/rapidminer/core/license/OpenSourceUser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/core/license/ProductConstraintManager.java b/src/main/java/com/rapidminer/core/license/ProductConstraintManager.java index aa32dcd2c..78bbf0a7b 100644 --- a/src/main/java/com/rapidminer/core/license/ProductConstraintManager.java +++ b/src/main/java/com/rapidminer/core/license/ProductConstraintManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/AbstractDataTable.java b/src/main/java/com/rapidminer/datatable/AbstractDataTable.java index 019d82ec5..9f0b7ed14 100644 --- a/src/main/java/com/rapidminer/datatable/AbstractDataTable.java +++ b/src/main/java/com/rapidminer/datatable/AbstractDataTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -21,11 +21,12 @@ import java.io.IOException; import java.io.PrintWriter; import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import org.jfree.data.Range; @@ -48,8 +49,8 @@ public abstract class AbstractDataTable implements DataTable, Tableable { /** The list of data table listeners. */ - private List> weakReferencedListeners = new LinkedList<>(); - private List listeners = new LinkedList<>(); + private List> weakReferencedListeners = Collections.synchronizedList(new ArrayList<>()); + private List listeners = Collections.synchronizedList(new ArrayList<>()); /** The name of the table. */ private String name; @@ -116,10 +117,11 @@ public void removeDataTableListener(DataTableListener dataTableListener) { protected void fireEvent() { // copy to avoid ConcurrentModification - List> clone = new LinkedList<>(weakReferencedListeners); - Iterator> i = clone.iterator(); - while (i.hasNext()) { - WeakReference reference = i.next(); + List> clonedWeakListeners; + synchronized (weakReferencedListeners) { + clonedWeakListeners = new ArrayList<>(weakReferencedListeners); + } + for (WeakReference reference : clonedWeakListeners) { DataTableListener listener = reference.get(); if (listener != null) { listener.dataTableUpdated(this); @@ -128,7 +130,11 @@ protected void fireEvent() { } } - for (DataTableListener l : listeners) { + List clonedListeners; + synchronized (listeners) { + clonedListeners = new ArrayList<>(listeners); + } + for (DataTableListener l : clonedListeners) { l.dataTableUpdated(this); } } diff --git a/src/main/java/com/rapidminer/datatable/BidirectionalMappingProvider.java b/src/main/java/com/rapidminer/datatable/BidirectionalMappingProvider.java index 623932f46..81c16812d 100644 --- a/src/main/java/com/rapidminer/datatable/BidirectionalMappingProvider.java +++ b/src/main/java/com/rapidminer/datatable/BidirectionalMappingProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/CorrelationMatrixRow2DataTableRowIterator.java b/src/main/java/com/rapidminer/datatable/CorrelationMatrixRow2DataTableRowIterator.java index 0de435c35..96cccebc1 100644 --- a/src/main/java/com/rapidminer/datatable/CorrelationMatrixRow2DataTableRowIterator.java +++ b/src/main/java/com/rapidminer/datatable/CorrelationMatrixRow2DataTableRowIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/CorrelationMatrixRow2DataTableRowWrapper.java b/src/main/java/com/rapidminer/datatable/CorrelationMatrixRow2DataTableRowWrapper.java index 1996d45e5..4a3334107 100644 --- a/src/main/java/com/rapidminer/datatable/CorrelationMatrixRow2DataTableRowWrapper.java +++ b/src/main/java/com/rapidminer/datatable/CorrelationMatrixRow2DataTableRowWrapper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTable.java b/src/main/java/com/rapidminer/datatable/DataTable.java index 76afd7c47..e3e11210c 100644 --- a/src/main/java/com/rapidminer/datatable/DataTable.java +++ b/src/main/java/com/rapidminer/datatable/DataTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTableExampleSetAdapter.java b/src/main/java/com/rapidminer/datatable/DataTableExampleSetAdapter.java index f94b2d42b..4a74d8670 100644 --- a/src/main/java/com/rapidminer/datatable/DataTableExampleSetAdapter.java +++ b/src/main/java/com/rapidminer/datatable/DataTableExampleSetAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTableFilterCondition.java b/src/main/java/com/rapidminer/datatable/DataTableFilterCondition.java index e54cad16b..b17bcc9e7 100644 --- a/src/main/java/com/rapidminer/datatable/DataTableFilterCondition.java +++ b/src/main/java/com/rapidminer/datatable/DataTableFilterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTableKernelModelAdapter.java b/src/main/java/com/rapidminer/datatable/DataTableKernelModelAdapter.java index e2c1f659e..aef5469a8 100644 --- a/src/main/java/com/rapidminer/datatable/DataTableKernelModelAdapter.java +++ b/src/main/java/com/rapidminer/datatable/DataTableKernelModelAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTableListener.java b/src/main/java/com/rapidminer/datatable/DataTableListener.java index 8bb856f7a..7c8a2945b 100644 --- a/src/main/java/com/rapidminer/datatable/DataTableListener.java +++ b/src/main/java/com/rapidminer/datatable/DataTableListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTableMappingProvider.java b/src/main/java/com/rapidminer/datatable/DataTableMappingProvider.java index a7799b9a6..1a5007bb9 100644 --- a/src/main/java/com/rapidminer/datatable/DataTableMappingProvider.java +++ b/src/main/java/com/rapidminer/datatable/DataTableMappingProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTableNaturalSortProvider.java b/src/main/java/com/rapidminer/datatable/DataTableNaturalSortProvider.java index 2c604ed40..5ff3645cc 100644 --- a/src/main/java/com/rapidminer/datatable/DataTableNaturalSortProvider.java +++ b/src/main/java/com/rapidminer/datatable/DataTableNaturalSortProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTablePairwiseMatrixExtractionAdapter.java b/src/main/java/com/rapidminer/datatable/DataTablePairwiseMatrixExtractionAdapter.java index 54299fe0d..a4b628acd 100644 --- a/src/main/java/com/rapidminer/datatable/DataTablePairwiseMatrixExtractionAdapter.java +++ b/src/main/java/com/rapidminer/datatable/DataTablePairwiseMatrixExtractionAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTableRow.java b/src/main/java/com/rapidminer/datatable/DataTableRow.java index 9a4760c76..5a20eb330 100644 --- a/src/main/java/com/rapidminer/datatable/DataTableRow.java +++ b/src/main/java/com/rapidminer/datatable/DataTableRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTableSortProvider.java b/src/main/java/com/rapidminer/datatable/DataTableSortProvider.java index ad58d59ad..6ae662716 100644 --- a/src/main/java/com/rapidminer/datatable/DataTableSortProvider.java +++ b/src/main/java/com/rapidminer/datatable/DataTableSortProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTableSymmetricalMatrixAdapter.java b/src/main/java/com/rapidminer/datatable/DataTableSymmetricalMatrixAdapter.java index ef635bab9..63ee1a5c2 100644 --- a/src/main/java/com/rapidminer/datatable/DataTableSymmetricalMatrixAdapter.java +++ b/src/main/java/com/rapidminer/datatable/DataTableSymmetricalMatrixAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/DataTableView.java b/src/main/java/com/rapidminer/datatable/DataTableView.java index cf62b3eb5..661cc211c 100644 --- a/src/main/java/com/rapidminer/datatable/DataTableView.java +++ b/src/main/java/com/rapidminer/datatable/DataTableView.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/Example2DataTableRowIterator.java b/src/main/java/com/rapidminer/datatable/Example2DataTableRowIterator.java index 1b99cd188..8e8dfd674 100644 --- a/src/main/java/com/rapidminer/datatable/Example2DataTableRowIterator.java +++ b/src/main/java/com/rapidminer/datatable/Example2DataTableRowIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/Example2DataTableRowWrapper.java b/src/main/java/com/rapidminer/datatable/Example2DataTableRowWrapper.java index 1d85188ee..39dee9c5e 100644 --- a/src/main/java/com/rapidminer/datatable/Example2DataTableRowWrapper.java +++ b/src/main/java/com/rapidminer/datatable/Example2DataTableRowWrapper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/FilteredDataTable.java b/src/main/java/com/rapidminer/datatable/FilteredDataTable.java index eb809ad05..f384a9091 100644 --- a/src/main/java/com/rapidminer/datatable/FilteredDataTable.java +++ b/src/main/java/com/rapidminer/datatable/FilteredDataTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/GnuPlotDataTableHandler.java b/src/main/java/com/rapidminer/datatable/GnuPlotDataTableHandler.java index a606275e4..06c6853c2 100644 --- a/src/main/java/com/rapidminer/datatable/GnuPlotDataTableHandler.java +++ b/src/main/java/com/rapidminer/datatable/GnuPlotDataTableHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/KernelModelRow2DataTableRowWrapper.java b/src/main/java/com/rapidminer/datatable/KernelModelRow2DataTableRowWrapper.java index bdb9e6277..57c9d5d10 100644 --- a/src/main/java/com/rapidminer/datatable/KernelModelRow2DataTableRowWrapper.java +++ b/src/main/java/com/rapidminer/datatable/KernelModelRow2DataTableRowWrapper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/NominalSortingDataTableMapping.java b/src/main/java/com/rapidminer/datatable/NominalSortingDataTableMapping.java index 28d88600a..a8d8c5489 100644 --- a/src/main/java/com/rapidminer/datatable/NominalSortingDataTableMapping.java +++ b/src/main/java/com/rapidminer/datatable/NominalSortingDataTableMapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/PairwiseMatrix2DataTableRowIterator.java b/src/main/java/com/rapidminer/datatable/PairwiseMatrix2DataTableRowIterator.java index 0dd11ac83..c363bcff1 100644 --- a/src/main/java/com/rapidminer/datatable/PairwiseMatrix2DataTableRowIterator.java +++ b/src/main/java/com/rapidminer/datatable/PairwiseMatrix2DataTableRowIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/PairwiseMatrix2DataTableRowWrapper.java b/src/main/java/com/rapidminer/datatable/PairwiseMatrix2DataTableRowWrapper.java index 59371013a..ad23e604c 100644 --- a/src/main/java/com/rapidminer/datatable/PairwiseMatrix2DataTableRowWrapper.java +++ b/src/main/java/com/rapidminer/datatable/PairwiseMatrix2DataTableRowWrapper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/RangeFilterCondition.java b/src/main/java/com/rapidminer/datatable/RangeFilterCondition.java index 44cd0f734..5e5faf930 100644 --- a/src/main/java/com/rapidminer/datatable/RangeFilterCondition.java +++ b/src/main/java/com/rapidminer/datatable/RangeFilterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/RegionFilterCondition.java b/src/main/java/com/rapidminer/datatable/RegionFilterCondition.java index f78a43d54..8bbd383ad 100644 --- a/src/main/java/com/rapidminer/datatable/RegionFilterCondition.java +++ b/src/main/java/com/rapidminer/datatable/RegionFilterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/SimpleDataTable.java b/src/main/java/com/rapidminer/datatable/SimpleDataTable.java index 374cca915..754b23dd0 100644 --- a/src/main/java/com/rapidminer/datatable/SimpleDataTable.java +++ b/src/main/java/com/rapidminer/datatable/SimpleDataTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/SimpleDataTableRow.java b/src/main/java/com/rapidminer/datatable/SimpleDataTableRow.java index 75f7c336b..f094c9db6 100644 --- a/src/main/java/com/rapidminer/datatable/SimpleDataTableRow.java +++ b/src/main/java/com/rapidminer/datatable/SimpleDataTableRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/SortedDataTableView.java b/src/main/java/com/rapidminer/datatable/SortedDataTableView.java index 2e63ccae6..6e39d7908 100644 --- a/src/main/java/com/rapidminer/datatable/SortedDataTableView.java +++ b/src/main/java/com/rapidminer/datatable/SortedDataTableView.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/ValueMappingDataTableRow.java b/src/main/java/com/rapidminer/datatable/ValueMappingDataTableRow.java index d56196223..0e18a9cc0 100644 --- a/src/main/java/com/rapidminer/datatable/ValueMappingDataTableRow.java +++ b/src/main/java/com/rapidminer/datatable/ValueMappingDataTableRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/datatable/ValueMappingDataTableView.java b/src/main/java/com/rapidminer/datatable/ValueMappingDataTableView.java index 5e5b2824a..be4dccd27 100644 --- a/src/main/java/com/rapidminer/datatable/ValueMappingDataTableView.java +++ b/src/main/java/com/rapidminer/datatable/ValueMappingDataTableView.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/AbstractAttributes.java b/src/main/java/com/rapidminer/example/AbstractAttributes.java index c99baf6da..de13ff0bd 100644 --- a/src/main/java/com/rapidminer/example/AbstractAttributes.java +++ b/src/main/java/com/rapidminer/example/AbstractAttributes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/Attribute.java b/src/main/java/com/rapidminer/example/Attribute.java index a00dd8f67..760c258b6 100644 --- a/src/main/java/com/rapidminer/example/Attribute.java +++ b/src/main/java/com/rapidminer/example/Attribute.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -151,9 +151,9 @@ public interface Attribute extends Cloneable, Serializable { public NominalMapping getMapping(); /** - * Returns the nominal mapping between nominal values and internal double representations. - * Please note that invoking this method might result in an exception for non-nominal - * attributes. + * Sets the nominal mapping between nominal values and internal double representations. Please note that invoking + * this method might result in an exception for non-nominal attributes. This method might copy the input parameter + * before storing it. */ public void setMapping(NominalMapping nominalMapping); diff --git a/src/main/java/com/rapidminer/example/AttributeDescription.java b/src/main/java/com/rapidminer/example/AttributeDescription.java index 80f64df61..836c11a5d 100644 --- a/src/main/java/com/rapidminer/example/AttributeDescription.java +++ b/src/main/java/com/rapidminer/example/AttributeDescription.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/AttributeIterator.java b/src/main/java/com/rapidminer/example/AttributeIterator.java index 8edbef01a..4856c6a55 100644 --- a/src/main/java/com/rapidminer/example/AttributeIterator.java +++ b/src/main/java/com/rapidminer/example/AttributeIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/AttributeRole.java b/src/main/java/com/rapidminer/example/AttributeRole.java index 658e2a18b..50d2d4e3a 100644 --- a/src/main/java/com/rapidminer/example/AttributeRole.java +++ b/src/main/java/com/rapidminer/example/AttributeRole.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/AttributeRoleIterator.java b/src/main/java/com/rapidminer/example/AttributeRoleIterator.java index a7284d658..13fe314c0 100644 --- a/src/main/java/com/rapidminer/example/AttributeRoleIterator.java +++ b/src/main/java/com/rapidminer/example/AttributeRoleIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/AttributeTransformation.java b/src/main/java/com/rapidminer/example/AttributeTransformation.java index 367617dee..0b25475e2 100644 --- a/src/main/java/com/rapidminer/example/AttributeTransformation.java +++ b/src/main/java/com/rapidminer/example/AttributeTransformation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/AttributeTypeException.java b/src/main/java/com/rapidminer/example/AttributeTypeException.java index 62fa504c3..8ccff9c02 100644 --- a/src/main/java/com/rapidminer/example/AttributeTypeException.java +++ b/src/main/java/com/rapidminer/example/AttributeTypeException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/AttributeWeight.java b/src/main/java/com/rapidminer/example/AttributeWeight.java index 05a04a507..dfaa6efd6 100644 --- a/src/main/java/com/rapidminer/example/AttributeWeight.java +++ b/src/main/java/com/rapidminer/example/AttributeWeight.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/AttributeWeights.java b/src/main/java/com/rapidminer/example/AttributeWeights.java index cb2bd8cef..076a63093 100644 --- a/src/main/java/com/rapidminer/example/AttributeWeights.java +++ b/src/main/java/com/rapidminer/example/AttributeWeights.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,13 +18,6 @@ */ package com.rapidminer.example; -import com.rapidminer.RapidMiner; -import com.rapidminer.datatable.DataTable; -import com.rapidminer.datatable.SimpleDataTable; -import com.rapidminer.datatable.SimpleDataTableRow; -import com.rapidminer.tools.Tools; -import com.rapidminer.tools.math.AverageVector; - import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -40,15 +33,20 @@ import java.util.Map.Entry; import java.util.Set; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import com.rapidminer.RapidMiner; +import com.rapidminer.datatable.DataTable; +import com.rapidminer.datatable.SimpleDataTable; +import com.rapidminer.datatable.SimpleDataTableRow; +import com.rapidminer.io.process.XMLTools; +import com.rapidminer.tools.Tools; +import com.rapidminer.tools.math.AverageVector; + /** * AttributeWeights holds the information about the weights of attributes of an example set. It is @@ -290,11 +288,9 @@ public static AttributeWeights load(File file) throws IOException { AttributeWeights result = new AttributeWeights(); Document document = null; try { - document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file); + document = XMLTools.createDocumentBuilder().parse(file); } catch (SAXException e1) { throw new IOException(e1.getMessage()); - } catch (ParserConfigurationException e1) { - throw new IOException(e1.getMessage()); } Element attributeWeightsElement = document.getDocumentElement(); diff --git a/src/main/java/com/rapidminer/example/Attributes.java b/src/main/java/com/rapidminer/example/Attributes.java index aaab3de2c..4aab56446 100644 --- a/src/main/java/com/rapidminer/example/Attributes.java +++ b/src/main/java/com/rapidminer/example/Attributes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/DelegateAttributes.java b/src/main/java/com/rapidminer/example/DelegateAttributes.java index e21c75376..446681e84 100644 --- a/src/main/java/com/rapidminer/example/DelegateAttributes.java +++ b/src/main/java/com/rapidminer/example/DelegateAttributes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/Example.java b/src/main/java/com/rapidminer/example/Example.java index 2c0118a43..642918255 100644 --- a/src/main/java/com/rapidminer/example/Example.java +++ b/src/main/java/com/rapidminer/example/Example.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/ExampleFormatter.java b/src/main/java/com/rapidminer/example/ExampleFormatter.java index 8001f17d8..af427f356 100644 --- a/src/main/java/com/rapidminer/example/ExampleFormatter.java +++ b/src/main/java/com/rapidminer/example/ExampleFormatter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/ExampleReader.java b/src/main/java/com/rapidminer/example/ExampleReader.java index 7d814b6df..e39151d1d 100644 --- a/src/main/java/com/rapidminer/example/ExampleReader.java +++ b/src/main/java/com/rapidminer/example/ExampleReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/ExampleSet.java b/src/main/java/com/rapidminer/example/ExampleSet.java index 8bb65b0e3..07ec22c9f 100644 --- a/src/main/java/com/rapidminer/example/ExampleSet.java +++ b/src/main/java/com/rapidminer/example/ExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/ExampleSetFactory.java b/src/main/java/com/rapidminer/example/ExampleSetFactory.java index 954f32253..c35a461b4 100644 --- a/src/main/java/com/rapidminer/example/ExampleSetFactory.java +++ b/src/main/java/com/rapidminer/example/ExampleSetFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/FastExample2SparseTransform.java b/src/main/java/com/rapidminer/example/FastExample2SparseTransform.java index 4a4792c06..30ce98b8d 100644 --- a/src/main/java/com/rapidminer/example/FastExample2SparseTransform.java +++ b/src/main/java/com/rapidminer/example/FastExample2SparseTransform.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/FormatterException.java b/src/main/java/com/rapidminer/example/FormatterException.java index 18dbb4234..bbd581374 100644 --- a/src/main/java/com/rapidminer/example/FormatterException.java +++ b/src/main/java/com/rapidminer/example/FormatterException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/MinMaxStatistics.java b/src/main/java/com/rapidminer/example/MinMaxStatistics.java index a7a0518d7..dce0afe80 100644 --- a/src/main/java/com/rapidminer/example/MinMaxStatistics.java +++ b/src/main/java/com/rapidminer/example/MinMaxStatistics.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/NominalStatistics.java b/src/main/java/com/rapidminer/example/NominalStatistics.java index c82dcff51..c576aa85a 100644 --- a/src/main/java/com/rapidminer/example/NominalStatistics.java +++ b/src/main/java/com/rapidminer/example/NominalStatistics.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/NumericalStatistics.java b/src/main/java/com/rapidminer/example/NumericalStatistics.java index 3da576a09..81e4018b6 100644 --- a/src/main/java/com/rapidminer/example/NumericalStatistics.java +++ b/src/main/java/com/rapidminer/example/NumericalStatistics.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/RegularAttributeIterator.java b/src/main/java/com/rapidminer/example/RegularAttributeIterator.java index 7c4892bfb..ebeebf745 100644 --- a/src/main/java/com/rapidminer/example/RegularAttributeIterator.java +++ b/src/main/java/com/rapidminer/example/RegularAttributeIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/SimpleAttributes.java b/src/main/java/com/rapidminer/example/SimpleAttributes.java index 79fbdc399..c8754b358 100644 --- a/src/main/java/com/rapidminer/example/SimpleAttributes.java +++ b/src/main/java/com/rapidminer/example/SimpleAttributes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/Statistics.java b/src/main/java/com/rapidminer/example/Statistics.java index fa78cc070..fbddfbd79 100644 --- a/src/main/java/com/rapidminer/example/Statistics.java +++ b/src/main/java/com/rapidminer/example/Statistics.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/Tools.java b/src/main/java/com/rapidminer/example/Tools.java index 2e911fb7a..a7b5ca1ef 100644 --- a/src/main/java/com/rapidminer/example/Tools.java +++ b/src/main/java/com/rapidminer/example/Tools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -546,9 +546,9 @@ public static void onlyFiniteValues(ExampleSet exampleSet, boolean allowMissing, * * @param es * the example set - * @throws UserError + * @throws UserError */ - public static void onlyNumericalAttributes(ExampleSet es, String task) throws UserError { + public static void onlyNumericalAttributes(ExampleSet es, String task) throws UserError { onlyNumericalAttributes(es.getAttributes(), task); } @@ -557,9 +557,9 @@ public static void onlyNumericalAttributes(ExampleSet es, String task) throws Us * * @param es * the example set - * @throws UserError + * @throws UserError */ - public static void onlyNumericalAttributes(Attributes attributes, String task) throws UserError { + public static void onlyNumericalAttributes(Attributes attributes, String task) throws UserError { for (Attribute attribute : attributes) { if (!Ontology.ATTRIBUTE_VALUE_TYPE.isA(attribute.getValueType(), Ontology.NUMERICAL)) { throw new UserError(null, 104, task, attribute.getName()); @@ -572,18 +572,18 @@ public static void onlyNumericalAttributes(Attributes attributes, String task) t * * @param es * the example set - * @throws UserError + * @throws UserError */ - public static void onlyNominalAttributes(ExampleSet es, String task) throws UserError { + public static void onlyNominalAttributes(ExampleSet es, String task) throws UserError { onlyNominalAttributes(es.getAttributes(), task); } /** * The attributes all have to be nominal or binary. * - * @throws UserError + * @throws UserError */ - public static void onlyNominalAttributes(Attributes attributes, String task) throws UserError { + public static void onlyNominalAttributes(Attributes attributes, String task) throws UserError { for (Attribute attribute : attributes) { if (!Ontology.ATTRIBUTE_VALUE_TYPE.isA(attribute.getValueType(), Ontology.NOMINAL)) { throw new UserError(null, 103, task, attribute.getName()); @@ -596,10 +596,10 @@ public static void onlyNominalAttributes(Attributes attributes, String task) thr * * @param exampleSet * the example set - * @throws UserError + * @throws UserError * */ - public static void maximumTwoNominalAttributes(ExampleSet exampleSet, String task) throws UserError { + public static void maximumTwoNominalAttributes(ExampleSet exampleSet, String task) throws UserError { for (Attribute attribute : exampleSet.getAttributes()) { int valueType = attribute.getValueType(); boolean throwError = false; @@ -622,9 +622,9 @@ public static void maximumTwoNominalAttributes(ExampleSet exampleSet, String tas * * @param es * the example set - * @throws UserError + * @throws UserError */ - public static void isLabelled(ExampleSet es) throws UserError { + public static void isLabelled(ExampleSet es) throws UserError { if (es.getAttributes().getLabel() == null) { throw new UserError(null, 105); } @@ -635,9 +635,9 @@ public static void isLabelled(ExampleSet es) throws UserError { * * @param es * the example set - * @throws UserError + * @throws UserError */ - public static void isIdTagged(ExampleSet es) throws UserError { + public static void isIdTagged(ExampleSet es) throws UserError { if (es.getAttributes().getId() == null) { throw new UserError(null, 129); } @@ -675,9 +675,9 @@ public static void checkIds(ExampleSet exampleSet) throws UserError { * @param es * the example set * @see #hasNominalLabels(ExampleSet, String) hasNominalLabels(ExampleSet, "clustering") - * @throws UserError + * @throws UserError */ - public static void hasNominalLabels(ExampleSet es) throws UserError { + public static void hasNominalLabels(ExampleSet es) throws UserError { hasNominalLabels(es, "clustering"); } @@ -706,29 +706,29 @@ public static void hasNominalLabels(ExampleSet es, String algorithm) throws User * * @param es * the example set - * @throws UserError + * @throws UserError */ - public static void isNonEmpty(ExampleSet es) throws UserError { + public static void isNonEmpty(ExampleSet es) throws UserError { if (es.size() == 0) { throw new UserError(null, 117); } } /** - * The example set has to contain at least one regular attribute. - * - * @param es - * the example set - * @throws UserError + * The example set has to contain at least one regular attribute. + * + * @param es + * the example set + * @throws UserError * @since 7.6 - */ - public static void hasRegularAttributes(ExampleSet es) throws UserError { - if (es.getAttributes().size() == 0) { - throw new UserError(null, 106); - } - } - - /** + */ + public static void hasRegularAttributes(ExampleSet es) throws UserError { + if (es.getAttributes().size() == 0) { + throw new UserError(null, 106); + } + } + + /** * Returns a new example set based on a fresh memory example table sampled from the given set. */ public static ExampleSet getLinearSubsetCopy(ExampleSet exampleSet, int size, int offset) { diff --git a/src/main/java/com/rapidminer/example/UnknownStatistics.java b/src/main/java/com/rapidminer/example/UnknownStatistics.java index 978799df6..cb6e7ab60 100644 --- a/src/main/java/com/rapidminer/example/UnknownStatistics.java +++ b/src/main/java/com/rapidminer/example/UnknownStatistics.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/WeightedNumericalStatistics.java b/src/main/java/com/rapidminer/example/WeightedNumericalStatistics.java index 0cf398c8c..dd543ff67 100644 --- a/src/main/java/com/rapidminer/example/WeightedNumericalStatistics.java +++ b/src/main/java/com/rapidminer/example/WeightedNumericalStatistics.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/AbstractExampleReader.java b/src/main/java/com/rapidminer/example/set/AbstractExampleReader.java index 1456bb379..b55a26ef9 100644 --- a/src/main/java/com/rapidminer/example/set/AbstractExampleReader.java +++ b/src/main/java/com/rapidminer/example/set/AbstractExampleReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/AbstractExampleSet.java b/src/main/java/com/rapidminer/example/set/AbstractExampleSet.java index bce554fc2..dbf54c79e 100644 --- a/src/main/java/com/rapidminer/example/set/AbstractExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/AbstractExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -33,7 +33,6 @@ import java.util.List; import java.util.Map; import java.util.zip.GZIPOutputStream; - import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -545,4 +544,21 @@ public double getStatistics(Attribute attribute, String statisticsName, String s return Double.NaN; } + + /** + * Returns {@code true} if and only if the view implemented by this {@link ExampleSet} is thread-safe with respect + * to read operations. This does not guarantee the thread-safety of the entire data set: both the underlying {@link + * com.rapidminer.example.table.ExampleTable} and the set's attributes might be unsafe to be read from concurrently + * and thus need to be checked separately. + * + *

A complete check is implemented by + * {@link com.rapidminer.example.utils.ExampleSets#createThreadSafeCopy(ExampleSet)} which only creates a deep copy + * if the thread-safety of the input example set is not guaranteed. + * + * @return {@code true} iff the view implemented by this example set is thread-safe w.r.t. to read operations + * @see com.rapidminer.example.utils.ExampleSets#createThreadSafeCopy(ExampleSet) + */ + public boolean isThreadSafeView() { + return false; + } } diff --git a/src/main/java/com/rapidminer/example/set/AcceptAllCondition.java b/src/main/java/com/rapidminer/example/set/AcceptAllCondition.java index 4071fe6ad..58f07f389 100644 --- a/src/main/java/com/rapidminer/example/set/AcceptAllCondition.java +++ b/src/main/java/com/rapidminer/example/set/AcceptAllCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/AttributeSelectionExampleSet.java b/src/main/java/com/rapidminer/example/set/AttributeSelectionExampleSet.java index 6b0559974..9606bca69 100644 --- a/src/main/java/com/rapidminer/example/set/AttributeSelectionExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/AttributeSelectionExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/AttributeTransformationRemapping.java b/src/main/java/com/rapidminer/example/set/AttributeTransformationRemapping.java index 4db566e5f..687572827 100644 --- a/src/main/java/com/rapidminer/example/set/AttributeTransformationRemapping.java +++ b/src/main/java/com/rapidminer/example/set/AttributeTransformationRemapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/AttributeTransformationReplaceMissing.java b/src/main/java/com/rapidminer/example/set/AttributeTransformationReplaceMissing.java index d505df280..fb5167799 100644 --- a/src/main/java/com/rapidminer/example/set/AttributeTransformationReplaceMissing.java +++ b/src/main/java/com/rapidminer/example/set/AttributeTransformationReplaceMissing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/AttributeTransformationWeighting.java b/src/main/java/com/rapidminer/example/set/AttributeTransformationWeighting.java index 6b820d604..fb0d71c22 100644 --- a/src/main/java/com/rapidminer/example/set/AttributeTransformationWeighting.java +++ b/src/main/java/com/rapidminer/example/set/AttributeTransformationWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/AttributeValueFilter.java b/src/main/java/com/rapidminer/example/set/AttributeValueFilter.java index 6fdba86a4..3baeea795 100644 --- a/src/main/java/com/rapidminer/example/set/AttributeValueFilter.java +++ b/src/main/java/com/rapidminer/example/set/AttributeValueFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/AttributeValueFilterSingleCondition.java b/src/main/java/com/rapidminer/example/set/AttributeValueFilterSingleCondition.java index 0b1f6f9d4..bccc0bcd6 100644 --- a/src/main/java/com/rapidminer/example/set/AttributeValueFilterSingleCondition.java +++ b/src/main/java/com/rapidminer/example/set/AttributeValueFilterSingleCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/AttributeWeightedExampleSet.java b/src/main/java/com/rapidminer/example/set/AttributeWeightedExampleSet.java index 4a505a0da..71160b810 100644 --- a/src/main/java/com/rapidminer/example/set/AttributeWeightedExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/AttributeWeightedExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/AttributesExampleReader.java b/src/main/java/com/rapidminer/example/set/AttributesExampleReader.java index 69eb7541b..6d59820d9 100644 --- a/src/main/java/com/rapidminer/example/set/AttributesExampleReader.java +++ b/src/main/java/com/rapidminer/example/set/AttributesExampleReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/Condition.java b/src/main/java/com/rapidminer/example/set/Condition.java index 2783092f2..5d2f67dc3 100644 --- a/src/main/java/com/rapidminer/example/set/Condition.java +++ b/src/main/java/com/rapidminer/example/set/Condition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/ConditionCreationException.java b/src/main/java/com/rapidminer/example/set/ConditionCreationException.java index cd2fdd850..ffa98bbd3 100644 --- a/src/main/java/com/rapidminer/example/set/ConditionCreationException.java +++ b/src/main/java/com/rapidminer/example/set/ConditionCreationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/ConditionedExampleSet.java b/src/main/java/com/rapidminer/example/set/ConditionedExampleSet.java index 58af77cb2..9e2ad478d 100644 --- a/src/main/java/com/rapidminer/example/set/ConditionedExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/ConditionedExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -259,4 +259,9 @@ public Annotations getAnnotations() { public void cleanup() { parent.cleanup(); } + + @Override + public boolean isThreadSafeView() { + return parent instanceof AbstractExampleSet && ((AbstractExampleSet) parent).isThreadSafeView(); + } } diff --git a/src/main/java/com/rapidminer/example/set/CorrectPredictionCondition.java b/src/main/java/com/rapidminer/example/set/CorrectPredictionCondition.java index 36156e23d..941f72579 100644 --- a/src/main/java/com/rapidminer/example/set/CorrectPredictionCondition.java +++ b/src/main/java/com/rapidminer/example/set/CorrectPredictionCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/CustomFilter.java b/src/main/java/com/rapidminer/example/set/CustomFilter.java index 0e85baebc..f20fd3521 100644 --- a/src/main/java/com/rapidminer/example/set/CustomFilter.java +++ b/src/main/java/com/rapidminer/example/set/CustomFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/ExampleSetUtilities.java b/src/main/java/com/rapidminer/example/set/ExampleSetUtilities.java index 2b3f67215..f3d9119f9 100644 --- a/src/main/java/com/rapidminer/example/set/ExampleSetUtilities.java +++ b/src/main/java/com/rapidminer/example/set/ExampleSetUtilities.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/ExpressionFilter.java b/src/main/java/com/rapidminer/example/set/ExpressionFilter.java index 09f43e1a3..16438c9da 100644 --- a/src/main/java/com/rapidminer/example/set/ExpressionFilter.java +++ b/src/main/java/com/rapidminer/example/set/ExpressionFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/FullAttributeTransformationRemapping.java b/src/main/java/com/rapidminer/example/set/FullAttributeTransformationRemapping.java index 0d0b09388..49aee94f1 100644 --- a/src/main/java/com/rapidminer/example/set/FullAttributeTransformationRemapping.java +++ b/src/main/java/com/rapidminer/example/set/FullAttributeTransformationRemapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/HeaderExampleSet.java b/src/main/java/com/rapidminer/example/set/HeaderExampleSet.java index eb50cfbd0..14c4cc6a4 100644 --- a/src/main/java/com/rapidminer/example/set/HeaderExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/HeaderExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -45,6 +45,19 @@ public HeaderExampleSet(ExampleSet parent) { this.attributes = (Attributes) parent.getAttributes().clone(); } + + /** + * Creates a new header example set with the given attribute. The attributes are not cloned automatically and must + * be cloned before calling this constructor if they are shared with another {@link ExampleSet}. + * + * @param attributes + * the attributes for the header example set + * @since 8.1.0 + */ + public HeaderExampleSet(Attributes attributes) { + this.attributes = attributes; + } + /** Header example set clone constructor. */ public HeaderExampleSet(HeaderExampleSet other) { cloneAnnotationsFrom(other); diff --git a/src/main/java/com/rapidminer/example/set/IndexBasedExampleSetReader.java b/src/main/java/com/rapidminer/example/set/IndexBasedExampleSetReader.java index 0f48b63ca..0c10e0385 100644 --- a/src/main/java/com/rapidminer/example/set/IndexBasedExampleSetReader.java +++ b/src/main/java/com/rapidminer/example/set/IndexBasedExampleSetReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/MappedExampleReader.java b/src/main/java/com/rapidminer/example/set/MappedExampleReader.java index d25b2f8d7..5271059a4 100644 --- a/src/main/java/com/rapidminer/example/set/MappedExampleReader.java +++ b/src/main/java/com/rapidminer/example/set/MappedExampleReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/MappedExampleSet.java b/src/main/java/com/rapidminer/example/set/MappedExampleSet.java index e282ff9a7..b5d7f107b 100644 --- a/src/main/java/com/rapidminer/example/set/MappedExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/MappedExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,6 +18,12 @@ */ package com.rapidminer.example.set; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + import com.rapidminer.example.Attribute; import com.rapidminer.example.Attributes; import com.rapidminer.example.Example; @@ -26,12 +32,6 @@ import com.rapidminer.example.table.ExampleTable; import com.rapidminer.operator.Annotations; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.Random; - /** *

@@ -212,4 +212,10 @@ public Annotations getAnnotations() { public void cleanup() { parent.cleanup(); } + + @Override + public boolean isThreadSafeView() { + return parent instanceof AbstractExampleSet && ((AbstractExampleSet) parent).isThreadSafeView(); + } + } diff --git a/src/main/java/com/rapidminer/example/set/MissingAttributesCondition.java b/src/main/java/com/rapidminer/example/set/MissingAttributesCondition.java index 478086af4..95f8b39db 100644 --- a/src/main/java/com/rapidminer/example/set/MissingAttributesCondition.java +++ b/src/main/java/com/rapidminer/example/set/MissingAttributesCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/MissingLabelsCondition.java b/src/main/java/com/rapidminer/example/set/MissingLabelsCondition.java index 4e19e29c3..a88719683 100644 --- a/src/main/java/com/rapidminer/example/set/MissingLabelsCondition.java +++ b/src/main/java/com/rapidminer/example/set/MissingLabelsCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/ModelViewExampleSet.java b/src/main/java/com/rapidminer/example/set/ModelViewExampleSet.java index c0351ac7f..d31e8a63b 100644 --- a/src/main/java/com/rapidminer/example/set/ModelViewExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/ModelViewExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/NoMissingAttributeValueCondition.java b/src/main/java/com/rapidminer/example/set/NoMissingAttributeValueCondition.java index 1168c1a9b..2f863e6f4 100644 --- a/src/main/java/com/rapidminer/example/set/NoMissingAttributeValueCondition.java +++ b/src/main/java/com/rapidminer/example/set/NoMissingAttributeValueCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/NoMissingAttributesCondition.java b/src/main/java/com/rapidminer/example/set/NoMissingAttributesCondition.java index b57cdaafd..6cde8b6ff 100644 --- a/src/main/java/com/rapidminer/example/set/NoMissingAttributesCondition.java +++ b/src/main/java/com/rapidminer/example/set/NoMissingAttributesCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/NoMissingLabelsCondition.java b/src/main/java/com/rapidminer/example/set/NoMissingLabelsCondition.java index 717d0d645..55b9a6926 100644 --- a/src/main/java/com/rapidminer/example/set/NoMissingLabelsCondition.java +++ b/src/main/java/com/rapidminer/example/set/NoMissingLabelsCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/NonSpecialAttributesExampleSet.java b/src/main/java/com/rapidminer/example/set/NonSpecialAttributesExampleSet.java index cd4ccf5d8..8462f794a 100644 --- a/src/main/java/com/rapidminer/example/set/NonSpecialAttributesExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/NonSpecialAttributesExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/Partition.java b/src/main/java/com/rapidminer/example/set/Partition.java index 80de711f9..3cf16ca46 100644 --- a/src/main/java/com/rapidminer/example/set/Partition.java +++ b/src/main/java/com/rapidminer/example/set/Partition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/PartitionBuilder.java b/src/main/java/com/rapidminer/example/set/PartitionBuilder.java index 3233cf1f6..bd13a97c8 100644 --- a/src/main/java/com/rapidminer/example/set/PartitionBuilder.java +++ b/src/main/java/com/rapidminer/example/set/PartitionBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/RemappedExampleSet.java b/src/main/java/com/rapidminer/example/set/RemappedExampleSet.java index cfb5d2e92..4e4ca862e 100644 --- a/src/main/java/com/rapidminer/example/set/RemappedExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/RemappedExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/ReplaceMissingExampleSet.java b/src/main/java/com/rapidminer/example/set/ReplaceMissingExampleSet.java index 57ddfb319..e80e38c51 100644 --- a/src/main/java/com/rapidminer/example/set/ReplaceMissingExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/ReplaceMissingExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/ShuffledPartitionBuilder.java b/src/main/java/com/rapidminer/example/set/ShuffledPartitionBuilder.java index ccae4d82f..a9b2b017e 100644 --- a/src/main/java/com/rapidminer/example/set/ShuffledPartitionBuilder.java +++ b/src/main/java/com/rapidminer/example/set/ShuffledPartitionBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/SimilarityExampleSet.java b/src/main/java/com/rapidminer/example/set/SimilarityExampleSet.java index cb2a3e5d9..f6c6342dd 100644 --- a/src/main/java/com/rapidminer/example/set/SimilarityExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/SimilarityExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/SimpleExampleReader.java b/src/main/java/com/rapidminer/example/set/SimpleExampleReader.java index e4d6d1fa6..7d79820b0 100644 --- a/src/main/java/com/rapidminer/example/set/SimpleExampleReader.java +++ b/src/main/java/com/rapidminer/example/set/SimpleExampleReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/SimpleExampleSet.java b/src/main/java/com/rapidminer/example/set/SimpleExampleSet.java index 36c519274..c250cceb8 100644 --- a/src/main/java/com/rapidminer/example/set/SimpleExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/SimpleExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -184,4 +184,9 @@ public void cleanup() { this.exampleTable = table.columnCleanupClone(attributes); } } + + @Override + public boolean isThreadSafeView() { + return true; + } } diff --git a/src/main/java/com/rapidminer/example/set/SimplePartitionBuilder.java b/src/main/java/com/rapidminer/example/set/SimplePartitionBuilder.java index 0d0c2dde9..92b263046 100644 --- a/src/main/java/com/rapidminer/example/set/SimplePartitionBuilder.java +++ b/src/main/java/com/rapidminer/example/set/SimplePartitionBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/SingleExampleExampleSet.java b/src/main/java/com/rapidminer/example/set/SingleExampleExampleSet.java index d3842a5e2..95f5c6acf 100644 --- a/src/main/java/com/rapidminer/example/set/SingleExampleExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/SingleExampleExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/SkipNANExampleReader.java b/src/main/java/com/rapidminer/example/set/SkipNANExampleReader.java index 0f3b1682d..2399b9711 100644 --- a/src/main/java/com/rapidminer/example/set/SkipNANExampleReader.java +++ b/src/main/java/com/rapidminer/example/set/SkipNANExampleReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/SortedExampleReader.java b/src/main/java/com/rapidminer/example/set/SortedExampleReader.java index 9b85a21e3..558e2fbc9 100644 --- a/src/main/java/com/rapidminer/example/set/SortedExampleReader.java +++ b/src/main/java/com/rapidminer/example/set/SortedExampleReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/SortedExampleSet.java b/src/main/java/com/rapidminer/example/set/SortedExampleSet.java index 124ac523d..c2745d73a 100644 --- a/src/main/java/com/rapidminer/example/set/SortedExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/SortedExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -287,4 +287,9 @@ public ExampleTable getExampleTable() { public void cleanup() { parent.cleanup(); } + + @Override + public boolean isThreadSafeView() { + return parent instanceof AbstractExampleSet && ((AbstractExampleSet) parent).isThreadSafeView(); + } } diff --git a/src/main/java/com/rapidminer/example/set/SplittedExampleSet.java b/src/main/java/com/rapidminer/example/set/SplittedExampleSet.java index 0861630f3..5f127780f 100644 --- a/src/main/java/com/rapidminer/example/set/SplittedExampleSet.java +++ b/src/main/java/com/rapidminer/example/set/SplittedExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -248,11 +248,11 @@ private static PartitionBuilder createPartitionBuilder(ExampleSet exampleSet, in case AUTOMATIC: default: Attribute label = exampleSet.getAttributes().getLabel(); - if (label != null && label.isNominal()) { + if (label != null && label.isNominal()) { builder = new StratifiedPartitionBuilder(exampleSet, useLocalRandomSeed, seed); } else { if ((autoSwitchToShuffled || samplingType == AUTOMATIC) && (label == null || !label.isNominal())) { - exampleSet.getLog().logWarning( + exampleSet.getLog().logWarning( "Example set has no nominal label: using shuffled partition instead of stratified partition"); return new ShuffledPartitionBuilder(useLocalRandomSeed, seed); } diff --git a/src/main/java/com/rapidminer/example/set/StratifiedPartitionBuilder.java b/src/main/java/com/rapidminer/example/set/StratifiedPartitionBuilder.java index 5d665422f..0d8481574 100644 --- a/src/main/java/com/rapidminer/example/set/StratifiedPartitionBuilder.java +++ b/src/main/java/com/rapidminer/example/set/StratifiedPartitionBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/set/WrongPredictionCondition.java b/src/main/java/com/rapidminer/example/set/WrongPredictionCondition.java index 219c23579..7fd1b94e4 100644 --- a/src/main/java/com/rapidminer/example/set/WrongPredictionCondition.java +++ b/src/main/java/com/rapidminer/example/set/WrongPredictionCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/AbstractAttribute.java b/src/main/java/com/rapidminer/example/table/AbstractAttribute.java index ce8613660..37fada49e 100644 --- a/src/main/java/com/rapidminer/example/table/AbstractAttribute.java +++ b/src/main/java/com/rapidminer/example/table/AbstractAttribute.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/AbstractDataRowReader.java b/src/main/java/com/rapidminer/example/table/AbstractDataRowReader.java index c38c310b7..5efa56f29 100644 --- a/src/main/java/com/rapidminer/example/table/AbstractDataRowReader.java +++ b/src/main/java/com/rapidminer/example/table/AbstractDataRowReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/AbstractExampleTable.java b/src/main/java/com/rapidminer/example/table/AbstractExampleTable.java index a8037bf01..895cc1669 100644 --- a/src/main/java/com/rapidminer/example/table/AbstractExampleTable.java +++ b/src/main/java/com/rapidminer/example/table/AbstractExampleTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/AbstractSparseArrayDataRow.java b/src/main/java/com/rapidminer/example/table/AbstractSparseArrayDataRow.java index d7362a5f1..19514e6c2 100644 --- a/src/main/java/com/rapidminer/example/table/AbstractSparseArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/AbstractSparseArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/AttributeFactory.java b/src/main/java/com/rapidminer/example/table/AttributeFactory.java index 05d157091..1faed6c8a 100644 --- a/src/main/java/com/rapidminer/example/table/AttributeFactory.java +++ b/src/main/java/com/rapidminer/example/table/AttributeFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/BinominalAttribute.java b/src/main/java/com/rapidminer/example/table/BinominalAttribute.java index 46ac9f111..4b18cc34e 100644 --- a/src/main/java/com/rapidminer/example/table/BinominalAttribute.java +++ b/src/main/java/com/rapidminer/example/table/BinominalAttribute.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/BinominalMapping.java b/src/main/java/com/rapidminer/example/table/BinominalMapping.java index 30c2cba58..22914758b 100644 --- a/src/main/java/com/rapidminer/example/table/BinominalMapping.java +++ b/src/main/java/com/rapidminer/example/table/BinominalMapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/BooleanArrayDataRow.java b/src/main/java/com/rapidminer/example/table/BooleanArrayDataRow.java index aa927c329..bfc3666bb 100644 --- a/src/main/java/com/rapidminer/example/table/BooleanArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/BooleanArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/BooleanSparseArrayDataRow.java b/src/main/java/com/rapidminer/example/table/BooleanSparseArrayDataRow.java index 76700fc21..0ba876e2f 100644 --- a/src/main/java/com/rapidminer/example/table/BooleanSparseArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/BooleanSparseArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/ByteArrayDataRow.java b/src/main/java/com/rapidminer/example/table/ByteArrayDataRow.java index f38074753..10100654e 100644 --- a/src/main/java/com/rapidminer/example/table/ByteArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/ByteArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/ByteSparseArrayDataRow.java b/src/main/java/com/rapidminer/example/table/ByteSparseArrayDataRow.java index c28abc27c..1d9c395e8 100644 --- a/src/main/java/com/rapidminer/example/table/ByteSparseArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/ByteSparseArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/DataRow.java b/src/main/java/com/rapidminer/example/table/DataRow.java index 2148ed60e..1766ae798 100644 --- a/src/main/java/com/rapidminer/example/table/DataRow.java +++ b/src/main/java/com/rapidminer/example/table/DataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/DataRowFactory.java b/src/main/java/com/rapidminer/example/table/DataRowFactory.java index f2863aba3..8ffc5a2dc 100644 --- a/src/main/java/com/rapidminer/example/table/DataRowFactory.java +++ b/src/main/java/com/rapidminer/example/table/DataRowFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/DataRowReader.java b/src/main/java/com/rapidminer/example/table/DataRowReader.java index 16fcf87b7..69458ecaa 100644 --- a/src/main/java/com/rapidminer/example/table/DataRowReader.java +++ b/src/main/java/com/rapidminer/example/table/DataRowReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/DatabaseDataRow.java b/src/main/java/com/rapidminer/example/table/DatabaseDataRow.java index bd48afed4..e3876b339 100644 --- a/src/main/java/com/rapidminer/example/table/DatabaseDataRow.java +++ b/src/main/java/com/rapidminer/example/table/DatabaseDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/DatabaseDataRowReader.java b/src/main/java/com/rapidminer/example/table/DatabaseDataRowReader.java index 75a2c3b0d..38fe728c2 100644 --- a/src/main/java/com/rapidminer/example/table/DatabaseDataRowReader.java +++ b/src/main/java/com/rapidminer/example/table/DatabaseDataRowReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/DateAttribute.java b/src/main/java/com/rapidminer/example/table/DateAttribute.java index baaba1585..de32b46df 100644 --- a/src/main/java/com/rapidminer/example/table/DateAttribute.java +++ b/src/main/java/com/rapidminer/example/table/DateAttribute.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/DoubleArrayDataRow.java b/src/main/java/com/rapidminer/example/table/DoubleArrayDataRow.java index 67f5584e3..12919048e 100644 --- a/src/main/java/com/rapidminer/example/table/DoubleArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/DoubleArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/DoubleSparseArrayDataRow.java b/src/main/java/com/rapidminer/example/table/DoubleSparseArrayDataRow.java index 73e325688..cb018f0dc 100644 --- a/src/main/java/com/rapidminer/example/table/DoubleSparseArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/DoubleSparseArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/ExampleTable.java b/src/main/java/com/rapidminer/example/table/ExampleTable.java index e1c3aba55..5fabe0a07 100644 --- a/src/main/java/com/rapidminer/example/table/ExampleTable.java +++ b/src/main/java/com/rapidminer/example/table/ExampleTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/FastSparseDoubleArrayDataRow.java b/src/main/java/com/rapidminer/example/table/FastSparseDoubleArrayDataRow.java index 5e9b1dc18..7623f604b 100644 --- a/src/main/java/com/rapidminer/example/table/FastSparseDoubleArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/FastSparseDoubleArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/FileDataRowReader.java b/src/main/java/com/rapidminer/example/table/FileDataRowReader.java index 2950dd8fe..a71e58572 100644 --- a/src/main/java/com/rapidminer/example/table/FileDataRowReader.java +++ b/src/main/java/com/rapidminer/example/table/FileDataRowReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/FloatArrayDataRow.java b/src/main/java/com/rapidminer/example/table/FloatArrayDataRow.java index 23b3d0de3..3b55cbc16 100644 --- a/src/main/java/com/rapidminer/example/table/FloatArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/FloatArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/FloatSparseArrayDataRow.java b/src/main/java/com/rapidminer/example/table/FloatSparseArrayDataRow.java index cfb81595b..c763c37ea 100644 --- a/src/main/java/com/rapidminer/example/table/FloatSparseArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/FloatSparseArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/GrowingExampleTable.java b/src/main/java/com/rapidminer/example/table/GrowingExampleTable.java index 235e6e7b7..bf17a6341 100644 --- a/src/main/java/com/rapidminer/example/table/GrowingExampleTable.java +++ b/src/main/java/com/rapidminer/example/table/GrowingExampleTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/IntArrayDataRow.java b/src/main/java/com/rapidminer/example/table/IntArrayDataRow.java index d19e3edfd..bed95d401 100644 --- a/src/main/java/com/rapidminer/example/table/IntArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/IntArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/IntSparseArrayDataRow.java b/src/main/java/com/rapidminer/example/table/IntSparseArrayDataRow.java index 7aeb7324c..ea8d18718 100644 --- a/src/main/java/com/rapidminer/example/table/IntSparseArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/IntSparseArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/ListDataRowReader.java b/src/main/java/com/rapidminer/example/table/ListDataRowReader.java index 1a128a85b..f45d5895a 100644 --- a/src/main/java/com/rapidminer/example/table/ListDataRowReader.java +++ b/src/main/java/com/rapidminer/example/table/ListDataRowReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/LongArrayDataRow.java b/src/main/java/com/rapidminer/example/table/LongArrayDataRow.java index a80f7997e..b186386d2 100644 --- a/src/main/java/com/rapidminer/example/table/LongArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/LongArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/LongSparseArrayDataRow.java b/src/main/java/com/rapidminer/example/table/LongSparseArrayDataRow.java index 85e9f133d..0105e7275 100644 --- a/src/main/java/com/rapidminer/example/table/LongSparseArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/LongSparseArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/MemoryExampleTable.java b/src/main/java/com/rapidminer/example/table/MemoryExampleTable.java index 2b0d9c218..bad0a1bd7 100644 --- a/src/main/java/com/rapidminer/example/table/MemoryExampleTable.java +++ b/src/main/java/com/rapidminer/example/table/MemoryExampleTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/NominalAttribute.java b/src/main/java/com/rapidminer/example/table/NominalAttribute.java index 055f364f9..4512dfe0a 100644 --- a/src/main/java/com/rapidminer/example/table/NominalAttribute.java +++ b/src/main/java/com/rapidminer/example/table/NominalAttribute.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/NominalMapping.java b/src/main/java/com/rapidminer/example/table/NominalMapping.java index 46accb5db..009ec0e0d 100644 --- a/src/main/java/com/rapidminer/example/table/NominalMapping.java +++ b/src/main/java/com/rapidminer/example/table/NominalMapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/NonWritableDataRow.java b/src/main/java/com/rapidminer/example/table/NonWritableDataRow.java index cd92ed341..678f29871 100644 --- a/src/main/java/com/rapidminer/example/table/NonWritableDataRow.java +++ b/src/main/java/com/rapidminer/example/table/NonWritableDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/NumericalAttribute.java b/src/main/java/com/rapidminer/example/table/NumericalAttribute.java index cb6ad8e39..b74d49e99 100644 --- a/src/main/java/com/rapidminer/example/table/NumericalAttribute.java +++ b/src/main/java/com/rapidminer/example/table/NumericalAttribute.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/PolynominalAttribute.java b/src/main/java/com/rapidminer/example/table/PolynominalAttribute.java index 650b357eb..6650d8ca0 100644 --- a/src/main/java/com/rapidminer/example/table/PolynominalAttribute.java +++ b/src/main/java/com/rapidminer/example/table/PolynominalAttribute.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/PolynominalMapping.java b/src/main/java/com/rapidminer/example/table/PolynominalMapping.java index f0fc5ff24..63be7b9d2 100644 --- a/src/main/java/com/rapidminer/example/table/PolynominalMapping.java +++ b/src/main/java/com/rapidminer/example/table/PolynominalMapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/RandomDataRowReader.java b/src/main/java/com/rapidminer/example/table/RandomDataRowReader.java index fe1b84e7b..f9ad89c3c 100644 --- a/src/main/java/com/rapidminer/example/table/RandomDataRowReader.java +++ b/src/main/java/com/rapidminer/example/table/RandomDataRowReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/RandomExampleTable.java b/src/main/java/com/rapidminer/example/table/RandomExampleTable.java index afc114452..8326f1d96 100644 --- a/src/main/java/com/rapidminer/example/table/RandomExampleTable.java +++ b/src/main/java/com/rapidminer/example/table/RandomExampleTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/RapidMinerLineReader.java b/src/main/java/com/rapidminer/example/table/RapidMinerLineReader.java index 7a5995221..a8108536b 100644 --- a/src/main/java/com/rapidminer/example/table/RapidMinerLineReader.java +++ b/src/main/java/com/rapidminer/example/table/RapidMinerLineReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/ResultSetDataRowReader.java b/src/main/java/com/rapidminer/example/table/ResultSetDataRowReader.java index d61abc886..b23c2d9fa 100644 --- a/src/main/java/com/rapidminer/example/table/ResultSetDataRowReader.java +++ b/src/main/java/com/rapidminer/example/table/ResultSetDataRowReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/ShortArrayDataRow.java b/src/main/java/com/rapidminer/example/table/ShortArrayDataRow.java index 7c7273dd2..9c479913c 100644 --- a/src/main/java/com/rapidminer/example/table/ShortArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/ShortArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/ShortSparseArrayDataRow.java b/src/main/java/com/rapidminer/example/table/ShortSparseArrayDataRow.java index dac03d86a..efe0c75f6 100644 --- a/src/main/java/com/rapidminer/example/table/ShortSparseArrayDataRow.java +++ b/src/main/java/com/rapidminer/example/table/ShortSparseArrayDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/SimpleArrayData.java b/src/main/java/com/rapidminer/example/table/SimpleArrayData.java index 773e54370..a2ba431ba 100644 --- a/src/main/java/com/rapidminer/example/table/SimpleArrayData.java +++ b/src/main/java/com/rapidminer/example/table/SimpleArrayData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/SimpleArrayDataRowReader.java b/src/main/java/com/rapidminer/example/table/SimpleArrayDataRowReader.java index 903145415..d383fe984 100644 --- a/src/main/java/com/rapidminer/example/table/SimpleArrayDataRowReader.java +++ b/src/main/java/com/rapidminer/example/table/SimpleArrayDataRowReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/SparseDataRow.java b/src/main/java/com/rapidminer/example/table/SparseDataRow.java index d77fc54a4..b7f97d6fd 100644 --- a/src/main/java/com/rapidminer/example/table/SparseDataRow.java +++ b/src/main/java/com/rapidminer/example/table/SparseDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/SparseFormatDataRowReader.java b/src/main/java/com/rapidminer/example/table/SparseFormatDataRowReader.java index a1141031f..e41d26602 100644 --- a/src/main/java/com/rapidminer/example/table/SparseFormatDataRowReader.java +++ b/src/main/java/com/rapidminer/example/table/SparseFormatDataRowReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/SparseMapDataRow.java b/src/main/java/com/rapidminer/example/table/SparseMapDataRow.java index 5445f8928..ead05c935 100644 --- a/src/main/java/com/rapidminer/example/table/SparseMapDataRow.java +++ b/src/main/java/com/rapidminer/example/table/SparseMapDataRow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/ViewAttribute.java b/src/main/java/com/rapidminer/example/table/ViewAttribute.java index 75a49fac9..f8801af5a 100644 --- a/src/main/java/com/rapidminer/example/table/ViewAttribute.java +++ b/src/main/java/com/rapidminer/example/table/ViewAttribute.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/AbstractHighSparsityChunk.java b/src/main/java/com/rapidminer/example/table/internal/AbstractHighSparsityChunk.java index 12d615313..585e42840 100644 --- a/src/main/java/com/rapidminer/example/table/internal/AbstractHighSparsityChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/AbstractHighSparsityChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/AbstractMediumSparsityChunk.java b/src/main/java/com/rapidminer/example/table/internal/AbstractMediumSparsityChunk.java index 4a9f0c23e..6233a1ec9 100644 --- a/src/main/java/com/rapidminer/example/table/internal/AbstractMediumSparsityChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/AbstractMediumSparsityChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/AutoColumnUtils.java b/src/main/java/com/rapidminer/example/table/internal/AutoColumnUtils.java index c3d1defce..62139fef0 100644 --- a/src/main/java/com/rapidminer/example/table/internal/AutoColumnUtils.java +++ b/src/main/java/com/rapidminer/example/table/internal/AutoColumnUtils.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/ByteArrayColumn.java b/src/main/java/com/rapidminer/example/table/internal/ByteArrayColumn.java index c89a85451..ac1ad12c6 100644 --- a/src/main/java/com/rapidminer/example/table/internal/ByteArrayColumn.java +++ b/src/main/java/com/rapidminer/example/table/internal/ByteArrayColumn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/Column.java b/src/main/java/com/rapidminer/example/table/internal/Column.java index fefa067ac..c7e2aad0b 100644 --- a/src/main/java/com/rapidminer/example/table/internal/Column.java +++ b/src/main/java/com/rapidminer/example/table/internal/Column.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/ColumnarExampleTable.java b/src/main/java/com/rapidminer/example/table/internal/ColumnarExampleTable.java index 4b9e4cef0..743eb1e7a 100644 --- a/src/main/java/com/rapidminer/example/table/internal/ColumnarExampleTable.java +++ b/src/main/java/com/rapidminer/example/table/internal/ColumnarExampleTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/DoubleArrayColumn.java b/src/main/java/com/rapidminer/example/table/internal/DoubleArrayColumn.java index 930bcb1d2..2ee905eba 100644 --- a/src/main/java/com/rapidminer/example/table/internal/DoubleArrayColumn.java +++ b/src/main/java/com/rapidminer/example/table/internal/DoubleArrayColumn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/DoubleAutoColumn.java b/src/main/java/com/rapidminer/example/table/internal/DoubleAutoColumn.java index 6dc5cde0d..24c089c05 100644 --- a/src/main/java/com/rapidminer/example/table/internal/DoubleAutoColumn.java +++ b/src/main/java/com/rapidminer/example/table/internal/DoubleAutoColumn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/DoubleAutoDenseChunk.java b/src/main/java/com/rapidminer/example/table/internal/DoubleAutoDenseChunk.java index 0297f4539..126976729 100644 --- a/src/main/java/com/rapidminer/example/table/internal/DoubleAutoDenseChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/DoubleAutoDenseChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/DoubleAutoSparseChunk.java b/src/main/java/com/rapidminer/example/table/internal/DoubleAutoSparseChunk.java index 026818715..3f5e1209b 100644 --- a/src/main/java/com/rapidminer/example/table/internal/DoubleAutoSparseChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/DoubleAutoSparseChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/DoubleHighSparsityChunk.java b/src/main/java/com/rapidminer/example/table/internal/DoubleHighSparsityChunk.java index 6f446de72..5dfeff64c 100644 --- a/src/main/java/com/rapidminer/example/table/internal/DoubleHighSparsityChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/DoubleHighSparsityChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteAutoColumn.java b/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteAutoColumn.java index c52617d29..34780c2f7 100644 --- a/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteAutoColumn.java +++ b/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteAutoColumn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteDenseChunk.java b/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteDenseChunk.java index 543c5abdc..14a4ba6c8 100644 --- a/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteDenseChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteDenseChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteSparseChunk.java b/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteSparseChunk.java index 1e57e102f..ce3e02120 100644 --- a/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteSparseChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/DoubleIncompleteSparseChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/DoubleMediumSparsityChunk.java b/src/main/java/com/rapidminer/example/table/internal/DoubleMediumSparsityChunk.java index 37b8a5c9d..dacd57386 100644 --- a/src/main/java/com/rapidminer/example/table/internal/DoubleMediumSparsityChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/DoubleMediumSparsityChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/DoubleSparseChunk.java b/src/main/java/com/rapidminer/example/table/internal/DoubleSparseChunk.java index 693439b2b..67249f0b3 100644 --- a/src/main/java/com/rapidminer/example/table/internal/DoubleSparseChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/DoubleSparseChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/IntegerArrayColumn.java b/src/main/java/com/rapidminer/example/table/internal/IntegerArrayColumn.java index a1aaf645d..44c2f0540 100644 --- a/src/main/java/com/rapidminer/example/table/internal/IntegerArrayColumn.java +++ b/src/main/java/com/rapidminer/example/table/internal/IntegerArrayColumn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/IntegerAutoColumn.java b/src/main/java/com/rapidminer/example/table/internal/IntegerAutoColumn.java index 69010d6d9..503a50f4f 100644 --- a/src/main/java/com/rapidminer/example/table/internal/IntegerAutoColumn.java +++ b/src/main/java/com/rapidminer/example/table/internal/IntegerAutoColumn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/IntegerAutoDenseChunk.java b/src/main/java/com/rapidminer/example/table/internal/IntegerAutoDenseChunk.java index 364a52707..a075f2114 100644 --- a/src/main/java/com/rapidminer/example/table/internal/IntegerAutoDenseChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/IntegerAutoDenseChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/IntegerAutoSparseChunk.java b/src/main/java/com/rapidminer/example/table/internal/IntegerAutoSparseChunk.java index cf561ed23..5a87f5a22 100644 --- a/src/main/java/com/rapidminer/example/table/internal/IntegerAutoSparseChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/IntegerAutoSparseChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/IntegerHighSparsityChunk.java b/src/main/java/com/rapidminer/example/table/internal/IntegerHighSparsityChunk.java index 1a1a85632..526f36653 100644 --- a/src/main/java/com/rapidminer/example/table/internal/IntegerHighSparsityChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/IntegerHighSparsityChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteAutoColumn.java b/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteAutoColumn.java index f499f207b..bf7531e4e 100644 --- a/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteAutoColumn.java +++ b/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteAutoColumn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteDenseChunk.java b/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteDenseChunk.java index 95d6d58a8..708cd8b25 100644 --- a/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteDenseChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteDenseChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteSparseChunk.java b/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteSparseChunk.java index 2e0f166df..23a803a01 100644 --- a/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteSparseChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/IntegerIncompleteSparseChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/IntegerMediumSparsityChunk.java b/src/main/java/com/rapidminer/example/table/internal/IntegerMediumSparsityChunk.java index 8f3c8f144..006f46bb0 100644 --- a/src/main/java/com/rapidminer/example/table/internal/IntegerMediumSparsityChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/IntegerMediumSparsityChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/IntegerSparseChunk.java b/src/main/java/com/rapidminer/example/table/internal/IntegerSparseChunk.java index 56d9a6673..f91c22673 100644 --- a/src/main/java/com/rapidminer/example/table/internal/IntegerSparseChunk.java +++ b/src/main/java/com/rapidminer/example/table/internal/IntegerSparseChunk.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/NaNColumn.java b/src/main/java/com/rapidminer/example/table/internal/NaNColumn.java index 3ed2507b7..e4ac33c00 100644 --- a/src/main/java/com/rapidminer/example/table/internal/NaNColumn.java +++ b/src/main/java/com/rapidminer/example/table/internal/NaNColumn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/table/internal/package-info.java b/src/main/java/com/rapidminer/example/table/internal/package-info.java index a1bf339ed..60956c6fb 100644 --- a/src/main/java/com/rapidminer/example/table/internal/package-info.java +++ b/src/main/java/com/rapidminer/example/table/internal/package-info.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/utils/ColumnarExampleSetBuilder.java b/src/main/java/com/rapidminer/example/utils/ColumnarExampleSetBuilder.java index c37d67018..fe2688637 100644 --- a/src/main/java/com/rapidminer/example/utils/ColumnarExampleSetBuilder.java +++ b/src/main/java/com/rapidminer/example/utils/ColumnarExampleSetBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/utils/ExampleSetBuilder.java b/src/main/java/com/rapidminer/example/utils/ExampleSetBuilder.java index 24ad4b87b..537aa8ee7 100644 --- a/src/main/java/com/rapidminer/example/utils/ExampleSetBuilder.java +++ b/src/main/java/com/rapidminer/example/utils/ExampleSetBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/example/utils/ExampleSets.java b/src/main/java/com/rapidminer/example/utils/ExampleSets.java index 8a8e339dc..92e53bc52 100644 --- a/src/main/java/com/rapidminer/example/utils/ExampleSets.java +++ b/src/main/java/com/rapidminer/example/utils/ExampleSets.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -28,7 +28,7 @@ import com.rapidminer.example.Attributes; import com.rapidminer.example.ExampleSet; import com.rapidminer.example.SimpleAttributes; -import com.rapidminer.example.set.SimpleExampleSet; +import com.rapidminer.example.set.AbstractExampleSet; import com.rapidminer.example.table.BinominalAttribute; import com.rapidminer.example.table.DateAttribute; import com.rapidminer.example.table.ExampleTable; @@ -141,22 +141,24 @@ public static ExampleSet createThreadSafeCopy(ExampleSet set) { if (set == null) { throw new IllegalArgumentException("Example set must not be null"); } - - boolean foundUnsafeComponent = false; + + // search for unsafe components + boolean foundUnsafeComponent; // check example set implementation - foundUnsafeComponent |= set.getClass() != SimpleExampleSet.class; + boolean threadSafeView = set instanceof AbstractExampleSet && ((AbstractExampleSet) set).isThreadSafeView(); + foundUnsafeComponent = !threadSafeView; // check example table implementation if (!foundUnsafeComponent) { ExampleTable table = set.getExampleTable(); - foundUnsafeComponent |= table.getClass() != ColumnarExampleTable.class; + foundUnsafeComponent = table.getClass() != ColumnarExampleTable.class; } // check attribute implementation if (!foundUnsafeComponent) { Attributes attributes = set.getAttributes(); - foundUnsafeComponent |= attributes.getClass() != SimpleAttributes.class; + foundUnsafeComponent = attributes.getClass() != SimpleAttributes.class; } // check individual attributes and attribute transformations diff --git a/src/main/java/com/rapidminer/example/utils/MemoryExampleSetBuilder.java b/src/main/java/com/rapidminer/example/utils/MemoryExampleSetBuilder.java index c793c84bf..4b6deeebd 100644 --- a/src/main/java/com/rapidminer/example/utils/MemoryExampleSetBuilder.java +++ b/src/main/java/com/rapidminer/example/utils/MemoryExampleSetBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/AbsoluteValueGenerator.java b/src/main/java/com/rapidminer/generator/AbsoluteValueGenerator.java index ad73b6060..65ed89e41 100644 --- a/src/main/java/com/rapidminer/generator/AbsoluteValueGenerator.java +++ b/src/main/java/com/rapidminer/generator/AbsoluteValueGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/AlgebraicOrGenerator.java b/src/main/java/com/rapidminer/generator/AlgebraicOrGenerator.java index 3e33c7b98..2b2db9c8c 100644 --- a/src/main/java/com/rapidminer/generator/AlgebraicOrGenerator.java +++ b/src/main/java/com/rapidminer/generator/AlgebraicOrGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/AttributePeak.java b/src/main/java/com/rapidminer/generator/AttributePeak.java index 6bdb676ed..bf81c46e1 100644 --- a/src/main/java/com/rapidminer/generator/AttributePeak.java +++ b/src/main/java/com/rapidminer/generator/AttributePeak.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/AverageGenerator.java b/src/main/java/com/rapidminer/generator/AverageGenerator.java index 170a176f3..b7a3b8990 100644 --- a/src/main/java/com/rapidminer/generator/AverageGenerator.java +++ b/src/main/java/com/rapidminer/generator/AverageGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/BasicArithmeticOperationGenerator.java b/src/main/java/com/rapidminer/generator/BasicArithmeticOperationGenerator.java index cb0aa9ebd..9b080560a 100644 --- a/src/main/java/com/rapidminer/generator/BasicArithmeticOperationGenerator.java +++ b/src/main/java/com/rapidminer/generator/BasicArithmeticOperationGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/BinaryNumericalGenerator.java b/src/main/java/com/rapidminer/generator/BinaryNumericalGenerator.java index 917beaf23..202da8400 100644 --- a/src/main/java/com/rapidminer/generator/BinaryNumericalGenerator.java +++ b/src/main/java/com/rapidminer/generator/BinaryNumericalGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/ConstantGenerator.java b/src/main/java/com/rapidminer/generator/ConstantGenerator.java index c9dd03aa5..086b7d68d 100644 --- a/src/main/java/com/rapidminer/generator/ConstantGenerator.java +++ b/src/main/java/com/rapidminer/generator/ConstantGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/ExponentialFunctionGenerator.java b/src/main/java/com/rapidminer/generator/ExponentialFunctionGenerator.java index 278385c8a..171fd0590 100644 --- a/src/main/java/com/rapidminer/generator/ExponentialFunctionGenerator.java +++ b/src/main/java/com/rapidminer/generator/ExponentialFunctionGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/FeatureGenerator.java b/src/main/java/com/rapidminer/generator/FeatureGenerator.java index fc6a7eab9..a20b0ff10 100644 --- a/src/main/java/com/rapidminer/generator/FeatureGenerator.java +++ b/src/main/java/com/rapidminer/generator/FeatureGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/FloorCeilGenerator.java b/src/main/java/com/rapidminer/generator/FloorCeilGenerator.java index 03f6fed47..2f160eaf4 100644 --- a/src/main/java/com/rapidminer/generator/FloorCeilGenerator.java +++ b/src/main/java/com/rapidminer/generator/FloorCeilGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/GenerationException.java b/src/main/java/com/rapidminer/generator/GenerationException.java index ecd26266f..0e4505347 100644 --- a/src/main/java/com/rapidminer/generator/GenerationException.java +++ b/src/main/java/com/rapidminer/generator/GenerationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/MinMaxGenerator.java b/src/main/java/com/rapidminer/generator/MinMaxGenerator.java index b0dd7bb98..0c187ed20 100644 --- a/src/main/java/com/rapidminer/generator/MinMaxGenerator.java +++ b/src/main/java/com/rapidminer/generator/MinMaxGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/PowerGenerator.java b/src/main/java/com/rapidminer/generator/PowerGenerator.java index 27538b037..a898cff9c 100644 --- a/src/main/java/com/rapidminer/generator/PowerGenerator.java +++ b/src/main/java/com/rapidminer/generator/PowerGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/ReciprocalValueGenerator.java b/src/main/java/com/rapidminer/generator/ReciprocalValueGenerator.java index 56ec7075e..b6040a19d 100644 --- a/src/main/java/com/rapidminer/generator/ReciprocalValueGenerator.java +++ b/src/main/java/com/rapidminer/generator/ReciprocalValueGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/SignumGenerator.java b/src/main/java/com/rapidminer/generator/SignumGenerator.java index 201b34f4a..ac6b2c4c5 100644 --- a/src/main/java/com/rapidminer/generator/SignumGenerator.java +++ b/src/main/java/com/rapidminer/generator/SignumGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/SingularNumericalGenerator.java b/src/main/java/com/rapidminer/generator/SingularNumericalGenerator.java index 2ab818705..81a7977b9 100644 --- a/src/main/java/com/rapidminer/generator/SingularNumericalGenerator.java +++ b/src/main/java/com/rapidminer/generator/SingularNumericalGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/SinusFactory.java b/src/main/java/com/rapidminer/generator/SinusFactory.java index eba89b420..1f1af05c7 100644 --- a/src/main/java/com/rapidminer/generator/SinusFactory.java +++ b/src/main/java/com/rapidminer/generator/SinusFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/SquareRootGenerator.java b/src/main/java/com/rapidminer/generator/SquareRootGenerator.java index ca67bb110..c56362641 100644 --- a/src/main/java/com/rapidminer/generator/SquareRootGenerator.java +++ b/src/main/java/com/rapidminer/generator/SquareRootGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/generator/TrigonometricFunctionGenerator.java b/src/main/java/com/rapidminer/generator/TrigonometricFunctionGenerator.java index 482d3939d..918086453 100644 --- a/src/main/java/com/rapidminer/generator/TrigonometricFunctionGenerator.java +++ b/src/main/java/com/rapidminer/generator/TrigonometricFunctionGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/ApplicationFrame.java b/src/main/java/com/rapidminer/gui/ApplicationFrame.java index 67af77de2..21d739048 100644 --- a/src/main/java/com/rapidminer/gui/ApplicationFrame.java +++ b/src/main/java/com/rapidminer/gui/ApplicationFrame.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/ApplicationPerspectives.java b/src/main/java/com/rapidminer/gui/ApplicationPerspectives.java index fec8789b6..74e8d247e 100644 --- a/src/main/java/com/rapidminer/gui/ApplicationPerspectives.java +++ b/src/main/java/com/rapidminer/gui/ApplicationPerspectives.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/ConditionalAction.java b/src/main/java/com/rapidminer/gui/ConditionalAction.java index 1485bc8e1..a732cf3bf 100644 --- a/src/main/java/com/rapidminer/gui/ConditionalAction.java +++ b/src/main/java/com/rapidminer/gui/ConditionalAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/DockableMenu.java b/src/main/java/com/rapidminer/gui/DockableMenu.java index 6330183af..ff582a159 100644 --- a/src/main/java/com/rapidminer/gui/DockableMenu.java +++ b/src/main/java/com/rapidminer/gui/DockableMenu.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,14 +18,10 @@ */ package com.rapidminer.gui; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.util.Arrays; -import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; - import javax.swing.JCheckBoxMenuItem; import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; @@ -53,6 +49,8 @@ public class DockableMenu extends ResourceMenu { private static final List HIDE_IN_DOCKABLE_MENU_PREFIX_REGISTRY = new LinkedList<>(); + private static final String DOCKABLE_HTML = "

%s
%s
"; + /** * Here you can register prefixes that will be used to test if a {@link DockableState} start * with the provided prefix and thus won't be shown in the created {@link DockableMenu}. @@ -95,13 +93,7 @@ private void fill() { DockableState[] dockables = dockingContext.getDesktopList().get(0).getDockables(); List sorted = new LinkedList<>(); sorted.addAll(Arrays.asList(dockables)); - Collections.sort(sorted, new Comparator() { - - @Override - public int compare(DockableState o1, DockableState o2) { - return o1.getDockable().getDockKey().getName().compareTo(o2.getDockable().getDockKey().getName()); - } - }); + sorted.sort(Comparator.comparing(o -> o.getDockable().getDockKey().getName())); for (final DockableState state : sorted) { if (state.getDockable() instanceof DummyDockable) { continue; @@ -125,22 +117,18 @@ public int compare(DockableState o1, DockableState o2) { String text = dockKey.getName(); if (SystemInfoUtilities.getOperatingSystem() != OperatingSystem.OSX) { // OS X cannot use html in menus so only do it for other OS - text = "

" + dockKey.getName() + "
" + description + "

"; + text = String.format(DOCKABLE_HTML, dockKey.getName(), description); } JCheckBoxMenuItem item = new JCheckBoxMenuItem(text, dockKey.getIcon()); item.setSelected(!state.isClosed()); - item.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - if (state.isClosed()) { - dockingContext.getDesktopList().get(0).addDockable(state.getDockable()); - } else { - dockingContext.getDesktopList().get(0).close(state.getDockable()); - } - } + item.addActionListener(e -> { + if (state.isClosed()) { + dockingContext.getDesktopList().get(0).addDockable(state.getDockable()); + } else { + dockingContext.getDesktopList().get(0).close(state.getDockable()); + } }); // special handling for results overview dockable in Results perspective @@ -160,4 +148,23 @@ public void actionPerformed(ActionEvent e) { public DockingContext getDockingContext() { return dockingContext; } + + + /** + * Checks if the given dock key belongs to a dockable that should not appear in the dockable menu. + * + * @param dockKey + * the key to test + * @return {@code true} if the key belongs to a dockable that is hidden from the menu; {@code false} otherwise + * @since 8.1 + */ + public static boolean isDockableHiddenFromMenu(final DockKey dockKey) { + for (String prefix : HIDE_IN_DOCKABLE_MENU_PREFIX_REGISTRY) { + if (dockKey.getKey().startsWith(prefix)) { + return true; + } + } + + return false; + } } diff --git a/src/main/java/com/rapidminer/gui/DummyObjectVisualizer.java b/src/main/java/com/rapidminer/gui/DummyObjectVisualizer.java index fd01bcb29..712aa5911 100644 --- a/src/main/java/com/rapidminer/gui/DummyObjectVisualizer.java +++ b/src/main/java/com/rapidminer/gui/DummyObjectVisualizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/EditorCellRenderer.java b/src/main/java/com/rapidminer/gui/EditorCellRenderer.java index d2e2b3f2b..50ff0561b 100644 --- a/src/main/java/com/rapidminer/gui/EditorCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/EditorCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/ExampleVisualizer.java b/src/main/java/com/rapidminer/gui/ExampleVisualizer.java index a6366463e..2be77a2ab 100644 --- a/src/main/java/com/rapidminer/gui/ExampleVisualizer.java +++ b/src/main/java/com/rapidminer/gui/ExampleVisualizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/GUIInputHandler.java b/src/main/java/com/rapidminer/gui/GUIInputHandler.java index 7aaeb41b3..dbafcc35c 100644 --- a/src/main/java/com/rapidminer/gui/GUIInputHandler.java +++ b/src/main/java/com/rapidminer/gui/GUIInputHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/GeneralProcessListener.java b/src/main/java/com/rapidminer/gui/GeneralProcessListener.java index 5f33e374e..2df6ccfb5 100644 --- a/src/main/java/com/rapidminer/gui/GeneralProcessListener.java +++ b/src/main/java/com/rapidminer/gui/GeneralProcessListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/LoggedAbstractAction.java b/src/main/java/com/rapidminer/gui/LoggedAbstractAction.java index 27ef8f734..bc8091e7c 100644 --- a/src/main/java/com/rapidminer/gui/LoggedAbstractAction.java +++ b/src/main/java/com/rapidminer/gui/LoggedAbstractAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/MainFrame.java b/src/main/java/com/rapidminer/gui/MainFrame.java index 460e5a501..dd42699cf 100644 --- a/src/main/java/com/rapidminer/gui/MainFrame.java +++ b/src/main/java/com/rapidminer/gui/MainFrame.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -26,12 +26,12 @@ import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.net.InetAddress; +import java.net.URI; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.logging.Level; - import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.JButton; @@ -54,14 +54,17 @@ import com.rapidminer.gui.actions.AboutAction; import com.rapidminer.gui.actions.Actions; import com.rapidminer.gui.actions.AutoWireAction; +import com.rapidminer.gui.actions.BrowseAction; import com.rapidminer.gui.actions.ExitAction; import com.rapidminer.gui.actions.ExportProcessAction; import com.rapidminer.gui.actions.ImportDataAction; import com.rapidminer.gui.actions.ImportProcessAction; +import com.rapidminer.gui.actions.ManageConfigurablesAction; import com.rapidminer.gui.actions.NewPerspectiveAction; import com.rapidminer.gui.actions.PauseAction; import com.rapidminer.gui.actions.PropagateRealMetaDataAction; import com.rapidminer.gui.actions.RedoAction; +import com.rapidminer.gui.actions.RestoreDefaultPerspectiveAction; import com.rapidminer.gui.actions.RunAction; import com.rapidminer.gui.actions.SaveAction; import com.rapidminer.gui.actions.SaveAsAction; @@ -72,8 +75,11 @@ import com.rapidminer.gui.actions.ValidateAutomaticallyAction; import com.rapidminer.gui.actions.ValidateProcessAction; import com.rapidminer.gui.actions.export.ShowPrintAndExportDialogAction; +import com.rapidminer.gui.actions.search.ActionsGlobalSearch; +import com.rapidminer.gui.actions.search.ActionsGlobalSearchManager; import com.rapidminer.gui.actions.startup.NewAction; import com.rapidminer.gui.actions.startup.OpenAction; +import com.rapidminer.gui.actions.startup.TutorialAction; import com.rapidminer.gui.dialog.UnknownParametersInfoDialog; import com.rapidminer.gui.flow.ErrorTable; import com.rapidminer.gui.flow.ProcessPanel; @@ -95,6 +101,7 @@ import com.rapidminer.gui.processeditor.results.ResultDisplay; import com.rapidminer.gui.processeditor.results.ResultDisplayTools; import com.rapidminer.gui.properties.OperatorPropertyPanel; +import com.rapidminer.gui.search.action.GlobalSearchAction; import com.rapidminer.gui.security.PasswordManager; import com.rapidminer.gui.tools.ProcessGUITools; import com.rapidminer.gui.tools.ProgressThread; @@ -126,7 +133,6 @@ import com.rapidminer.tools.SystemInfoUtilities; import com.rapidminer.tools.SystemInfoUtilities.OperatingSystem; import com.rapidminer.tools.config.ConfigurationManager; -import com.rapidminer.tools.config.gui.ConfigurableDialog; import com.rapidminer.tools.container.Pair; import com.rapidminer.tutorial.Tutorial; import com.rapidminer.tutorial.gui.TutorialBrowser; @@ -357,45 +363,44 @@ private static final String getFrameTitle() { public static final int EDIT_MODE = 0; public static final int RESULTS_MODE = 1; - public final transient Action AUTO_WIRE = new AutoWireAction(this); + public final transient Action AUTO_WIRE = new AutoWireAction(); public final transient Action NEW_ACTION = new NewAction(); public final transient Action OPEN_ACTION = new OpenAction(); public final transient SaveAction SAVE_ACTION = new SaveAction(); public final transient Action SAVE_AS_ACTION = new SaveAsAction(); - public final transient ToggleAction PROPAGATE_REAL_METADATA_ACTION = new PropagateRealMetaDataAction(this); + public final transient ToggleAction PROPAGATE_REAL_METADATA_ACTION = new PropagateRealMetaDataAction(); - private final transient Action importDataAction = new ImportDataAction(); + public final transient Action IMPORT_DATA_ACTION = new ImportDataAction(); public final transient Action IMPORT_PROCESS_ACTION = new ImportProcessAction(); public final transient Action EXPORT_PROCESS_ACTION = new ExportProcessAction(); // ---------- Export as Image/Print actions ----------------- public final transient Action EXPORT_ACTION = new ShowPrintAndExportDialogAction(false); - public final transient Action EXIT_ACTION = new ExitAction(this); + public final transient Action EXIT_ACTION = new ExitAction(); - public final transient RunAction RUN_ACTION = new RunAction(this); - public final transient Action PAUSE_ACTION = new PauseAction(this); - public final transient Action STOP_ACTION = new StopAction(this); - public final transient Action VALIDATE_ACTION = new ValidateProcessAction(this); + public final transient RunAction RUN_ACTION = new RunAction(); + public final transient Action PAUSE_ACTION = new PauseAction(); + public final transient Action STOP_ACTION = new StopAction(); + public final transient Action VALIDATE_ACTION = new ValidateProcessAction(); public final transient ToggleAction VALIDATE_AUTOMATICALLY_ACTION = new ValidateAutomaticallyAction(); private transient JButton runRemoteToolbarButton; - public final transient Action NEW_PERSPECTIVE_ACTION = new NewPerspectiveAction(this); + public final transient Action NEW_PERSPECTIVE_ACTION = new NewPerspectiveAction(); + public final transient Action RESTORE_PERSPECTIVE_ACTION = new RestoreDefaultPerspectiveAction(); public final transient Action SETTINGS_ACTION = new SettingsAction(); - public final transient Action UNDO_ACTION = new UndoAction(this); - public final transient Action REDO_ACTION = new RedoAction(this); - public final transient Action MANAGE_CONFIGURABLES_ACTION = new ResourceAction(true, "manage_configurables") { - - private static final long serialVersionUID = 1L; + public final transient Action UNDO_ACTION = new UndoAction(); + public final transient Action REDO_ACTION = new RedoAction(); + public final transient Action MANAGE_CONFIGURABLES_ACTION = new ManageConfigurablesAction(); - @Override - public void loggedActionPerformed(final ActionEvent e) { - ConfigurableDialog dialog = new ConfigurableDialog(getProcess()); - dialog.setVisible(true); - } - }; + public final transient Action TUTORIAL_ACTION = new TutorialAction(); + public final transient Action BROWSE_VIDEOS_ACTION = new BrowseAction("toolbar_resources.help_videos", URI.create("http://redirects.rapidminer.com/app/studio/8.1/getting-started-video/main_tool_bar")); + public final transient Action BROWSE_COMMUNITY_ACTION = new BrowseAction("toolbar_resources.help_forum", URI.create("http://redirects.rapidminer.com/app/studio/7.2/forum/main_tool_bar")); + public final transient Action BROWSE_DOCUMENTATION_ACTION = new BrowseAction("toolbar_resources.documentation", URI.create("http://redirects.rapidminer.com/app/studio/7.2/documentation/main_tool_bar")); + public final transient Action BROWSE_SUPPORT_ACTION = new BrowseAction("toolbar_resources.support", URI.create("http://redirects.rapidminer.com/app/studio/7.2/support/main_tool_bar")); + public final transient Action ABOUT_ACTION = new AboutAction(); // -------------------------------------------------------------------------------- @@ -448,6 +453,8 @@ public void loggedActionPerformed(final ActionEvent e) { */ private BubbleWindow missingParameterBubble; + private transient ActionsGlobalSearchManager actionsGlobalSearchManager; + private final JMenuBar menuBar; private final MainToolBar toolBar; @@ -633,7 +640,7 @@ public void quit() { RapidMiner.quit(ExitMode.NORMAL); } }; - OSXAdapter.adaptUI(this, SETTINGS_ACTION, new AboutAction(this), quitListener); + OSXAdapter.adaptUI(this, SETTINGS_ACTION, new AboutAction(), quitListener); } catch (Throwable t) { // catch everything - in case the OSX adapter is called without being on a OS X // system @@ -697,11 +704,12 @@ public void quit() { fileMenu.add(SAVE_ACTION); fileMenu.add(SAVE_AS_ACTION); fileMenu.addSeparator(); - fileMenu.add(importDataAction); + fileMenu.add(IMPORT_DATA_ACTION); fileMenu.add(IMPORT_PROCESS_ACTION); fileMenu.add(EXPORT_PROCESS_ACTION); menuBar.add(fileMenu); + // edit menu ((ResourceAction) actions.INFO_OPERATOR_ACTION).addToActionMap(JComponent.WHEN_FOCUSED, true, true, null, getProcessPanel().getProcessRenderer(), getOperatorTree()); @@ -736,6 +744,7 @@ public void quit() { // editMenu.add(actions.MAKE_DIRTY_ACTION); menuBar.add(editMenu); + // process menu processMenu = new ResourceMenu("process"); processMenu.setMargin(menuBarInsets); @@ -756,13 +765,16 @@ public void quit() { processMenu.add(layoutMenu); menuBar.add(processMenu); + // view menu viewMenu = new ResourceMenu("view"); viewMenu.setMargin(menuBarInsets); viewMenu.add(new PerspectiveMenu(perspectiveController)); viewMenu.add(NEW_PERSPECTIVE_ACTION); viewMenu.add(dockableMenu = new DockableMenu(dockingContext)); - viewMenu.add(perspectiveController.getRestoreDefaultAction()); + viewMenu.add(RESTORE_PERSPECTIVE_ACTION); + + menuBar.add(viewMenu); // create settings menu (will be added in finishInitialization()) @@ -776,6 +788,13 @@ public void quit() { // help menu helpMenu = new ResourceMenu("help"); + helpMenu.add(TUTORIAL_ACTION); + helpMenu.add(BROWSE_VIDEOS_ACTION); + helpMenu.add(BROWSE_COMMUNITY_ACTION); + helpMenu.add(BROWSE_DOCUMENTATION_ACTION); + helpMenu.add(BROWSE_SUPPORT_ACTION); + helpMenu.addSeparator(); + helpMenu.add(ABOUT_ACTION); // extensions menu extensionsMenu = new ResourceMenu("extensions"); @@ -789,6 +808,9 @@ public void quit() { getContentPane().add(getStatusBar(), BorderLayout.SOUTH); getStatusBar().startClockThread(); + // initialize Ctrl+F shortcut to start Global Search + new GlobalSearchAction(); + setProcess(new Process(), true); perspectiveController.getModel().addPerspectiveChangeListener(perspectiveChangeListener); @@ -834,6 +856,7 @@ public void finishInitialization() { fileMenu.addSeparator(); fileMenu.add(EXIT_ACTION); + // Password Manager settingsMenu.add(PasswordManager.OPEN_WINDOW); if (SystemInfoUtilities.getOperatingSystem() != OperatingSystem.OSX || !OSXAdapter.isAdapted()) { @@ -1635,6 +1658,26 @@ public JToolBar getButtonToolbar() { return buttonToolbar; } + /** + * The {@link com.rapidminer.search.GlobalSearchManager} for {@link ResourceAction}s. + * + * @return the manager to add resource actions to the Global Search. + * @since 8.1 + */ + public ActionsGlobalSearchManager getActionsGlobalSearchManager() { + return actionsGlobalSearchManager; + } + + /** + * Prepare adding menu actions to global search. Calling multiple times has no effect. + * @since 8.1 + */ + protected void initActionsGlobalSearch() { + if (actionsGlobalSearchManager == null) { + actionsGlobalSearchManager = (ActionsGlobalSearchManager) new ActionsGlobalSearch().getSearchManager(); + } + } + /** * The {@link TutorialSelector} holds the selected {@link Tutorial}. * diff --git a/src/main/java/com/rapidminer/gui/MainToolBar.java b/src/main/java/com/rapidminer/gui/MainToolBar.java index ede753e0a..c0b5067ea 100644 --- a/src/main/java/com/rapidminer/gui/MainToolBar.java +++ b/src/main/java/com/rapidminer/gui/MainToolBar.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -19,42 +19,35 @@ package com.rapidminer.gui; import java.awt.Color; -import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; -import java.net.URI; +import java.awt.Insets; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; import java.util.ArrayList; import java.util.Collection; +import java.util.Comparator; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; - import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JButton; +import javax.swing.JLabel; import javax.swing.JPanel; -import com.rapidminer.gui.actions.AboutAction; -import com.rapidminer.gui.actions.BrowseAction; -import com.rapidminer.gui.actions.RedoAction; -import com.rapidminer.gui.actions.UndoAction; import com.rapidminer.gui.actions.WorkspaceAction; -import com.rapidminer.gui.actions.startup.TutorialAction; import com.rapidminer.gui.look.Colors; -import com.rapidminer.gui.osx.OSXAdapter; -import com.rapidminer.gui.tools.ResourceActionAdapter; +import com.rapidminer.gui.search.GlobalSearchPanel; +import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.ResourceLabel; -import com.rapidminer.gui.tools.components.DropDownPopupButton.DropDownPopupButtonBuilder; import com.rapidminer.gui.tools.components.composite.PerspectiveToggleGroup; import com.rapidminer.gui.tools.components.composite.SplitButton; import com.rapidminer.tools.I18N; -import com.rapidminer.tools.Observable; -import com.rapidminer.tools.Observer; -import com.rapidminer.tools.SystemInfoUtilities; -import com.rapidminer.tools.SystemInfoUtilities.OperatingSystem; /** @@ -68,18 +61,24 @@ */ public class MainToolBar extends JPanel { - private static final Dimension PERSPECTIVES_SIZE = new Dimension(120, 32); + private static final Dimension PERSPECTIVES_SIZE = new Dimension(100, 32); private static final long serialVersionUID = 1L; + /** How many views should be shown by default as buttons */ + private static final int DEFAULT_PRIMARY_VISIBLE = 3; + /** Split button containing all run actions. */ private SplitButton runActions; + /** Panel containing all clickable actions */ + private JPanel actionsPanel; + /** Panel which contains the perspective group and a label */ private JPanel perspectivesPanel; - /** Panel which contains the resource button */ - private JPanel resourcesPanel; + /** Label contained in the {@link #perspectivesPanel} */ + private final ResourceLabel perspectivesLabel; /** Displays the available perspectives */ private PerspectiveToggleGroup perspectivesGroup; @@ -113,15 +112,14 @@ public MainToolBar(final MainFrame mainframe) { // preferred width. setLayout(new GridBagLayout()); - GridBagConstraints constrainst = new GridBagConstraints(); + GridBagConstraints gbc = new GridBagConstraints(); // left column - constrainst.gridx = 0; - constrainst.weightx = 1; - constrainst.fill = GridBagConstraints.HORIZONTAL; + gbc.gridx = 0; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.HORIZONTAL; // action button panel - JPanel actionsPanel; { FlowLayout actionsLayout = new FlowLayout(FlowLayout.LEFT); actionsLayout.setVgap(0); @@ -142,16 +140,6 @@ public MainToolBar(final MainFrame mainframe) { actionsPanel.add(Box.createRigidArea(new Dimension(10, 0))); - JButton undoButton = new JButton(new UndoAction(mainframe)); - undoButton.setHideActionText(true); - actionsPanel.add(undoButton); - - JButton redoButton = new JButton(new RedoAction(mainframe)); - redoButton.setHideActionText(true); - actionsPanel.add(redoButton); - - actionsPanel.add(Box.createRigidArea(new Dimension(10, 0))); - runActions = new SplitButton(mainframe.RUN_ACTION); runActions.SetHideActionText(true); actionsPanel.add(runActions); @@ -160,13 +148,13 @@ public MainToolBar(final MainFrame mainframe) { stopButton.setHideActionText(true); actionsPanel.add(stopButton); - add(actionsPanel, constrainst); + add(actionsPanel, gbc); } // middle column - constrainst.gridx += 1; - constrainst.weightx = 0; - constrainst.fill = GridBagConstraints.NONE; + gbc.gridx += 1; + gbc.weightx = 0; + gbc.fill = GridBagConstraints.NONE; // perspectives panel { @@ -175,88 +163,59 @@ public MainToolBar(final MainFrame mainframe) { perspectivesPanel = new JPanel(perspectiveLayout); perspectivesPanel.setOpaque(false); - ResourceLabel viewPerspectiveLabel = new ResourceLabel("workspace_views"); - viewPerspectiveLabel.setForeground(Color.GRAY); - perspectivesPanel.add(viewPerspectiveLabel); + perspectivesLabel = new ResourceLabel("workspace_views"); + perspectivesLabel.setForeground(Color.GRAY); + perspectivesPanel.add(perspectivesLabel); + PerspectiveToggleGroup.init(); final PerspectiveController perspectiveController = mainframe.getPerspectiveController(); PerspectiveModel perspectiveModel = perspectiveController.getModel(); - perspectiveModel.addObserver(new Observer>() { - - @Override - public void update(Observable> observable, List perspectives) { - updatePerspectivePanel(perspectiveController, perspectives); - Action perspectiveAction = perspectiveActionMap.get(perspectiveName); - if (perspectiveAction != null) { - perspectivesGroup.setSelected(perspectiveAction); - } + perspectiveModel.addObserver((observable, perspectives) -> { + updatePerspectivePanel(perspectiveController, perspectives); + Action perspectiveAction = perspectiveActionMap.get(perspectiveName); + if (perspectiveAction != null) { + perspectivesGroup.setSelected(perspectiveAction); } }, true); - perspectiveModel.addPerspectiveChangeListener(new PerspectiveChangeListener() { - - @Override - public void perspectiveChangedTo(Perspective perspective) { - perspectiveName = perspective.getName(); - Action perspectiveAction = perspectiveActionMap.get(perspectiveName); - if (perspectiveAction != null) { - perspectivesGroup.setSelected(perspectiveAction); - } - + perspectiveModel.addPerspectiveChangeListener(perspective -> { + perspectiveName = perspective.getName(); + Action perspectiveAction = perspectiveActionMap.get(perspectiveName); + if (perspectiveAction != null) { + perspectivesGroup.setSelected(perspectiveAction); } - }); + }); updatePerspectivePanel(perspectiveController, perspectiveController.getModel().getAllPerspectives()); - - add(perspectivesPanel, constrainst); + addComponentListener(new MainToolBarResizer(perspectiveController)); + add(perspectivesPanel, gbc); } - // right column - constrainst.gridx += 1; - constrainst.weightx = 1; - constrainst.fill = GridBagConstraints.HORIZONTAL; - - { - resourcesPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - resourcesPanel.setOpaque(false); - resourcesPanel.setPreferredSize(actionsPanel.getPreferredSize()); + // Filler + gbc.gridx += 1; + gbc.weightx = 1; + gbc.fill = GridBagConstraints.HORIZONTAL; + add(new JLabel(), gbc); - resourcesPanel.add(createResourcesButton()); + // Global Search + gbc.gridx += 1; + gbc.weightx = 0; + gbc.fill = GridBagConstraints.NONE; + gbc.insets = new Insets(0, 0, 0, 5); + add(GlobalSearchPanel.getInstance(), gbc); - add(resourcesPanel, constrainst); - } + // help section + gbc.gridx += 1; + gbc.weightx = 0; + gbc.fill = GridBagConstraints.NONE; } - /** - * @return a dropdown button with a menu containing a links to the tutorial, the online - * documentation, the forum, the support and the about box - */ - private Component createResourcesButton() { - DropDownPopupButtonBuilder builder = new DropDownPopupButtonBuilder(); - builder.with(new ResourceActionAdapter("toolbar_resources")); - - builder.add(new TutorialAction()); - - builder.add(new BrowseAction("toolbar_resources.documentation", - URI.create("http://redirects.rapidminer.com/app/studio/7.2/documentation/main_tool_bar"))); - builder.add(new BrowseAction("toolbar_resources.help_forum", - URI.create("http://redirects.rapidminer.com/app/studio/7.2/forum/main_tool_bar"))); - builder.add(new BrowseAction("toolbar_resources.support", - URI.create("http://redirects.rapidminer.com/app/studio/7.2/support/main_tool_bar"))); - - // put "About RapidMiner Studio" action as last action if not on ox - if (SystemInfoUtilities.getOperatingSystem() != OperatingSystem.OSX || !OSXAdapter.isAdapted()) { - builder.addSeparator(); - builder.add(new AboutAction((MainFrame) ApplicationFrame.getApplicationFrame())); - } - return builder.build(); - } public void update() { List factories = RunActionRegistry.INSTANCE.getFacories(); - for (int i = 0; i < factories.size(); i++) { + for (MenuItemFactory factory : factories) { runActions.getPopupMenu().addSeparator(); - for (MenuItemFactory.MenuEntry entry : factories.get(i).create()) { + for (MenuItemFactory.MenuEntry entry : factory.create()) { if (entry.isAction()) { runActions.getPopupMenu().add(entry.getAction()); } else if (entry.isMenu()) { @@ -278,16 +237,17 @@ public void update() { * all available perspectives */ private void updatePerspectivePanel(final PerspectiveController perspectiveController, - Collection perspectives) { + Collection perspectives) { if (perspectivesGroup != null) { perspectivesPanel.remove(perspectivesGroup); } perspectiveActionMap.clear(); - List primaryActionList = new ArrayList<>(); - List secondaryActionList = new ArrayList<>(); + List knownActionList = new ArrayList<>(); + List nonUserActionList = new ArrayList<>(); + List userDefinedActionList = new ArrayList<>(); for (Perspective p : perspectives) { String name = p.getName(); - Action action = new WorkspaceAction(perspectiveController, p, name); + Action action = new WorkspaceAction(name); action.putValue(Action.LARGE_ICON_KEY, null); action.putValue(Action.SMALL_ICON, null); if (p.isUserDefined()) { @@ -296,26 +256,187 @@ private void updatePerspectivePanel(final PerspectiveController perspectiveContr action.putValue(Action.SHORT_DESCRIPTION, I18N.getMessage(I18N.getGUIBundle(), "gui.action.workspace_user.tip", name)); } - if (!p.isUserDefined()) { - primaryActionList.add(action); - } else { - secondaryActionList.add(action); + + // Add Design, Result, Model Wizard and Hadoop Data to known actions, since they are supported and should + // be in this exact order + switch (p.getName()) { + case PerspectiveModel.DESIGN: + case PerspectiveModel.RESULT: + case PerspectiveModel.HADOOP_DATA: + knownActionList.add(action); + break; + case PerspectiveModel.MODEL_WIZARD: + // ensure model wizard view is in front of hadoop data view + // design and result are the first to be added (see PerspectiveModel#makePredefined), so this will not fail + knownActionList.add(2, action); + break; + default: + if (!p.isUserDefined()) { + nonUserActionList.add(action); + } else { + userDefinedActionList.add(action); + } } + perspectiveActionMap.put(p.getName(), action); } - if (primaryActionList.size() > 1) { - perspectivesGroup = new PerspectiveToggleGroup(perspectiveController, PERSPECTIVES_SIZE, - primaryActionList.toArray(new Action[primaryActionList.size()])); + nonUserActionList.sort(Comparator.comparing(a -> String.valueOf(a.getValue(ResourceAction.NAME)))); + userDefinedActionList.sort(Comparator.comparing(a -> String.valueOf(a.getValue(ResourceAction.NAME)))); + + // combine actions that might be displayed as their own buttons + List displayableActionList = new ArrayList<>(knownActionList); + displayableActionList.addAll(nonUserActionList); + + boolean hasUserDefined = !userDefinedActionList.isEmpty(); + VisibilitySettings visibility = calculateVisibility(displayableActionList.size(), hasUserDefined); + // primary actions and secondary actions + Action[][] actions = createActionArrays(displayableActionList, visibility.primary); + + perspectivesGroup = null; + if (actions[0] != null && actions[0].length > 1) { + perspectivesGroup = new PerspectiveToggleGroup(perspectiveController, PERSPECTIVES_SIZE, actions[0]); } - if (perspectivesGroup != null && secondaryActionList.size() > 0) { - perspectivesGroup.addSeconderyActions(secondaryActionList.toArray(new Action[secondaryActionList.size()])); + // check for user views to keep order of popup items the same (non-user, create view, user) + if (perspectivesGroup != null && (actions[1].length > 0 || hasUserDefined)) { + perspectivesGroup.addSeconderyActions(actions[1]); + } + if (perspectivesGroup != null && hasUserDefined) { + perspectivesGroup.addSeconderyActions(userDefinedActionList.toArray(new Action[0])); } if (perspectivesGroup != null) { + perspectivesLabel.setVisible(visibility.showLabel); + if (!visibility.fullMoreButton) { + perspectivesGroup.minimizeSecondaryButton(); + } perspectivesPanel.add(perspectivesGroup); perspectivesPanel.validate(); perspectivesPanel.repaint(); } } + /** + * Calculates how many actions should be visible (i.e. primary buttons) and if the {@link #perspectivesLabel} and + * "More" button (i.e. secondary button) should be visible/minimized. Will return the result in a + * {@link VisibilitySettings} object. + * + * @param numberOfActions + * number of displayable actions + * @param hasUserDefined + * if user defined views are registered + * @return the visibility settings + * @since 8.1 + */ + private VisibilitySettings calculateVisibility(int numberOfActions, boolean hasUserDefined) { + int toolBarWidth = getWidth(); + if (toolBarWidth == 0) { + VisibilitySettings visibility = new VisibilitySettings(); + // not yet initialised; build default (3 primary actions, views label, full "More" button) + visibility.primary = numberOfActions; + if (visibility.primary > DEFAULT_PRIMARY_VISIBLE) { + visibility.primary = DEFAULT_PRIMARY_VISIBLE; + } + visibility.showLabel = visibility.fullMoreButton = true; + return visibility; + } + + VisibilitySettings visibility = new VisibilitySettings(); + int labelWidth = perspectivesLabel.getPreferredSize().width + 5; //insets + int moreButtonWidth = PerspectiveToggleGroup.getDefaultSecondaryButtonSize().width; + int moreButtonMinWidth = PerspectiveToggleGroup.getMinimizedSecondaryButtonSize().width; + int actionsWidth = actionsPanel.getPreferredSize().width; + int searchWidth = GlobalSearchPanel.PREFERRED_WIDTH + 5; //insets + int availableWidth = toolBarWidth - actionsWidth - searchWidth - 10; //insets? + + // make sure to not calculate too much + visibility.primary = Math.min(DEFAULT_PRIMARY_VISIBLE, numberOfActions); + if (visibility.primary >= numberOfActions && !hasUserDefined) { + // no secondary actions => no "More" button + moreButtonWidth = moreButtonMinWidth = 0; + } + + int primaryWidthNeeded = visibility.primary * PERSPECTIVES_SIZE.width; + if (availableWidth >= labelWidth + primaryWidthNeeded + moreButtonWidth) { + // everything can be shown + visibility.primary = availableWidth - labelWidth - moreButtonWidth; + visibility.primary /= PERSPECTIVES_SIZE.width; + visibility.showLabel = visibility.fullMoreButton = true; + } else { + // check if label should be hidden or "more" button be minimized + availableWidth -= primaryWidthNeeded; + visibility.showLabel = availableWidth >= labelWidth + moreButtonMinWidth; + if (moreButtonMinWidth != 0) { + visibility.fullMoreButton = !visibility.showLabel && availableWidth >= moreButtonWidth; + } + } + return visibility; + } + + /** + * Returns a filled action matrix with all provided actions. Will split the actions according to {@code primaryVisible}. + * + * @param actionList + * list of displayable actions + * @param primaryVisible + * limit of visible primary actions + * @return the filled action matrix + * @since 8.1 + */ + private Action[][] createActionArrays(List actionList, int primaryVisible) { + Action[][] actions = new Action[2][]; + Iterator actionIterator = actionList.iterator(); + if (primaryVisible > actionList.size()){ + primaryVisible = actionList.size(); + } + actions[0] = new Action[primaryVisible]; + actions[1] = new Action[actionList.size() - primaryVisible]; + int i = 0; + for (; i < primaryVisible; i++) { + actions[0][i] = actionIterator.next(); + } + while (actionIterator.hasNext()) { + actions[1][i - primaryVisible] = actionIterator.next(); + i++; + } + return actions; + } + + /** + * Simple resize listener for the {@link MainToolBar}. Will update on resize events if {@link #shouldUpdate()} + * returns {@code true}; + * + * @author Jan Czogalla + * @since 8.1 + */ + private class MainToolBarResizer extends ComponentAdapter { + + PerspectiveController perspectiveController; + + MainToolBarResizer(PerspectiveController perspectiveController) { + this.perspectiveController = perspectiveController; + } + + @Override + public void componentResized(ComponentEvent e) { + if (e.getComponent() != MainToolBar.this) { + return; + } + if (shouldUpdate()) { + updatePerspectivePanel(perspectiveController, perspectiveController.getModel().getAllPerspectives()); + } + } + + /** Whether to update {@link #perspectivesPanel} on resize. */ + private boolean shouldUpdate() { + return true; + } + } + + /** Simple POJO to store visibility for the {@link #calculateVisibility(int, boolean)} method. */ + private static class VisibilitySettings { + int primary; + boolean showLabel; + boolean fullMoreButton; + } + } diff --git a/src/main/java/com/rapidminer/gui/MenuItemFactory.java b/src/main/java/com/rapidminer/gui/MenuItemFactory.java index 8f7edeaab..30d8431c3 100644 --- a/src/main/java/com/rapidminer/gui/MenuItemFactory.java +++ b/src/main/java/com/rapidminer/gui/MenuItemFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/MetaDataUpdateQueue.java b/src/main/java/com/rapidminer/gui/MetaDataUpdateQueue.java index 7a62893ee..5a4db5303 100644 --- a/src/main/java/com/rapidminer/gui/MetaDataUpdateQueue.java +++ b/src/main/java/com/rapidminer/gui/MetaDataUpdateQueue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -63,7 +63,7 @@ public void run() { public void run() { getProgressListener().setTotal(100); getProgressListener().setCompleted(10); - if (force) { + if (force) { process.getRootOperator().checkAll(); } else { process.getRootOperator().checkAllExcludingMetaData(); diff --git a/src/main/java/com/rapidminer/gui/OperatorDocLoader.java b/src/main/java/com/rapidminer/gui/OperatorDocLoader.java index 3033fe37b..62591cb32 100644 --- a/src/main/java/com/rapidminer/gui/OperatorDocLoader.java +++ b/src/main/java/com/rapidminer/gui/OperatorDocLoader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/OperatorDocToHtmlConverter.java b/src/main/java/com/rapidminer/gui/OperatorDocToHtmlConverter.java index fa2633d72..5b9b04cfa 100644 --- a/src/main/java/com/rapidminer/gui/OperatorDocToHtmlConverter.java +++ b/src/main/java/com/rapidminer/gui/OperatorDocToHtmlConverter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/OperatorDocumentationBrowser.java b/src/main/java/com/rapidminer/gui/OperatorDocumentationBrowser.java index 4cdece398..ee092b23e 100644 --- a/src/main/java/com/rapidminer/gui/OperatorDocumentationBrowser.java +++ b/src/main/java/com/rapidminer/gui/OperatorDocumentationBrowser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/Perspective.java b/src/main/java/com/rapidminer/gui/Perspective.java index 474a0f2a9..54bc385c1 100644 --- a/src/main/java/com/rapidminer/gui/Perspective.java +++ b/src/main/java/com/rapidminer/gui/Perspective.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/PerspectiveChangeListener.java b/src/main/java/com/rapidminer/gui/PerspectiveChangeListener.java index cf0a89ff3..c9a5982e4 100644 --- a/src/main/java/com/rapidminer/gui/PerspectiveChangeListener.java +++ b/src/main/java/com/rapidminer/gui/PerspectiveChangeListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/PerspectiveController.java b/src/main/java/com/rapidminer/gui/PerspectiveController.java index 2612609f0..d63056ae0 100644 --- a/src/main/java/com/rapidminer/gui/PerspectiveController.java +++ b/src/main/java/com/rapidminer/gui/PerspectiveController.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,17 +18,18 @@ */ package com.rapidminer.gui; -import java.awt.event.ActionEvent; import java.io.File; import java.io.FilenameFilter; import java.util.logging.Level; - import javax.swing.Action; +import javax.swing.ImageIcon; +import com.rapidminer.gui.actions.WorkspaceAction; import com.rapidminer.gui.processeditor.ProcessLogTab; import com.rapidminer.gui.processeditor.results.ResultTab; -import com.rapidminer.gui.tools.ResourceAction; +import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.tools.FileSystemService; +import com.rapidminer.tools.I18N; import com.rapidminer.tools.LogService; import com.rapidminer.tools.Observable; import com.rapidminer.tools.usagestats.ActionStatisticsCollector; @@ -55,19 +56,6 @@ public class PerspectiveController { private final PerspectiveModel model; - private final Action restoreDefaultAction = new ResourceAction("restore_predefined_perspective_default") { - - private static final long serialVersionUID = 1L; - - @Override - public void loggedActionPerformed(final ActionEvent e) { - if (!getModel().getSelectedPerspective().isUserDefined()) { - getModel().restoreDefault(getModel().getSelectedPerspective().getName()); - getModel().getSelectedPerspective().apply(context); - } - } - }; - /** * Creates a new {@link PerspectiveController} with the given docking context. * @@ -100,7 +88,7 @@ public Dockable resolveDockable(final String key) { /** * Displays the given perspective, identified by the name. * - * @param perspective + * @param perspectiveName * the perspective which should be shown. */ public void showPerspective(final String perspectiveName) { @@ -125,7 +113,7 @@ public void showPerspective(final Perspective perspective) { ActionStatisticsCollector.getInstance().stopTimer(oldPerspective); } perspective.apply(context); - getRestoreDefaultAction().setEnabled(!perspective.isUserDefined()); + RapidMinerGUI.getMainFrame().RESTORE_PERSPECTIVE_ACTION.setEnabled(!perspective.isUserDefined()); ActionStatisticsCollector.getInstance().startTimer(perspective, ActionStatisticsCollector.TYPE_PERSPECTIVE, perspective.getName(), null); ActionStatisticsCollector.getInstance().log(ActionStatisticsCollector.TYPE_PERSPECTIVE, perspective.getName(), @@ -278,6 +266,13 @@ public Perspective createUserPerspective(final String name, final boolean show) return perspective; } + public void restoreDefaultPerspective() { + if (!getModel().getSelectedPerspective().isUserDefined()) { + getModel().restoreDefault(getModel().getSelectedPerspective().getName()); + getModel().getSelectedPerspective().apply(context); + } + } + /** * Getter for the underlying model. * @@ -291,9 +286,39 @@ public PerspectiveModel getModel() { * Getter for the restore default action for a predefined perspective. * * @return the restore default {@link Action} + * @deprecated use RapidMinerGUI.getMainFrame().RESTORE_PERSPECTIVE_ACTION instead */ + @Deprecated public Action getRestoreDefaultAction() { - return restoreDefaultAction; + return RapidMinerGUI.getMainFrame().RESTORE_PERSPECTIVE_ACTION; + } + + /** + * Creates the workspace switch action for the given perspective. + * + * @param p + * the perspective + * @return the action, never {@code null} + * @since 8.1 + */ + public WorkspaceAction createPerspectiveAction(final Perspective p) { + String name = p.getName(); + WorkspaceAction action = new WorkspaceAction(name); + + if (p.isUserDefined()) { + action.putValue(Action.ACTION_COMMAND_KEY, "perspective-" + name); + action.putValue(Action.NAME, name); + ImageIcon createIconSmall = SwingTools + .createIcon("16/" + I18N.getMessage(I18N.getGUIBundle(), "gui.action.workspace_user.icon")); + ImageIcon createIconLarge = SwingTools + .createIcon("24/" + I18N.getMessage(I18N.getGUIBundle(), "gui.action.workspace_user.icon")); + action.putValue(Action.LARGE_ICON_KEY, createIconLarge); + action.putValue(Action.SMALL_ICON, createIconSmall); + action.putValue(Action.SHORT_DESCRIPTION, + I18N.getMessage(I18N.getGUIBundle(), "gui.action.workspace_user.tip", name)); + } + + return action; } /** diff --git a/src/main/java/com/rapidminer/gui/PerspectiveMenu.java b/src/main/java/com/rapidminer/gui/PerspectiveMenu.java index 73200233f..787345b1c 100644 --- a/src/main/java/com/rapidminer/gui/PerspectiveMenu.java +++ b/src/main/java/com/rapidminer/gui/PerspectiveMenu.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -21,17 +21,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; - -import javax.swing.Action; import javax.swing.ButtonGroup; -import javax.swing.ImageIcon; import javax.swing.JMenuItem; import javax.swing.JRadioButtonMenuItem; -import com.rapidminer.gui.actions.WorkspaceAction; +import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.ResourceMenu; -import com.rapidminer.gui.tools.SwingTools; -import com.rapidminer.tools.I18N; import com.rapidminer.tools.Observable; import com.rapidminer.tools.Observer; @@ -96,18 +91,8 @@ private void updatePerspectives(List perspectives) { perspectiveMap.clear(); workspaceMenuGroup = new ButtonGroup(); for (Perspective p : perspectives) { - String name = p.getName(); - Action action = new WorkspaceAction(PerspectiveMenu.this.perspectiveController, p, name); - if (p.isUserDefined()) { - action.putValue(Action.ACTION_COMMAND_KEY, "perspective-" + name); - action.putValue(Action.NAME, name); - ImageIcon createIcon = SwingTools - .createIcon("16/" + I18N.getMessage(I18N.getGUIBundle(), "gui.action.workspace_user.icon")); - action.putValue(Action.LARGE_ICON_KEY, createIcon); - action.putValue(Action.SMALL_ICON, createIcon); - action.putValue(Action.SHORT_DESCRIPTION, - I18N.getMessage(I18N.getGUIBundle(), "gui.action.workspace_user.tip", name)); - } + ResourceAction action = perspectiveController.createPerspectiveAction(p); + JMenuItem menuItem = new JRadioButtonMenuItem(action); add(menuItem); perspectiveMap.put(p.getName(), menuItem); diff --git a/src/main/java/com/rapidminer/gui/PerspectiveModel.java b/src/main/java/com/rapidminer/gui/PerspectiveModel.java index cdb77df40..2ebeccaa8 100644 --- a/src/main/java/com/rapidminer/gui/PerspectiveModel.java +++ b/src/main/java/com/rapidminer/gui/PerspectiveModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -49,6 +49,9 @@ public class PerspectiveModel extends AbstractObservable> { public static final String RESULT = "result"; public static final String DESIGN = "design"; + public static final String MODEL_WIZARD = "model_wizard"; + public static final String HADOOP_DATA = "hadoop_data"; + private final Map perspectives = new LinkedHashMap<>(); private Perspective selectedPerspective; diff --git a/src/main/java/com/rapidminer/gui/PerspectiveProperties.java b/src/main/java/com/rapidminer/gui/PerspectiveProperties.java index 6db3373b9..93fd17e45 100644 --- a/src/main/java/com/rapidminer/gui/PerspectiveProperties.java +++ b/src/main/java/com/rapidminer/gui/PerspectiveProperties.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/Perspectives.java b/src/main/java/com/rapidminer/gui/Perspectives.java index a807b6b54..5e15e4c0b 100644 --- a/src/main/java/com/rapidminer/gui/Perspectives.java +++ b/src/main/java/com/rapidminer/gui/Perspectives.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/PerspectivesPanelBar.java b/src/main/java/com/rapidminer/gui/PerspectivesPanelBar.java index 6d30df3ad..df98f5bc8 100644 --- a/src/main/java/com/rapidminer/gui/PerspectivesPanelBar.java +++ b/src/main/java/com/rapidminer/gui/PerspectivesPanelBar.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/ProcessThread.java b/src/main/java/com/rapidminer/gui/ProcessThread.java index 3104dd884..f734f82e1 100644 --- a/src/main/java/com/rapidminer/gui/ProcessThread.java +++ b/src/main/java/com/rapidminer/gui/ProcessThread.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/RapidMinerGUI.java b/src/main/java/com/rapidminer/gui/RapidMinerGUI.java index 133d5d819..8b287d387 100644 --- a/src/main/java/com/rapidminer/gui/RapidMinerGUI.java +++ b/src/main/java/com/rapidminer/gui/RapidMinerGUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -45,7 +45,6 @@ import java.util.Map; import java.util.Properties; import java.util.logging.Level; - import javax.swing.SwingUtilities; import javax.swing.ToolTipManager; import javax.swing.UIManager; @@ -58,6 +57,8 @@ import com.rapidminer.RepositoryProcessLocation; import com.rapidminer.core.io.data.source.DataSourceFactoryRegistry; import com.rapidminer.gui.actions.OpenAction; +import com.rapidminer.gui.actions.search.ActionsGlobalSearch; +import com.rapidminer.gui.actions.search.ActionsGlobalSearchGUIProvider; import com.rapidminer.gui.autosave.AutoSave; import com.rapidminer.gui.dialog.EULADialog; import com.rapidminer.gui.docking.RapidDockableContainerFactory; @@ -67,7 +68,11 @@ import com.rapidminer.gui.look.fc.BookmarkIO; import com.rapidminer.gui.look.ui.RapidDockingUISettings; import com.rapidminer.gui.plotter.PlotterPanel; +import com.rapidminer.gui.processeditor.search.OperatorGlobalSearch; +import com.rapidminer.gui.processeditor.search.OperatorGlobalSearchGUIProvider; import com.rapidminer.gui.safemode.SafeMode; +import com.rapidminer.gui.search.GlobalSearchGUIRegistry; +import com.rapidminer.gui.search.GlobalSearchPanel; import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.gui.tools.dialogs.DecisionRememberingConfirmDialog; import com.rapidminer.gui.tools.logging.LogHandlerModel; @@ -83,6 +88,10 @@ import com.rapidminer.repository.MalformedRepositoryLocationException; import com.rapidminer.repository.RepositoryLocation; import com.rapidminer.repository.RepositoryManager; +import com.rapidminer.repository.gui.search.RepositoryGlobalSearchGUIProvider; +import com.rapidminer.repository.search.RepositoryGlobalSearch; +import com.rapidminer.search.GlobalSearchIndexer; +import com.rapidminer.search.GlobalSearchRegistry; import com.rapidminer.security.PluginSandboxPolicy; import com.rapidminer.security.PluginSecurityManager; import com.rapidminer.studio.io.data.internal.file.LocalFileDataSourceFactory; @@ -323,13 +332,22 @@ public synchronized void run(final String openLocation) throws Exception { RapidMiner.showSplash(); + RapidMiner.splashMessage("plaf"); + setupToolTipManager(); + setupGUI(); + FontTools.checkAndSetFallbackUIFont(); + RapidMiner.splashMessage("basic"); + // initialize Global Search framework + GlobalSearchIndexer.INSTANCE.initialize(); + // initialize RapidMiner // As side effect this also initialized the ConstraintManager // with the default product and constraints RapidMiner.init(); + // store (possibly new) active license (necessary, since no // ACTIVE_LICENSE_CHANGED event is fired on startup) LicenseManagerRegistry.INSTANCE.get().getAllActiveLicenses().forEach((l) -> { @@ -351,11 +369,7 @@ public synchronized void run(final String openLocation) throws Exception { LogModelRegistry.INSTANCE.register(defaultLogModel); RapidMiner.splashMessage("workspace"); - RapidMiner.splashMessage("plaf"); - setupToolTipManager(); - setupGUI(); - FontTools.checkAndSetFallbackUIFont(); // check whether current EULA has been accepted if (!EULADialog.getEULAAccepted()) { @@ -387,6 +401,9 @@ public void run() { }); RapidMiner.splashMessage("gui_properties"); loadGUIProperties(mainFrame); + + // initialize Global Search for actions + mainFrame.initActionsGlobalSearch(); RapidMiner.splashMessage("plugin_gui"); Plugin.initPluginGuis(mainFrame); @@ -428,6 +445,20 @@ public void run() { // otherwise the last extension log is active mainFrame.getLogViewer().getLogSelectionModel().setSelectedLogModel(RapidMinerGUI.getDefaultLogModel()); + // Global Search GUI Provider initialization + if (GlobalSearchRegistry.INSTANCE.getSearchCategoryById(OperatorGlobalSearch.CATEGORY_ID) != null) { + GlobalSearchGUIRegistry.INSTANCE.registerSearchVisualizationProvider(GlobalSearchRegistry.INSTANCE.getSearchCategoryById( + OperatorGlobalSearch.CATEGORY_ID), new OperatorGlobalSearchGUIProvider()); + } + if (GlobalSearchRegistry.INSTANCE.getSearchCategoryById(RepositoryGlobalSearch.CATEGORY_ID) != null) { + GlobalSearchGUIRegistry.INSTANCE.registerSearchVisualizationProvider(GlobalSearchRegistry.INSTANCE.getSearchCategoryById( + RepositoryGlobalSearch.CATEGORY_ID), new RepositoryGlobalSearchGUIProvider()); + } + if (GlobalSearchRegistry.INSTANCE.getSearchCategoryById(ActionsGlobalSearch.CATEGORY_ID) != null) { + GlobalSearchGUIRegistry.INSTANCE.registerSearchVisualizationProvider(GlobalSearchRegistry.INSTANCE.getSearchCategoryById( + ActionsGlobalSearch.CATEGORY_ID), new ActionsGlobalSearchGUIProvider()); + } + RapidMiner.hideSplash(); // inform listeners that the Splash screen was hidden @@ -439,6 +470,9 @@ public void run() { } } + // init visualization after extensions had the chance to add their GUI providers as well + GlobalSearchPanel.getInstance().initializeSearchResultVisualization(); + UsageStatsScheduler.init(); if (openLocation != null) { diff --git a/src/main/java/com/rapidminer/gui/RunActionRegistry.java b/src/main/java/com/rapidminer/gui/RunActionRegistry.java index 71f250550..356df1101 100644 --- a/src/main/java/com/rapidminer/gui/RunActionRegistry.java +++ b/src/main/java/com/rapidminer/gui/RunActionRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/ToolbarGUIStartupListener.java b/src/main/java/com/rapidminer/gui/ToolbarGUIStartupListener.java index 0e0be9fb1..99edb8414 100644 --- a/src/main/java/com/rapidminer/gui/ToolbarGUIStartupListener.java +++ b/src/main/java/com/rapidminer/gui/ToolbarGUIStartupListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/AboutAction.java b/src/main/java/com/rapidminer/gui/actions/AboutAction.java index 62ff00b1d..00a6a0f48 100644 --- a/src/main/java/com/rapidminer/gui/actions/AboutAction.java +++ b/src/main/java/com/rapidminer/gui/actions/AboutAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -23,6 +23,7 @@ import com.rapidminer.RapidMiner; import com.rapidminer.core.license.ProductConstraintManager; import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.dialogs.AboutBox; @@ -34,17 +35,24 @@ public class AboutAction extends ResourceAction { private static final long serialVersionUID = 1L; - private MainFrame mainFrame; - public AboutAction(MainFrame mainFrame) { + + public AboutAction() { super("about"); - this.mainFrame = mainFrame; setCondition(EDIT_IN_PROGRESS, DONT_CARE); } + /** + * @deprecated use {@link #AboutAction()} instead + */ + @Deprecated + public AboutAction(MainFrame mainFrame) { + this(); + } + @Override public void loggedActionPerformed(ActionEvent e) { - new AboutBox(mainFrame, RapidMiner.getLongVersion(), ProductConstraintManager.INSTANCE.getActiveLicense()) + new AboutBox(RapidMinerGUI.getMainFrame(), RapidMiner.getLongVersion(), ProductConstraintManager.INSTANCE.getActiveLicense()) .setVisible(true); } diff --git a/src/main/java/com/rapidminer/gui/actions/Actions.java b/src/main/java/com/rapidminer/gui/actions/Actions.java index 34730cba2..05369e2cc 100644 --- a/src/main/java/com/rapidminer/gui/actions/Actions.java +++ b/src/main/java/com/rapidminer/gui/actions/Actions.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -94,9 +94,9 @@ public void loggedActionPerformed(ActionEvent e) { new ToggleBreakpointItem(this, BreakpointListener.BREAKPOINT_BEFORE), new ToggleBreakpointItem(this, BreakpointListener.BREAKPOINT_AFTER) }; - public transient final ToggleAllBreakpointsItem TOGGLE_ALL_BREAKPOINTS = new ToggleAllBreakpointsItem(this); + public final ToggleAllBreakpointsItem TOGGLE_ALL_BREAKPOINTS = new ToggleAllBreakpointsItem(); - public transient final Action MAKE_DIRTY_ACTION = new ResourceAction(true, "make_dirty") { + public final Action MAKE_DIRTY_ACTION = new ResourceAction(true, "make_dirty") { private static final long serialVersionUID = -1260942717363137733L; @@ -112,7 +112,7 @@ public void loggedActionPerformed(ActionEvent e) { } }; - private transient final Action SHOW_PROBLEM_ACTION = new ResourceAction(true, "show_potential_problem") { + private final Action SHOW_PROBLEM_ACTION = new ResourceAction(true, "show_potential_problem") { private static final long serialVersionUID = -1260942717363137733L; diff --git a/src/main/java/com/rapidminer/gui/actions/AttributeDescriptionFileWizardAction.java b/src/main/java/com/rapidminer/gui/actions/AttributeDescriptionFileWizardAction.java index f802211f3..60b56027a 100644 --- a/src/main/java/com/rapidminer/gui/actions/AttributeDescriptionFileWizardAction.java +++ b/src/main/java/com/rapidminer/gui/actions/AttributeDescriptionFileWizardAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/AttributeEditorAction.java b/src/main/java/com/rapidminer/gui/actions/AttributeEditorAction.java index a90f1d387..501c0ff92 100644 --- a/src/main/java/com/rapidminer/gui/actions/AttributeEditorAction.java +++ b/src/main/java/com/rapidminer/gui/actions/AttributeEditorAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/AutoWireAction.java b/src/main/java/com/rapidminer/gui/actions/AutoWireAction.java index ca5cccf1f..9dfbe9cc3 100644 --- a/src/main/java/com/rapidminer/gui/actions/AutoWireAction.java +++ b/src/main/java/com/rapidminer/gui/actions/AutoWireAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -21,6 +21,7 @@ import java.awt.event.ActionEvent; import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.EditBlockingProgressThread; import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.operator.ExecutionUnit; @@ -39,12 +40,18 @@ public class AutoWireAction extends ResourceAction { private static final long serialVersionUID = -4597160351305617508L; - private final MainFrame mainFrame; - public AutoWireAction(MainFrame mainFrame) { + public AutoWireAction() { super(true, "wire"); setCondition(OPERATOR_SELECTED, MANDATORY); - this.mainFrame = mainFrame; + } + + /** + * @deprecated use {@link #AutoWireAction()} instead + */ + @Deprecated + public AutoWireAction(MainFrame mainFrame) { + this(); } @Override @@ -53,7 +60,7 @@ public void loggedActionPerformed(ActionEvent e) { @Override public void execute() { - Operator op = mainFrame.getFirstSelectedOperator(); + Operator op = RapidMinerGUI.getMainFrame().getFirstSelectedOperator(); if (op == null) { return; } diff --git a/src/main/java/com/rapidminer/gui/actions/BrowseAction.java b/src/main/java/com/rapidminer/gui/actions/BrowseAction.java index c801ef087..c69a98889 100644 --- a/src/main/java/com/rapidminer/gui/actions/BrowseAction.java +++ b/src/main/java/com/rapidminer/gui/actions/BrowseAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/CloseAllResultsAction.java b/src/main/java/com/rapidminer/gui/actions/CloseAllResultsAction.java index bcc2f44ad..ce8a4e482 100644 --- a/src/main/java/com/rapidminer/gui/actions/CloseAllResultsAction.java +++ b/src/main/java/com/rapidminer/gui/actions/CloseAllResultsAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/ConnectPortToRepositoryAction.java b/src/main/java/com/rapidminer/gui/actions/ConnectPortToRepositoryAction.java index 40f4a1bc4..f83f8ddcb 100644 --- a/src/main/java/com/rapidminer/gui/actions/ConnectPortToRepositoryAction.java +++ b/src/main/java/com/rapidminer/gui/actions/ConnectPortToRepositoryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/EditViewAction.java b/src/main/java/com/rapidminer/gui/actions/EditViewAction.java index da75de83e..c1d3a6d6d 100644 --- a/src/main/java/com/rapidminer/gui/actions/EditViewAction.java +++ b/src/main/java/com/rapidminer/gui/actions/EditViewAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/ExitAction.java b/src/main/java/com/rapidminer/gui/actions/ExitAction.java index 726139e14..68db00377 100644 --- a/src/main/java/com/rapidminer/gui/actions/ExitAction.java +++ b/src/main/java/com/rapidminer/gui/actions/ExitAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,11 +18,12 @@ */ package com.rapidminer.gui.actions; +import java.awt.event.ActionEvent; + import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; -import java.awt.event.ActionEvent; - /** * Start the corresponding action. @@ -33,16 +34,22 @@ public class ExitAction extends ResourceAction { private static final long serialVersionUID = -6213819388535936519L; - private MainFrame mainFrame; - public ExitAction(MainFrame mainFrame) { + public ExitAction() { super("exit"); - this.mainFrame = mainFrame; setCondition(EDIT_IN_PROGRESS, DONT_CARE); } + /** + * @deprecated use {@link #ExitAction()} instead + */ + @Deprecated + public ExitAction(MainFrame mainFrame) { + this(); + } + @Override public void loggedActionPerformed(ActionEvent e) { - this.mainFrame.exit(false); + RapidMinerGUI.getMainFrame().exit(false); } } diff --git a/src/main/java/com/rapidminer/gui/actions/ExportProcessAction.java b/src/main/java/com/rapidminer/gui/actions/ExportProcessAction.java index 0786eb486..650926d3a 100644 --- a/src/main/java/com/rapidminer/gui/actions/ExportProcessAction.java +++ b/src/main/java/com/rapidminer/gui/actions/ExportProcessAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/ExtendedMouseClickedAdapter.java b/src/main/java/com/rapidminer/gui/actions/ExtendedMouseClickedAdapter.java index ca5f229db..cc693cd0b 100644 --- a/src/main/java/com/rapidminer/gui/actions/ExtendedMouseClickedAdapter.java +++ b/src/main/java/com/rapidminer/gui/actions/ExtendedMouseClickedAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/ImportDataAction.java b/src/main/java/com/rapidminer/gui/actions/ImportDataAction.java index bae722ec9..b055be8c8 100644 --- a/src/main/java/com/rapidminer/gui/actions/ImportDataAction.java +++ b/src/main/java/com/rapidminer/gui/actions/ImportDataAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/ImportProcessAction.java b/src/main/java/com/rapidminer/gui/actions/ImportProcessAction.java index 55dafc8d6..fd9649f20 100644 --- a/src/main/java/com/rapidminer/gui/actions/ImportProcessAction.java +++ b/src/main/java/com/rapidminer/gui/actions/ImportProcessAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/ManageConfigurablesAction.java b/src/main/java/com/rapidminer/gui/actions/ManageConfigurablesAction.java new file mode 100644 index 000000000..917612e4f --- /dev/null +++ b/src/main/java/com/rapidminer/gui/actions/ManageConfigurablesAction.java @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.gui.actions; + +import java.awt.event.ActionEvent; + +import com.rapidminer.gui.RapidMinerGUI; +import com.rapidminer.gui.tools.ResourceAction; +import com.rapidminer.tools.config.gui.ConfigurableDialog; + + +/** + * Start the corresponding action. + * + * @author Marco Boeck + * @since 8.1 + */ +public class ManageConfigurablesAction extends ResourceAction { + + private static final long serialVersionUID = 1L; + + public ManageConfigurablesAction() { + super(true, "manage_configurables"); + } + + /** + * Opens the configurables dialog + */ + @Override + public void loggedActionPerformed(ActionEvent e) { + new ConfigurableDialog(RapidMinerGUI.getMainFrame().getProcess()).setVisible(true); + } +} diff --git a/src/main/java/com/rapidminer/gui/actions/ManagePasswordsAction.java b/src/main/java/com/rapidminer/gui/actions/ManagePasswordsAction.java new file mode 100644 index 000000000..0ba54233b --- /dev/null +++ b/src/main/java/com/rapidminer/gui/actions/ManagePasswordsAction.java @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.gui.actions; + +import java.awt.event.ActionEvent; + +import com.rapidminer.gui.security.PasswordManager; +import com.rapidminer.gui.tools.ResourceAction; + + +/** + * Start the corresponding action. + * + * @author Marco Boeck + * @since 8.1 + */ +public class ManagePasswordsAction extends ResourceAction { + + private static final long serialVersionUID = 1L; + + public ManagePasswordsAction() { + super("password_manager"); + setCondition(EDIT_IN_PROGRESS, DONT_CARE); + } + + /** + * Opens the settings dialog + */ + @Override + public void loggedActionPerformed(ActionEvent e) { + new PasswordManager().setVisible(true); + } +} diff --git a/src/main/java/com/rapidminer/gui/actions/NewAction.java b/src/main/java/com/rapidminer/gui/actions/NewAction.java index 566beca09..014479c71 100644 --- a/src/main/java/com/rapidminer/gui/actions/NewAction.java +++ b/src/main/java/com/rapidminer/gui/actions/NewAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/NewPerspectiveAction.java b/src/main/java/com/rapidminer/gui/actions/NewPerspectiveAction.java index d4ba71b80..0838a5e94 100644 --- a/src/main/java/com/rapidminer/gui/actions/NewPerspectiveAction.java +++ b/src/main/java/com/rapidminer/gui/actions/NewPerspectiveAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -23,6 +23,7 @@ import com.rapidminer.gui.ApplicationFrame; import com.rapidminer.gui.MainFrame; import com.rapidminer.gui.PerspectiveController; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.gui.tools.dialogs.InputDialog; @@ -64,20 +65,26 @@ protected void ok() { } } - private final MainFrame mainFrame; - public NewPerspectiveAction(MainFrame mainFrame) { + public NewPerspectiveAction() { super("new_perspective"); - this.mainFrame = mainFrame; setCondition(EDIT_IN_PROGRESS, DONT_CARE); } + /** + * @deprecated use {@link #NewPerspectiveAction()} instead + */ + @Deprecated + public NewPerspectiveAction(MainFrame mainFrame) { + this(); + } + @Override public void loggedActionPerformed(ActionEvent e) { - NewPerspectiveDialog dialog = new NewPerspectiveDialog(mainFrame.getPerspectiveController()); + NewPerspectiveDialog dialog = new NewPerspectiveDialog(RapidMinerGUI.getMainFrame().getPerspectiveController()); dialog.setVisible(true); if (dialog.isOk()) { - mainFrame.getPerspectiveController().createUserPerspective(dialog.getInputText(), true); + RapidMinerGUI.getMainFrame().getPerspectiveController().createUserPerspective(dialog.getInputText(), true); } } } diff --git a/src/main/java/com/rapidminer/gui/actions/OpenAction.java b/src/main/java/com/rapidminer/gui/actions/OpenAction.java index 343aa56fc..9e5d6db61 100644 --- a/src/main/java/com/rapidminer/gui/actions/OpenAction.java +++ b/src/main/java/com/rapidminer/gui/actions/OpenAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/OperatorActionContext.java b/src/main/java/com/rapidminer/gui/actions/OperatorActionContext.java index da81cc18d..5e0cbf25c 100644 --- a/src/main/java/com/rapidminer/gui/actions/OperatorActionContext.java +++ b/src/main/java/com/rapidminer/gui/actions/OperatorActionContext.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/OperatorActionFactory.java b/src/main/java/com/rapidminer/gui/actions/OperatorActionFactory.java index a9df70e6b..16e9abb65 100644 --- a/src/main/java/com/rapidminer/gui/actions/OperatorActionFactory.java +++ b/src/main/java/com/rapidminer/gui/actions/OperatorActionFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/PauseAction.java b/src/main/java/com/rapidminer/gui/actions/PauseAction.java index b4783a919..90120720a 100644 --- a/src/main/java/com/rapidminer/gui/actions/PauseAction.java +++ b/src/main/java/com/rapidminer/gui/actions/PauseAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,11 +18,12 @@ */ package com.rapidminer.gui.actions; +import java.awt.event.ActionEvent; + import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; -import java.awt.event.ActionEvent; - /** * Start the corresponding action. @@ -33,16 +34,20 @@ public class PauseAction extends ResourceAction { private static final long serialVersionUID = -8416546573798401295L; - private final MainFrame mainFrame; - - public PauseAction(MainFrame mainFrame) { + public PauseAction() { super("pause"); - this.mainFrame = mainFrame; setCondition(PROCESS_RUNNING, MANDATORY); } + /** + * @deprecated use {@link #PauseAction()} instead + */ + @Deprecated + public PauseAction(MainFrame mainFrame) { + this(); + } @Override public void loggedActionPerformed(ActionEvent e) { - mainFrame.pauseProcess(); + RapidMinerGUI.getMainFrame().pauseProcess(); } } diff --git a/src/main/java/com/rapidminer/gui/actions/PrintAction.java b/src/main/java/com/rapidminer/gui/actions/PrintAction.java index ac4bc7137..00a2a351f 100644 --- a/src/main/java/com/rapidminer/gui/actions/PrintAction.java +++ b/src/main/java/com/rapidminer/gui/actions/PrintAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/PropagateRealMetaDataAction.java b/src/main/java/com/rapidminer/gui/actions/PropagateRealMetaDataAction.java index f9aa1f7ef..ec4a2356f 100644 --- a/src/main/java/com/rapidminer/gui/actions/PropagateRealMetaDataAction.java +++ b/src/main/java/com/rapidminer/gui/actions/PropagateRealMetaDataAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -21,6 +21,7 @@ import java.awt.event.ActionEvent; import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.operator.DebugMode; @@ -31,23 +32,35 @@ */ public class PropagateRealMetaDataAction extends ToggleAction { - private MainFrame mainFrame; - private static final long serialVersionUID = -1317229512005928906L; - public PropagateRealMetaDataAction(MainFrame mainFrame) { + + public PropagateRealMetaDataAction() { super(true, "process_debug_mode"); + } - this.mainFrame = mainFrame; + /** + * @deprecated use {@link #PropagateRealMetaDataAction()} instead + */ + @Deprecated + public PropagateRealMetaDataAction(MainFrame mainFrame) { + this(); } @Override public void actionToggled(ActionEvent e) { - if (isSelected()) { - mainFrame.getProcess().setDebugMode(DebugMode.COLLECT_METADATA_AFTER_EXECUTION); + if (!isSelected()) { + RapidMinerGUI.getMainFrame().getProcess().setDebugMode(DebugMode.COLLECT_METADATA_AFTER_EXECUTION); } else { - mainFrame.getProcess().setDebugMode(DebugMode.DEBUG_OFF); + RapidMinerGUI.getMainFrame().getProcess().setDebugMode(DebugMode.DEBUG_OFF); } + + // state changed, update Global Search to keep in sync + addToGlobalSearch(); } + @Override + public boolean isSelected() { + return RapidMinerGUI.getMainFrame() != null && RapidMinerGUI.getMainFrame().getProcess().getDebugMode() == DebugMode.COLLECT_METADATA_AFTER_EXECUTION; + } } diff --git a/src/main/java/com/rapidminer/gui/actions/RedoAction.java b/src/main/java/com/rapidminer/gui/actions/RedoAction.java index 4633af1c6..de545aaf6 100644 --- a/src/main/java/com/rapidminer/gui/actions/RedoAction.java +++ b/src/main/java/com/rapidminer/gui/actions/RedoAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,11 +18,12 @@ */ package com.rapidminer.gui.actions; +import java.awt.event.ActionEvent; + import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; -import java.awt.event.ActionEvent; - /** * Start the corresponding action. @@ -33,17 +34,23 @@ public class RedoAction extends ResourceAction { private static final long serialVersionUID = -3106523347321697652L; - private MainFrame mainFrame; - public RedoAction(MainFrame mainFrame) { + public RedoAction() { super("redo"); - this.mainFrame = mainFrame; setCondition(EDIT_IN_PROGRESS, DISALLOWED); setCondition(PROCESS_RENDERER_HAS_REDO_STEPS, MANDATORY); } + /** + * @deprecated use {@link #RedoAction()} instead + */ + @Deprecated + public RedoAction(MainFrame mainFrame) { + this(); + } + @Override public void loggedActionPerformed(ActionEvent e) { - this.mainFrame.redo(); + RapidMinerGUI.getMainFrame().redo(); } } diff --git a/src/main/java/com/rapidminer/gui/actions/RestoreDefaultPerspectiveAction.java b/src/main/java/com/rapidminer/gui/actions/RestoreDefaultPerspectiveAction.java new file mode 100644 index 000000000..a030e5d30 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/actions/RestoreDefaultPerspectiveAction.java @@ -0,0 +1,48 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.gui.actions; + +import java.awt.event.ActionEvent; + +import com.rapidminer.gui.RapidMinerGUI; +import com.rapidminer.gui.tools.ResourceAction; + + +/** + * Start the corresponding action. + * + * @author Marco Boeck + * @since 8.1 + */ +public class RestoreDefaultPerspectiveAction extends ResourceAction { + + private static final long serialVersionUID = 1L; + + public RestoreDefaultPerspectiveAction() { + super( "restore_predefined_perspective_default"); + } + + /** + * Restore the default perspective + */ + @Override + public void loggedActionPerformed(ActionEvent e) { + RapidMinerGUI.getMainFrame().getPerspectiveController().restoreDefaultPerspective(); + } +} diff --git a/src/main/java/com/rapidminer/gui/actions/RunAction.java b/src/main/java/com/rapidminer/gui/actions/RunAction.java index 3b614dfca..1edcb6d8b 100644 --- a/src/main/java/com/rapidminer/gui/actions/RunAction.java +++ b/src/main/java/com/rapidminer/gui/actions/RunAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -19,11 +19,11 @@ package com.rapidminer.gui.actions; import java.awt.event.ActionEvent; - import javax.swing.Icon; import com.rapidminer.Process; import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.SwingTools; @@ -42,22 +42,27 @@ public class RunAction extends ResourceAction { private static final Icon ICON_RESUME_SMALL = SwingTools.createIcon("16/media_step_forward.png"); private static final Icon ICON_RESUME_LARGE = SwingTools.createIcon("24/media_step_forward.png"); - private final MainFrame mainFrame; - - public RunAction(MainFrame mainFrame) { + public RunAction() { super("run"); - this.mainFrame = mainFrame; setCondition(PROCESS_RUNNING, DISALLOWED); setCondition(EDIT_IN_PROGRESS, DISALLOWED); } + /** + * @deprecated use {@link #RunAction()} instead + */ + @Deprecated + public RunAction(MainFrame mainFrame) { + this(); + } + @Override public void loggedActionPerformed(ActionEvent e) { // small hack to force currently active parameter editor to save the changes due to focus // lost event - mainFrame.getProcessPanel().requestFocus(); + RapidMinerGUI.getMainFrame().getProcessPanel().requestFocus(); - mainFrame.runProcess(); + RapidMinerGUI.getMainFrame().runProcess(); } public void setState(int processState) { diff --git a/src/main/java/com/rapidminer/gui/actions/SaveAction.java b/src/main/java/com/rapidminer/gui/actions/SaveAction.java index d2260f3b3..236ae7640 100644 --- a/src/main/java/com/rapidminer/gui/actions/SaveAction.java +++ b/src/main/java/com/rapidminer/gui/actions/SaveAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/SaveAsAction.java b/src/main/java/com/rapidminer/gui/actions/SaveAsAction.java index e35aa5625..98f5c8e35 100644 --- a/src/main/java/com/rapidminer/gui/actions/SaveAsAction.java +++ b/src/main/java/com/rapidminer/gui/actions/SaveAsAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/SettingsAction.java b/src/main/java/com/rapidminer/gui/actions/SettingsAction.java index 79e440962..c589882c9 100644 --- a/src/main/java/com/rapidminer/gui/actions/SettingsAction.java +++ b/src/main/java/com/rapidminer/gui/actions/SettingsAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/StopAction.java b/src/main/java/com/rapidminer/gui/actions/StopAction.java index 757af9d96..2d5468408 100644 --- a/src/main/java/com/rapidminer/gui/actions/StopAction.java +++ b/src/main/java/com/rapidminer/gui/actions/StopAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,11 +18,12 @@ */ package com.rapidminer.gui.actions; +import java.awt.event.ActionEvent; + import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; -import java.awt.event.ActionEvent; - /** * Start the corresponding action. @@ -33,16 +34,22 @@ public class StopAction extends ResourceAction { private static final long serialVersionUID = 1181186062812851781L; - private final MainFrame mainFrame; - public StopAction(MainFrame mainFrame) { + public StopAction() { super("stop"); setCondition(PROCESS_STOPPED, DISALLOWED); - this.mainFrame = mainFrame; + } + + /** + * @deprecated use {@link #StopAction()} instead + */ + @Deprecated + public StopAction(MainFrame mainFrame) { + this(); } @Override public void loggedActionPerformed(ActionEvent e) { - this.mainFrame.stopProcess(); + RapidMinerGUI.getMainFrame().stopProcess(); } } diff --git a/src/main/java/com/rapidminer/gui/actions/StoreInRepositoryAction.java b/src/main/java/com/rapidminer/gui/actions/StoreInRepositoryAction.java index 961adabb8..1f9671eaf 100644 --- a/src/main/java/com/rapidminer/gui/actions/StoreInRepositoryAction.java +++ b/src/main/java/com/rapidminer/gui/actions/StoreInRepositoryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/ToggleAction.java b/src/main/java/com/rapidminer/gui/actions/ToggleAction.java index 435fb482c..4bb08acc0 100644 --- a/src/main/java/com/rapidminer/gui/actions/ToggleAction.java +++ b/src/main/java/com/rapidminer/gui/actions/ToggleAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/ToggleExpertModeAction.java b/src/main/java/com/rapidminer/gui/actions/ToggleExpertModeAction.java index 77d37b289..bc40c072c 100644 --- a/src/main/java/com/rapidminer/gui/actions/ToggleExpertModeAction.java +++ b/src/main/java/com/rapidminer/gui/actions/ToggleExpertModeAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/UndoAction.java b/src/main/java/com/rapidminer/gui/actions/UndoAction.java index 3d1eb3875..d5ff6a65c 100644 --- a/src/main/java/com/rapidminer/gui/actions/UndoAction.java +++ b/src/main/java/com/rapidminer/gui/actions/UndoAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,11 +18,12 @@ */ package com.rapidminer.gui.actions; +import java.awt.event.ActionEvent; + import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; -import java.awt.event.ActionEvent; - /** * Start the corresponding action. @@ -33,17 +34,23 @@ public class UndoAction extends ResourceAction { private static final long serialVersionUID = 4767902062440337756L; - private MainFrame mainFrame; - public UndoAction(MainFrame mainFrame) { + public UndoAction() { super("undo"); - this.mainFrame = mainFrame; setCondition(EDIT_IN_PROGRESS, DISALLOWED); setCondition(PROCESS_RENDERER_HAS_UNDO_STEPS, MANDATORY); } + /** + * @deprecated use {@link #UndoAction()} instead + */ + @Deprecated + public UndoAction(MainFrame mainFrame) { + this(); + } + @Override public void loggedActionPerformed(ActionEvent e) { - this.mainFrame.undo(); + RapidMinerGUI.getMainFrame().undo(); } } diff --git a/src/main/java/com/rapidminer/gui/actions/UpgradeLicenseAction.java b/src/main/java/com/rapidminer/gui/actions/UpgradeLicenseAction.java index 3fc48a3e1..4eea28766 100644 --- a/src/main/java/com/rapidminer/gui/actions/UpgradeLicenseAction.java +++ b/src/main/java/com/rapidminer/gui/actions/UpgradeLicenseAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/ValidateAutomaticallyAction.java b/src/main/java/com/rapidminer/gui/actions/ValidateAutomaticallyAction.java index fd1f0c2af..771cbf871 100644 --- a/src/main/java/com/rapidminer/gui/actions/ValidateAutomaticallyAction.java +++ b/src/main/java/com/rapidminer/gui/actions/ValidateAutomaticallyAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/ValidateProcessAction.java b/src/main/java/com/rapidminer/gui/actions/ValidateProcessAction.java index 55b7ccbee..d683091cc 100644 --- a/src/main/java/com/rapidminer/gui/actions/ValidateProcessAction.java +++ b/src/main/java/com/rapidminer/gui/actions/ValidateProcessAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,11 +18,12 @@ */ package com.rapidminer.gui.actions; +import java.awt.event.ActionEvent; + import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; -import java.awt.event.ActionEvent; - /** * Start the corresponding action. @@ -33,17 +34,23 @@ public class ValidateProcessAction extends ResourceAction { private static final long serialVersionUID = -420838202882684287L; - private final MainFrame mainFrame; - public ValidateProcessAction(MainFrame mainFrame) { + public ValidateProcessAction() { super("validate"); setCondition(PROCESS_RUNNING, DISALLOWED); setCondition(EDIT_IN_PROGRESS, DISALLOWED); - this.mainFrame = mainFrame; + } + + /** + * @deprecated use {@link #ValidateProcessAction()} instead + */ + @Deprecated + public ValidateProcessAction(MainFrame mainFrame) { + this(); } @Override public void loggedActionPerformed(ActionEvent e) { - this.mainFrame.validateProcess(true); + RapidMinerGUI.getMainFrame().validateProcess(true); } } diff --git a/src/main/java/com/rapidminer/gui/actions/WorkspaceAction.java b/src/main/java/com/rapidminer/gui/actions/WorkspaceAction.java index 2fa129554..7232d1e74 100644 --- a/src/main/java/com/rapidminer/gui/actions/WorkspaceAction.java +++ b/src/main/java/com/rapidminer/gui/actions/WorkspaceAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -20,9 +20,7 @@ import java.awt.event.ActionEvent; -import com.rapidminer.gui.PerspectiveController; -import com.rapidminer.gui.ApplicationPerspectives; -import com.rapidminer.gui.Perspective; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; @@ -30,44 +28,27 @@ * * @author Simon Fischer */ -@SuppressWarnings("deprecation") public class WorkspaceAction extends ResourceAction { private static final long serialVersionUID = 1L; - private final ApplicationPerspectives perspectives; + private final String name; - private final PerspectiveController perspectiveController; - private final Perspective perspective; - - public WorkspaceAction(ApplicationPerspectives perspectives, Perspective perspective, String name) { - super(true, "workspace_" + name); - this.perspective = perspective; - this.perspectives = perspectives; - this.perspectiveController = null; - } - - public WorkspaceAction(PerspectiveController perspectiveController, Perspective perspective, String name) { + public WorkspaceAction(String name) { super(true, "workspace_" + name); - this.perspective = perspective; - this.perspectives = null; - this.perspectiveController = perspectiveController; + this.name = name; } @Override public void loggedActionPerformed(ActionEvent e) { - if (perspectiveController != null) { - perspectiveController.showPerspective(perspective.getName()); - } else { - perspectives.showPerspective(perspective.getName()); - } + RapidMinerGUI.getMainFrame().getPerspectiveController().showPerspective(name); } /** - * Returns the {@link Perspective} for this action. + * Returns the name of the perspective for this action. */ - public Perspective getPerspective() { - return perspective; + public String getPerspectiveName() { + return name; } } diff --git a/src/main/java/com/rapidminer/gui/actions/export/AbstractPrintableIOObjectPanel.java b/src/main/java/com/rapidminer/gui/actions/export/AbstractPrintableIOObjectPanel.java index 4a7ea5779..871358967 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/AbstractPrintableIOObjectPanel.java +++ b/src/main/java/com/rapidminer/gui/actions/export/AbstractPrintableIOObjectPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/export/ComponentPrinter.java b/src/main/java/com/rapidminer/gui/actions/export/ComponentPrinter.java index 4d44f6e9a..794c2ea48 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/ComponentPrinter.java +++ b/src/main/java/com/rapidminer/gui/actions/export/ComponentPrinter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/export/ExportImageAction.java b/src/main/java/com/rapidminer/gui/actions/export/ExportImageAction.java index 4342e5d69..f43feb766 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/ExportImageAction.java +++ b/src/main/java/com/rapidminer/gui/actions/export/ExportImageAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/export/ImageExportException.java b/src/main/java/com/rapidminer/gui/actions/export/ImageExportException.java index d0f83605d..9c7da7334 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/ImageExportException.java +++ b/src/main/java/com/rapidminer/gui/actions/export/ImageExportException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/export/ImageExporter.java b/src/main/java/com/rapidminer/gui/actions/export/ImageExporter.java index 74700908b..a4d73a93f 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/ImageExporter.java +++ b/src/main/java/com/rapidminer/gui/actions/export/ImageExporter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/export/PrintAndExportDialog.java b/src/main/java/com/rapidminer/gui/actions/export/PrintAndExportDialog.java index 9d170189b..0e9774d4a 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/PrintAndExportDialog.java +++ b/src/main/java/com/rapidminer/gui/actions/export/PrintAndExportDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/export/PrintPreviewPanel.java b/src/main/java/com/rapidminer/gui/actions/export/PrintPreviewPanel.java index 0479779e3..be34dd9f4 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/PrintPreviewPanel.java +++ b/src/main/java/com/rapidminer/gui/actions/export/PrintPreviewPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/export/PrintableComponent.java b/src/main/java/com/rapidminer/gui/actions/export/PrintableComponent.java index 542ade18e..11f03a79a 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/PrintableComponent.java +++ b/src/main/java/com/rapidminer/gui/actions/export/PrintableComponent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/export/PrintableComponentContainer.java b/src/main/java/com/rapidminer/gui/actions/export/PrintableComponentContainer.java index 09b2aea08..798665ee2 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/PrintableComponentContainer.java +++ b/src/main/java/com/rapidminer/gui/actions/export/PrintableComponentContainer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/export/ShowPrintAndExportDialogAction.java b/src/main/java/com/rapidminer/gui/actions/export/ShowPrintAndExportDialogAction.java index 2feab6f24..e47f06f50 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/ShowPrintAndExportDialogAction.java +++ b/src/main/java/com/rapidminer/gui/actions/export/ShowPrintAndExportDialogAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,13 +18,13 @@ */ package com.rapidminer.gui.actions.export; -import com.rapidminer.gui.tools.PrintingTools; -import com.rapidminer.gui.tools.ResourceAction; - import java.awt.event.ActionEvent; import java.util.LinkedList; import java.util.List; +import com.rapidminer.gui.tools.PrintingTools; +import com.rapidminer.gui.tools.ResourceAction; + /** * Export action for {@link PrintableComponent}s. Executing this action shows the @@ -36,7 +36,7 @@ public class ShowPrintAndExportDialogAction extends ResourceAction { private static final long serialVersionUID = 1L; - private PrintableComponent comp; + private transient PrintableComponent comp; /** * Creates a export action for the single component provided. diff --git a/src/main/java/com/rapidminer/gui/actions/export/SimplePrintableComponent.java b/src/main/java/com/rapidminer/gui/actions/export/SimplePrintableComponent.java index a066a13f0..63a64cbaa 100644 --- a/src/main/java/com/rapidminer/gui/actions/export/SimplePrintableComponent.java +++ b/src/main/java/com/rapidminer/gui/actions/export/SimplePrintableComponent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearch.java b/src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearch.java new file mode 100644 index 000000000..88b2e82b0 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearch.java @@ -0,0 +1,53 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.actions.search; + +import com.rapidminer.search.GlobalSearchIndexer; +import com.rapidminer.search.GlobalSearchManager; +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchable; + + +/** + * Responsible for implementing Global Search functionality for actions that should be found with it. See {@link GlobalSearchRegistry} + * for more information. + * + * @author Marco Boeck + * @since 8.1 + */ +public class ActionsGlobalSearch implements GlobalSearchable { + + public static final String CATEGORY_ID = "actions"; + + private final ActionsGlobalSearchManager manager; + + + public ActionsGlobalSearch() { + manager = new ActionsGlobalSearchManager(); + + if (GlobalSearchIndexer.INSTANCE.isInitialized()) { + GlobalSearchRegistry.INSTANCE.registerSearchCategory(this); + } + } + + @Override + public GlobalSearchManager getSearchManager() { + return manager; + } +} diff --git a/src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearchGUIProvider.java b/src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearchGUIProvider.java new file mode 100644 index 000000000..d72be0dfb --- /dev/null +++ b/src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearchGUIProvider.java @@ -0,0 +1,225 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.actions.search; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.dnd.DragGestureListener; +import java.awt.event.ActionEvent; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectStreamClass; +import java.util.logging.Level; +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.border.Border; + +import org.apache.lucene.document.Document; +import org.apache.lucene.util.BytesRef; + +import com.rapidminer.gui.actions.ToggleAction; +import com.rapidminer.gui.look.Colors; +import com.rapidminer.gui.search.GlobalSearchGUIUtilities; +import com.rapidminer.gui.search.GlobalSearchableGUIProvider; +import com.rapidminer.gui.tools.ResourceAction; +import com.rapidminer.gui.tools.SwingTools; +import com.rapidminer.search.GlobalSearchUtilities; +import com.rapidminer.tools.I18N; +import com.rapidminer.tools.LogService; +import com.rapidminer.tools.plugin.Plugin; + + +/** + * Provides UI elements to display {@link com.rapidminer.gui.tools.ResourceAction}s in the Global Search results for the {@link ActionsGlobalSearch}. + * + * @author Marco Boeck + * @since 8.1 + */ +public class ActionsGlobalSearchGUIProvider implements GlobalSearchableGUIProvider { + + private static final ImageIcon SELECTED_ICON = SwingTools.createIcon("16/check.png"); + private static final Border ACTION_COMPOUND_BORDER = BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, Colors.BUTTON_BORDER), BorderFactory.createEmptyBorder(0, 0, 0, 5)); + private static final Border RESULT_EMPTY_BORDER = BorderFactory.createEmptyBorder(1, 0, 3, 0); + private static final Border ICON_EMPTY_BORDER = BorderFactory.createEmptyBorder(0, 5, 0, 15); + + private static final float FONT_SIZE = 13f; + private static final Color DESCRIPTION_COLOR = new Color(62, 62, 62); + private static final float FONT_SIZE_DESCRIPTION = 11f; + + + @Override + public JComponent getGUIListComponentForDocument(Document document, String[] bestFragments) { + ResourceAction action = createActionFromDocument(document); + + JPanel mainListPanel = new JPanel(); + mainListPanel.setOpaque(false); + mainListPanel.setLayout(new BorderLayout()); + + JPanel descriptionPanel = new JPanel(); + descriptionPanel.setOpaque(false); + descriptionPanel.setLayout(new BorderLayout()); + + JLabel descriptionLabel = new JLabel(); + descriptionLabel.setForeground(DESCRIPTION_COLOR); + descriptionLabel.setFont(descriptionLabel.getFont().deriveFont(FONT_SIZE_DESCRIPTION)); + + JLabel resultLabel = new JLabel(); + resultLabel.setFont(resultLabel.getFont().deriveFont(FONT_SIZE)); + + descriptionPanel.add(resultLabel, BorderLayout.CENTER); + descriptionPanel.add(descriptionLabel, BorderLayout.SOUTH); + + mainListPanel.add(descriptionPanel, BorderLayout.CENTER); + + // should not happen (because it is not indexed if action cannot be serialized), but just in case + if (action == null) { + resultLabel.setText(document.get(GlobalSearchUtilities.FIELD_NAME)); + return mainListPanel; + } + + ImageIcon icon = null; + try { + icon = ((ImageIcon) action.getValue(Action.SMALL_ICON)); + } catch (ClassCastException e) { + // no icon then. + } + String name = document.get(GlobalSearchUtilities.FIELD_NAME); + name = GlobalSearchGUIUtilities.INSTANCE.createHTMLHighlightFromString(name, bestFragments); + + resultLabel.setText(name); + + JLabel iconListLabel = new JLabel(); + iconListLabel.setBorder(ICON_EMPTY_BORDER); + iconListLabel.setIcon(icon); + mainListPanel.add(iconListLabel, BorderLayout.WEST); + + // for dockable actions, display the description of the panel below the name + if (action instanceof DockableAction) { + Object description = action.getValue(ResourceAction.SHORT_DESCRIPTION); + if (description != null) { + descriptionLabel.setText("
" + description + "
"); + } else { + resultLabel.setBorder(RESULT_EMPTY_BORDER); + } + Object tooltip = action.getValue(ResourceAction.LONG_DESCRIPTION); + if (tooltip != null) { + mainListPanel.setToolTipText(String.valueOf(tooltip)); + } + } else { + // because we have no 2nd line in this case, we need a bit of empty border to reach a certain height + // so that a single result fills the dialog + resultLabel.setBorder(RESULT_EMPTY_BORDER); + mainListPanel.setToolTipText(document.get(ActionsGlobalSearchManager.FIELD_DESCRIPTION)); + } + + // action is enabled either if it is enabled anyway, or if it was only disabled due to focus loss + resultLabel.setEnabled(action.isEnabled() || action.isDisabledDueToFocusLost()); + + // ToggleActions need to display their toggle state + if (action instanceof ToggleAction) { + boolean selected = ((ToggleAction) action).isSelected(); + if (selected) { + JLabel selectedLabel = new JLabel(SELECTED_ICON); + selectedLabel.setBorder(ACTION_COMPOUND_BORDER); + mainListPanel.add(selectedLabel, BorderLayout.WEST); + } + } + + return mainListPanel; + } + + @Override + public String getI18nNameForSearchable() { + return I18N.getMessage(I18N.getGUIBundle(), "gui.component.global_search.action.category.title"); + } + + @Override + public void searchResultTriggered(Document document, Veto veto) { + // try to deserialize action and trigger it + ResourceAction action = createActionFromDocument(document); + + // action is enabled either if it is enabled anyway, or if it was only disabled due to focus loss + if (action != null && (action.isEnabled() || action.isDisabledDueToFocusLost())) { + SwingTools.invokeLater(() -> { + ActionEvent event = new ActionEvent(action, ActionEvent.ACTION_PERFORMED, ""); + action.actionPerformed(event); + }); + + // update ToggleAction in index so that new state will be retrieved next time + if (action instanceof ToggleAction) { + action.addToGlobalSearch(); + } + } else { + // action could not be triggered, do not close search results to indicate that + veto.veto(); + } + } + + @Override + public void searchResultBrowsed(Document document) { + // ignore, cannot do anything meaningful + } + + @Override + public boolean isDragAndDropSupported(Document document) { + return false; + } + + @Override + public DragGestureListener getDragAndDropSupport(Document document) { + return null; + } + + /** + * Deserializes the {@link ResourceAction} from the document. + * + * @param document + * the search document where the action is stored in + * @return the action instance or {@code null} if something goes wrong + */ + private ResourceAction createActionFromDocument(Document document) { + BytesRef binaryValue = document.getBinaryValue(ActionsGlobalSearchManager.FIELD_SERIALIZED_ACTION); + + // restore action with the plugin classloader, otherwise plugin actions would not be found + try (ByteArrayInputStream byteInputStream = new ByteArrayInputStream(binaryValue.bytes)) { + + ObjectInputStream ois = new ObjectInputStream(byteInputStream) { + + @Override + protected Class resolveClass(ObjectStreamClass desc) throws ClassNotFoundException { + try { + return super.resolveClass(desc); + } catch (ClassNotFoundException | IOException e) { + return Class.forName(desc.getName(), false, Plugin.getMajorClassLoader()); + } + } + }; + return (ResourceAction) ois.readObject(); + } catch (Exception e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.deserialize_action", e); + return null; + } + } + +} diff --git a/src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearchManager.java b/src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearchManager.java new file mode 100644 index 000000000..d9b82b2bb --- /dev/null +++ b/src/main/java/com/rapidminer/gui/actions/search/ActionsGlobalSearchManager.java @@ -0,0 +1,394 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.actions.search; + +import java.beans.PropertyChangeListener; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.logging.Level; +import java.util.stream.Collectors; +import javax.swing.Action; +import javax.swing.Icon; + +import org.apache.commons.lang.SerializationException; +import org.apache.commons.lang.SerializationUtils; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.apache.lucene.queryparser.classic.ParseException; + +import com.rapidminer.gui.DockableMenu; +import com.rapidminer.gui.Perspective; +import com.rapidminer.gui.PerspectiveChangeListener; +import com.rapidminer.gui.PerspectiveModel; +import com.rapidminer.gui.RapidMinerGUI; +import com.rapidminer.gui.actions.ToggleAction; +import com.rapidminer.gui.actions.WorkspaceAction; +import com.rapidminer.gui.security.PasswordManager; +import com.rapidminer.gui.tools.ProgressThread; +import com.rapidminer.gui.tools.ResourceAction; +import com.rapidminer.gui.tools.ResourceDockKey; +import com.rapidminer.gui.tools.SwingTools; +import com.rapidminer.repository.gui.RepositoryBrowser; +import com.rapidminer.search.AbstractGlobalSearchManager; +import com.rapidminer.search.GlobalSearchDefaultField; +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchResult; +import com.rapidminer.search.GlobalSearchResultBuilder; +import com.rapidminer.search.GlobalSearchUtilities; +import com.rapidminer.tools.I18N; +import com.rapidminer.tools.LogService; +import com.rapidminer.tools.Observer; +import com.vlsolutions.swing.docking.DockKey; +import com.vlsolutions.swing.docking.DockableState; +import com.vlsolutions.swing.docking.DummyDockable; + + +/** + * Manages Global Search for {@link ResourceAction}s. + * + * @author Marco Boeck + * @since 8.1 + */ +public class ActionsGlobalSearchManager extends AbstractGlobalSearchManager { + + private static final Map ADDITIONAL_FIELDS; + + private static final float FIELD_BOOST_DESCRIPTION = 0.5f; + + /** this is a flag field which is set for view actions so we can delete them */ + private static final String FIELD_VIEW_TYPE = "action_view_type"; + + /** this is a flag field which is set for dockable actions so we can delete them */ + private static final String FIELD_DOCKABLE_TYPE = "action_dockable_type"; + + protected static final String FIELD_DESCRIPTION = "description"; + protected static final String FIELD_SERIALIZED_ACTION = "serializedAction"; + + static { + ADDITIONAL_FIELDS = new HashMap<>(); + ADDITIONAL_FIELDS.put(FIELD_DESCRIPTION, "The description of an action. More verbose than just their name."); + } + + /** observe perspective additions/removals */ + private final Observer> perspectiveObserver; + + /** when the perspective changes, we need to re-index the dockables to have them up-to-date */ + private final PerspectiveChangeListener perspectiveChangeListener; + + + protected ActionsGlobalSearchManager() { + super(ActionsGlobalSearch.CATEGORY_ID, ADDITIONAL_FIELDS, new GlobalSearchDefaultField(FIELD_DESCRIPTION, FIELD_BOOST_DESCRIPTION)); + + perspectiveObserver = (observable, perspectives) -> { + + deleteAllPerspectiveActions(); + for (Perspective perspective : perspectives) { + addDocumentToIndex(createDocumentFromPerspective(perspective)); + } + }; + + perspectiveChangeListener = perspective -> { + + // delete all dockable actions and re-add them (because some may not be available in some views) + deleteAllDockableActions(); + indexDockables(); + }; + } + + @Override + protected void init() { + PerspectiveModel model = RapidMinerGUI.getMainFrame().getPerspectiveController().getModel(); + + model.addObserver(perspectiveObserver, false); + model.addPerspectiveChangeListener(perspectiveChangeListener); + } + + @Override + protected List createInitialIndex(final ProgressThread progressThread) { + List mainFrameActions = new LinkedList<>(); + + // scoop up actions from MainFrame and add them + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().NEW_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().OPEN_ACTION)); + mainFrameActions.add(createDocument(RapidMinerGUI.getMainFrame().SAVE_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().SAVE_AS_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().IMPORT_DATA_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().IMPORT_PROCESS_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().EXPORT_PROCESS_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().UNDO_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().REDO_ACTION)); + mainFrameActions.add(createDocument(RapidMinerGUI.getMainFrame().RUN_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().STOP_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().VALIDATE_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().AUTO_WIRE)); + mainFrameActions.add(createDocument(RapidMinerGUI.getMainFrame().PROPAGATE_REAL_METADATA_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().NEW_PERSPECTIVE_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().MANAGE_CONFIGURABLES_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().EXPORT_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().EXIT_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().SETTINGS_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().RESTORE_PERSPECTIVE_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().TUTORIAL_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().BROWSE_VIDEOS_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().BROWSE_DOCUMENTATION_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().BROWSE_COMMUNITY_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().BROWSE_SUPPORT_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) RapidMinerGUI.getMainFrame().ABOUT_ACTION)); + mainFrameActions.add(createDocument((ResourceAction) PasswordManager.OPEN_WINDOW)); + mainFrameActions.add(createDocument((ResourceAction) RepositoryBrowser.ADD_REPOSITORY_ACTION)); + + // add perspectives + for (Perspective perspective : RapidMinerGUI.getMainFrame().getPerspectiveController().getModel().getAllPerspectives()) { + mainFrameActions.add(createDocumentFromPerspective(perspective)); + } + + // because createDocument can return null, we need to filter nulls again now + // this is just a precaution, should not happen here + return mainFrameActions.stream().filter(Objects::nonNull).collect(Collectors.toList()); + } + + /** + * Adds the given action to the Global Search index. If it is already part of the index, it will be updated. + * If it has no name, it will not be added to the index. + * + * @param action + * the action to add to the search index. Must NOT be a {@link ToggleAction}! + */ + public void addAction(final ResourceAction action) { + if (action == null) { + throw new IllegalArgumentException("action must not be null!"); + } + if (action.getValue(Action.NAME) == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.index_action", action.getKey()); + return; + } + if (action instanceof WorkspaceAction) { + // these are special, we don't want to have the regular perspective actions update our custom built ones, so ignore them + return; + } + + Document doc = createDocument(action); + if (doc != null) { + addDocumentToIndex(doc); + } + } + + /** + * Removes the given action from the Global Search index. + * + * @param action + * the action to remove from the search index + */ + public void removeAction(final ResourceAction action) { + if (action == null) { + throw new IllegalArgumentException("action must not be null!"); + } + + Document doc = createDocument(action); + if (doc != null) { + removeDocumentFromIndex(doc); + } + } + + /** + * Checks if the given action is registered to the Global Search. + * + * @param action + * the action to check + * @return {@code true} if the action is already indexed in the Global Search; {@code false} otherwise + */ + public boolean isActionRegistered(final ResourceAction action) { + if (action == null) { + throw new IllegalArgumentException("action must not be null!"); + } + + // search for element that has id = key + try { + GlobalSearchResultBuilder builder = new GlobalSearchResultBuilder(GlobalSearchUtilities.FIELD_UNIQUE_ID + GlobalSearchUtilities.QUERY_FIELD_SPECIFIER + action.getKey()); + builder.setMaxNumberOfResults(1).setSearchCategories(GlobalSearchRegistry.INSTANCE.getSearchCategoryById(getSearchCategoryId())); + return builder.runSearch().getNumberOfResults() == 1; + } catch (ParseException e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.delete_views_error", e); + return false; + } + } + + /** + * Adds all {@link com.vlsolutions.swing.docking.Dockable}s to the Global Search. + */ + private void indexDockables() { + List dockableDocuments = new ArrayList<>(); + + for (final DockableState state : RapidMinerGUI.getMainFrame().getDockingDesktop().getDockables()) { + DockKey dockKey = state.getDockable().getDockKey(); + if (state.getDockable() instanceof DummyDockable || DockableMenu.isDockableHiddenFromMenu(dockKey)) { + continue; + } + + dockableDocuments.add(createDocumentFromDockKey(dockKey)); + } + + addDocumentsToIndex(dockableDocuments); + } + + /** + * Deletes all perspective actions from the index. + * + */ + private void deleteAllPerspectiveActions() { + // search for all elements that start with "workspace_" + GlobalSearchResultBuilder builder = new GlobalSearchResultBuilder(FIELD_VIEW_TYPE + GlobalSearchUtilities.QUERY_FIELD_SPECIFIER + String.valueOf(Boolean.TRUE)); + builder.setMaxNumberOfResults(Integer.MAX_VALUE).setSearchCategories(GlobalSearchRegistry.INSTANCE.getSearchCategoryById(getSearchCategoryId())); + try { + GlobalSearchResult result = builder.runSearch(); + removeDocumentsFromIndex(result.getResultDocuments()); + } catch (ParseException e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.delete_views_error", e); + } + } + + /** + * Deletes all dockable actions from the index. + * + */ + private void deleteAllDockableActions() { + // now actually search for all elements that start with "workspace_" + GlobalSearchResultBuilder builder = new GlobalSearchResultBuilder(FIELD_DOCKABLE_TYPE + GlobalSearchUtilities.QUERY_FIELD_SPECIFIER + String.valueOf(Boolean.TRUE)); + builder.setMaxNumberOfResults(Integer.MAX_VALUE).setSearchCategories(GlobalSearchRegistry.INSTANCE.getSearchCategoryById(getSearchCategoryId())); + try { + GlobalSearchResult result = builder.runSearch(); + removeDocumentsFromIndex(result.getResultDocuments()); + } catch (ParseException e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.delete_dockables_error", e); + } + } + + /** + * Creates an action search document for the given {@link ResourceAction}. + * + * @param action + * the action for which to create the search document + * @return the document or {@code null} if it could not be created + */ + private Document createDocument(final ResourceAction action) { + List fields = new ArrayList<>(); + Object name = action.getValue(Action.NAME); + // serialize the action so that we can actually trigger it on retrieval later + byte[] serializedAction = createSerializedAction(action); + if (name == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.index_action.name_null", action.getKey()); + return null; + } + if (serializedAction == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.index_action.serialization_failed", action.getKey()); + return null; + } + + // description field + Object tooltip = action.getValue(Action.SHORT_DESCRIPTION); + if (tooltip != null) { + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForTexts(FIELD_DESCRIPTION, String.valueOf(tooltip))); + } + + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForBinary(FIELD_SERIALIZED_ACTION, serializedAction)); + + if (action instanceof WorkspaceAction) { + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForIdentifiers(FIELD_VIEW_TYPE, String.valueOf(Boolean.TRUE))); + } else if (action instanceof DockableAction) { + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForIdentifiers(FIELD_DOCKABLE_TYPE, String.valueOf(Boolean.TRUE))); + } + + // i18n key is the unique ID for the action category + return GlobalSearchUtilities.INSTANCE.createDocument(action.getKey(), String.valueOf(name), fields.toArray(new Field[fields.size()])); + } + + /** + * Creates an action search document for the given {@link Perspective}. + * + * @param perspective + * the perspective for which to create the action as well as the document + * @return the document or {@code null} if it could not be created + */ + private Document createDocumentFromPerspective(final Perspective perspective) { + WorkspaceAction action = RapidMinerGUI.getMainFrame().getPerspectiveController().createPerspectiveAction(perspective); + // make label a bit more descriptive + String name = perspective.getName().replaceAll("_", " "); + action.putValue(ResourceAction.NAME, I18N.getMessage(I18N.getGUIBundle(), "gui.action.global_search.action.perspective.name", SwingTools.capitalizeString(name))); + return createDocument(action); + } + + /** + * Creates an action search document for the given {@link DockKey}. + * + * @param dockKey + * the dockKey for which to create the action as well as the document + * @return the document or {@code null} if it could not be created + */ + private Document createDocumentFromDockKey(final DockKey dockKey) { + String description = null; + if (dockKey instanceof ResourceDockKey) { + description = ((ResourceDockKey) dockKey).getShortDescription(); + } + String name = I18N.getGUIMessage("gui.action.global_search.action.dockable.name", dockKey.getName()); + Icon icon = dockKey.getIcon(); + String tip = dockKey.getTooltip(); + + DockableAction action = new DockableAction(dockKey.getKey()); + action.putValue(ResourceAction.NAME, name); + action.putValue(ResourceAction.SHORT_DESCRIPTION, description); + action.putValue(ResourceAction.LONG_DESCRIPTION, tip); + action.putValue(ResourceAction.SMALL_ICON, icon); + + return createDocument(action); + } + + /** + * Tries to serialize the given action to a byte array. + * + * @param action + * the action to serialize + * @return the byte array or {@code null} if something goes wrong + */ + private byte[] createSerializedAction(final ResourceAction action) { + // remove listeners which are NOT transient... + PropertyChangeListener[] propertyChangeListeners = action.getPropertyChangeListeners(); + for (PropertyChangeListener propertyChangeListener : propertyChangeListeners) { + action.removePropertyChangeListener(propertyChangeListener); + } + + try { + return SerializationUtils.serialize(action); + } catch (SerializationException e) { + LogService.getRoot().log(Level.WARNING, "", e); + return null; + } finally { + // restore listeners which are NOT transient... + for (PropertyChangeListener propertyChangeListener : propertyChangeListeners) { + action.addPropertyChangeListener(propertyChangeListener); + } + + } + } + + +} diff --git a/src/main/java/com/rapidminer/gui/actions/search/DockableAction.java b/src/main/java/com/rapidminer/gui/actions/search/DockableAction.java new file mode 100644 index 000000000..07f2287d5 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/actions/search/DockableAction.java @@ -0,0 +1,51 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.gui.actions.search; + +import java.awt.event.ActionEvent; + +import com.rapidminer.gui.tools.DockingTools; +import com.rapidminer.gui.tools.ResourceAction; + + +/** + * Opens/Displays the given dockable identified by its dock key. + * + * @author Marco Boeck + * @since 8.1 + */ +class DockableAction extends ResourceAction { + + private static final long serialVersionUID = 1L; + + private final String dockKey; + + + DockableAction(final String dockKey) { + super("global_search.action.dockable_" + dockKey); + setCondition(EDIT_IN_PROGRESS, DONT_CARE); + + this.dockKey = dockKey; + } + + @Override + public void loggedActionPerformed(ActionEvent e) { + DockingTools.openDockable(dockKey); + } +} diff --git a/src/main/java/com/rapidminer/gui/actions/startup/NewAction.java b/src/main/java/com/rapidminer/gui/actions/startup/NewAction.java index 9b979b9a2..df42c0b6f 100644 --- a/src/main/java/com/rapidminer/gui/actions/startup/NewAction.java +++ b/src/main/java/com/rapidminer/gui/actions/startup/NewAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/startup/OpenAction.java b/src/main/java/com/rapidminer/gui/actions/startup/OpenAction.java index e21a0b100..06cc92dc9 100644 --- a/src/main/java/com/rapidminer/gui/actions/startup/OpenAction.java +++ b/src/main/java/com/rapidminer/gui/actions/startup/OpenAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/actions/startup/TutorialAction.java b/src/main/java/com/rapidminer/gui/actions/startup/TutorialAction.java index e43bd207c..c23090adf 100644 --- a/src/main/java/com/rapidminer/gui/actions/startup/TutorialAction.java +++ b/src/main/java/com/rapidminer/gui/actions/startup/TutorialAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/animation/Animation.java b/src/main/java/com/rapidminer/gui/animation/Animation.java index 4f091b95b..2bb7c872d 100644 --- a/src/main/java/com/rapidminer/gui/animation/Animation.java +++ b/src/main/java/com/rapidminer/gui/animation/Animation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/animation/AnimationTimerProcessListener.java b/src/main/java/com/rapidminer/gui/animation/AnimationTimerProcessListener.java index 82de2a0b9..5f19a6c61 100644 --- a/src/main/java/com/rapidminer/gui/animation/AnimationTimerProcessListener.java +++ b/src/main/java/com/rapidminer/gui/animation/AnimationTimerProcessListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/animation/IndeterminateAnimation.java b/src/main/java/com/rapidminer/gui/animation/IndeterminateAnimation.java index 7632faca1..6a35cf1f6 100644 --- a/src/main/java/com/rapidminer/gui/animation/IndeterminateAnimation.java +++ b/src/main/java/com/rapidminer/gui/animation/IndeterminateAnimation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/animation/OperatorAnimationProcessListener.java b/src/main/java/com/rapidminer/gui/animation/OperatorAnimationProcessListener.java index 871dc39c2..a339fb8d3 100644 --- a/src/main/java/com/rapidminer/gui/animation/OperatorAnimationProcessListener.java +++ b/src/main/java/com/rapidminer/gui/animation/OperatorAnimationProcessListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/animation/ProcessAnimationManager.java b/src/main/java/com/rapidminer/gui/animation/ProcessAnimationManager.java index 41a6b9c5b..661b1c4ac 100644 --- a/src/main/java/com/rapidminer/gui/animation/ProcessAnimationManager.java +++ b/src/main/java/com/rapidminer/gui/animation/ProcessAnimationManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/animation/ProgressAnimation.java b/src/main/java/com/rapidminer/gui/animation/ProgressAnimation.java index eaa6a7f64..52fd8625e 100644 --- a/src/main/java/com/rapidminer/gui/animation/ProgressAnimation.java +++ b/src/main/java/com/rapidminer/gui/animation/ProgressAnimation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/animation/ProgressProvider.java b/src/main/java/com/rapidminer/gui/animation/ProgressProvider.java index 4e0d166ab..f83e1a123 100644 --- a/src/main/java/com/rapidminer/gui/animation/ProgressProvider.java +++ b/src/main/java/com/rapidminer/gui/animation/ProgressProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/AttributeEditor.java b/src/main/java/com/rapidminer/gui/attributeeditor/AttributeEditor.java index a5410c7b8..3a35c0dfd 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/AttributeEditor.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/AttributeEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/AttributeEditorDialog.java b/src/main/java/com/rapidminer/gui/attributeeditor/AttributeEditorDialog.java index 53f1b290b..047a365e0 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/AttributeEditorDialog.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/AttributeEditorDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/CellEditors.java b/src/main/java/com/rapidminer/gui/attributeeditor/CellEditors.java index b051e2de1..9c5ca22db 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/CellEditors.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/CellEditors.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/CellRenderers.java b/src/main/java/com/rapidminer/gui/attributeeditor/CellRenderers.java index 4a5a60043..b2135a481 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/CellRenderers.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/CellRenderers.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/DataControl.java b/src/main/java/com/rapidminer/gui/attributeeditor/DataControl.java index f8d2b2f7a..873ec09ce 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/DataControl.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/DataControl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/DataControlListener.java b/src/main/java/com/rapidminer/gui/attributeeditor/DataControlListener.java index 125844e80..9bde8b89e 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/DataControlListener.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/DataControlListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/ClearAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/ClearAction.java index 3c22f5aba..4fbff96e1 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/ClearAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/ClearAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/CloseAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/CloseAction.java index 75f5e0f3e..abf111499 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/CloseAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/CloseAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/GuessAllTypesAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/GuessAllTypesAction.java index b1c587c10..572a072d5 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/GuessAllTypesAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/GuessAllTypesAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/GuessTypeAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/GuessTypeAction.java index 6c5a005e5..e990864bf 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/GuessTypeAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/GuessTypeAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/LoadDataAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/LoadDataAction.java index ef6c13da1..0085785a5 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/LoadDataAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/LoadDataAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/LoadSeriesDataAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/LoadSeriesDataAction.java index a5318a51c..e2dbe68ff 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/LoadSeriesDataAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/LoadSeriesDataAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/OpenAttributeFileAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/OpenAttributeFileAction.java index 98cf6bfff..ec52648f3 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/OpenAttributeFileAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/OpenAttributeFileAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/RemoveColumnAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/RemoveColumnAction.java index 2ba78657e..be0ddda9b 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/RemoveColumnAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/RemoveColumnAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/RemoveRowAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/RemoveRowAction.java index ac41d6a3a..11915b2a1 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/RemoveRowAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/RemoveRowAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/SaveAttributeFileAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/SaveAttributeFileAction.java index 2378beac2..2fe293a8e 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/SaveAttributeFileAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/SaveAttributeFileAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/SaveDataAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/SaveDataAction.java index cd897f87e..4bf7a276d 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/SaveDataAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/SaveDataAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/attributeeditor/actions/UseRowAsNamesAction.java b/src/main/java/com/rapidminer/gui/attributeeditor/actions/UseRowAsNamesAction.java index 463f398f4..455aa094b 100644 --- a/src/main/java/com/rapidminer/gui/attributeeditor/actions/UseRowAsNamesAction.java +++ b/src/main/java/com/rapidminer/gui/attributeeditor/actions/UseRowAsNamesAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/autosave/AutoSave.java b/src/main/java/com/rapidminer/gui/autosave/AutoSave.java index 057c9d1c2..b71a1696c 100644 --- a/src/main/java/com/rapidminer/gui/autosave/AutoSave.java +++ b/src/main/java/com/rapidminer/gui/autosave/AutoSave.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/AttributeWeightCellEditor.java b/src/main/java/com/rapidminer/gui/dialog/AttributeWeightCellEditor.java index 18a4afdac..dc00ee428 100644 --- a/src/main/java/com/rapidminer/gui/dialog/AttributeWeightCellEditor.java +++ b/src/main/java/com/rapidminer/gui/dialog/AttributeWeightCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/AttributeWeightsDialog.java b/src/main/java/com/rapidminer/gui/dialog/AttributeWeightsDialog.java index 811032415..1a42e82e1 100644 --- a/src/main/java/com/rapidminer/gui/dialog/AttributeWeightsDialog.java +++ b/src/main/java/com/rapidminer/gui/dialog/AttributeWeightsDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/AttributeWeightsTableModel.java b/src/main/java/com/rapidminer/gui/dialog/AttributeWeightsTableModel.java index 5d05d1e4b..c02831771 100644 --- a/src/main/java/com/rapidminer/gui/dialog/AttributeWeightsTableModel.java +++ b/src/main/java/com/rapidminer/gui/dialog/AttributeWeightsTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/BrowserUnavailableDialogFactory.java b/src/main/java/com/rapidminer/gui/dialog/BrowserUnavailableDialogFactory.java index 828148c8d..4d5d0b8fd 100644 --- a/src/main/java/com/rapidminer/gui/dialog/BrowserUnavailableDialogFactory.java +++ b/src/main/java/com/rapidminer/gui/dialog/BrowserUnavailableDialogFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/BugZillaAssistant.java b/src/main/java/com/rapidminer/gui/dialog/BugZillaAssistant.java index 9037d6311..83472c94d 100644 --- a/src/main/java/com/rapidminer/gui/dialog/BugZillaAssistant.java +++ b/src/main/java/com/rapidminer/gui/dialog/BugZillaAssistant.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/CronEditorDialog.java b/src/main/java/com/rapidminer/gui/dialog/CronEditorDialog.java index 59c13a417..936f44616 100644 --- a/src/main/java/com/rapidminer/gui/dialog/CronEditorDialog.java +++ b/src/main/java/com/rapidminer/gui/dialog/CronEditorDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/EULADialog.java b/src/main/java/com/rapidminer/gui/dialog/EULADialog.java index 27796b199..97a11e541 100644 --- a/src/main/java/com/rapidminer/gui/dialog/EULADialog.java +++ b/src/main/java/com/rapidminer/gui/dialog/EULADialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/IndividualSelector.java b/src/main/java/com/rapidminer/gui/dialog/IndividualSelector.java index e270cda3e..b51ea8fb5 100644 --- a/src/main/java/com/rapidminer/gui/dialog/IndividualSelector.java +++ b/src/main/java/com/rapidminer/gui/dialog/IndividualSelector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/IndividualSelectorTableModel.java b/src/main/java/com/rapidminer/gui/dialog/IndividualSelectorTableModel.java index 56337ef57..84c33d64f 100644 --- a/src/main/java/com/rapidminer/gui/dialog/IndividualSelectorTableModel.java +++ b/src/main/java/com/rapidminer/gui/dialog/IndividualSelectorTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/NewOperatorDialog.java b/src/main/java/com/rapidminer/gui/dialog/NewOperatorDialog.java index de86e414f..603530b2b 100644 --- a/src/main/java/com/rapidminer/gui/dialog/NewOperatorDialog.java +++ b/src/main/java/com/rapidminer/gui/dialog/NewOperatorDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/OperatorInfoPanel.java b/src/main/java/com/rapidminer/gui/dialog/OperatorInfoPanel.java index 2aad11a74..923dd958d 100644 --- a/src/main/java/com/rapidminer/gui/dialog/OperatorInfoPanel.java +++ b/src/main/java/com/rapidminer/gui/dialog/OperatorInfoPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/OperatorInfoScreen.java b/src/main/java/com/rapidminer/gui/dialog/OperatorInfoScreen.java index 3570c70b9..df442b2aa 100644 --- a/src/main/java/com/rapidminer/gui/dialog/OperatorInfoScreen.java +++ b/src/main/java/com/rapidminer/gui/dialog/OperatorInfoScreen.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/ResultContainer.java b/src/main/java/com/rapidminer/gui/dialog/ResultContainer.java index db040baa1..5bcc72bbe 100644 --- a/src/main/java/com/rapidminer/gui/dialog/ResultContainer.java +++ b/src/main/java/com/rapidminer/gui/dialog/ResultContainer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/SearchDialog.java b/src/main/java/com/rapidminer/gui/dialog/SearchDialog.java index 2d6b46d90..99be7a11b 100644 --- a/src/main/java/com/rapidminer/gui/dialog/SearchDialog.java +++ b/src/main/java/com/rapidminer/gui/dialog/SearchDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/SearchableJEditTextArea.java b/src/main/java/com/rapidminer/gui/dialog/SearchableJEditTextArea.java index 94ba7a7ca..98f34c405 100644 --- a/src/main/java/com/rapidminer/gui/dialog/SearchableJEditTextArea.java +++ b/src/main/java/com/rapidminer/gui/dialog/SearchableJEditTextArea.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/SearchableJTextComponent.java b/src/main/java/com/rapidminer/gui/dialog/SearchableJTextComponent.java index 9121758a2..059a76b9b 100644 --- a/src/main/java/com/rapidminer/gui/dialog/SearchableJTextComponent.java +++ b/src/main/java/com/rapidminer/gui/dialog/SearchableJTextComponent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/SearchableTextComponent.java b/src/main/java/com/rapidminer/gui/dialog/SearchableTextComponent.java index 488ea4886..fb1e3df8b 100644 --- a/src/main/java/com/rapidminer/gui/dialog/SearchableTextComponent.java +++ b/src/main/java/com/rapidminer/gui/dialog/SearchableTextComponent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dialog/UnknownParametersInfoDialog.java b/src/main/java/com/rapidminer/gui/dialog/UnknownParametersInfoDialog.java index 8b54a9bdb..f14c675e7 100644 --- a/src/main/java/com/rapidminer/gui/dialog/UnknownParametersInfoDialog.java +++ b/src/main/java/com/rapidminer/gui/dialog/UnknownParametersInfoDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dnd/AbstractPatchedTransferHandler.java b/src/main/java/com/rapidminer/gui/dnd/AbstractPatchedTransferHandler.java index 20cbb20e4..d3d015b83 100644 --- a/src/main/java/com/rapidminer/gui/dnd/AbstractPatchedTransferHandler.java +++ b/src/main/java/com/rapidminer/gui/dnd/AbstractPatchedTransferHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dnd/DragListener.java b/src/main/java/com/rapidminer/gui/dnd/DragListener.java index 9129f1633..b0121604d 100644 --- a/src/main/java/com/rapidminer/gui/dnd/DragListener.java +++ b/src/main/java/com/rapidminer/gui/dnd/DragListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dnd/OperatorTransferHandler.java b/src/main/java/com/rapidminer/gui/dnd/OperatorTransferHandler.java index a485c8844..7c9181165 100644 --- a/src/main/java/com/rapidminer/gui/dnd/OperatorTransferHandler.java +++ b/src/main/java/com/rapidminer/gui/dnd/OperatorTransferHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dnd/ReceivingOperatorTransferHandler.java b/src/main/java/com/rapidminer/gui/dnd/ReceivingOperatorTransferHandler.java index 8bcddb4f9..d58ee8e26 100644 --- a/src/main/java/com/rapidminer/gui/dnd/ReceivingOperatorTransferHandler.java +++ b/src/main/java/com/rapidminer/gui/dnd/ReceivingOperatorTransferHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -27,9 +27,7 @@ import java.util.LinkedList; import java.util.List; import java.util.logging.Level; - import javax.swing.SwingUtilities; -import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -44,6 +42,7 @@ import com.rapidminer.gui.flow.processrendering.annotations.model.WorkflowAnnotation; import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.io.process.XMLImporter; +import com.rapidminer.io.process.XMLTools; import com.rapidminer.operator.Operator; import com.rapidminer.operator.OperatorCreationException; import com.rapidminer.operator.UnknownParameterInformation; @@ -191,7 +190,7 @@ public void run() { newOperators = process.getRootOperator().getSubprocess(0).getOperators(); } catch (Exception e) { try { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder() + Document document = XMLTools.createDocumentBuilder() .parse(new InputSource(new StringReader((String) transferData))); NodeList opElements = document.getDocumentElement().getChildNodes(); Operator newOp = null; diff --git a/src/main/java/com/rapidminer/gui/dnd/RepositoryLocationList.java b/src/main/java/com/rapidminer/gui/dnd/RepositoryLocationList.java index fb714e0ff..796d7dc45 100644 --- a/src/main/java/com/rapidminer/gui/dnd/RepositoryLocationList.java +++ b/src/main/java/com/rapidminer/gui/dnd/RepositoryLocationList.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dnd/TransferableAnnotation.java b/src/main/java/com/rapidminer/gui/dnd/TransferableAnnotation.java index 1f20c5e5d..950c597ff 100644 --- a/src/main/java/com/rapidminer/gui/dnd/TransferableAnnotation.java +++ b/src/main/java/com/rapidminer/gui/dnd/TransferableAnnotation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/dnd/TransferableOperator.java b/src/main/java/com/rapidminer/gui/dnd/TransferableOperator.java index 587b4b63a..203914ed1 100644 --- a/src/main/java/com/rapidminer/gui/dnd/TransferableOperator.java +++ b/src/main/java/com/rapidminer/gui/dnd/TransferableOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -26,7 +26,6 @@ import java.util.List; import com.rapidminer.operator.Operator; -import com.rapidminer.repository.RepositoryLocation; import com.rapidminer.tools.Tools; @@ -41,12 +40,9 @@ public class TransferableOperator implements Transferable { public static final DataFlavor LOCAL_TRANSFERRED_OPERATORS_FLAVOR = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType + ";class=" + Operator.class.getName(), "RapidMiner operator"); - public static final DataFlavor LOCAL_TRANSFERRED_REPOSITORY_LOCATION_FLAVOR = new DataFlavor( - DataFlavor.javaJVMLocalObjectMimeType + ";class=" + RepositoryLocation.class.getName(), "repository location"); + public static final DataFlavor LOCAL_TRANSFERRED_REPOSITORY_LOCATION_FLAVOR = TransferableRepositoryEntry.LOCAL_TRANSFERRED_REPOSITORY_LOCATION_FLAVOR; - public static final DataFlavor LOCAL_TRANSFERRED_REPOSITORY_LOCATION_LIST_FLAVOR = new DataFlavor( - DataFlavor.javaJVMLocalObjectMimeType + ";class=" + RepositoryLocationList.class.getName(), - "repository locations"); + public static final DataFlavor LOCAL_TRANSFERRED_REPOSITORY_LOCATION_LIST_FLAVOR = TransferableRepositoryEntry.LOCAL_TRANSFERRED_REPOSITORY_LOCATION_LIST_FLAVOR; private static final DataFlavor[] DATA_FLAVORS = { TransferableOperator.LOCAL_TRANSFERRED_OPERATORS_FLAVOR, DataFlavor.stringFlavor }; diff --git a/src/main/java/com/rapidminer/gui/dnd/TransferableRepositoryEntry.java b/src/main/java/com/rapidminer/gui/dnd/TransferableRepositoryEntry.java new file mode 100644 index 000000000..91538f484 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/dnd/TransferableRepositoryEntry.java @@ -0,0 +1,91 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.gui.dnd; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.util.Arrays; + +import com.rapidminer.repository.RepositoryLocation; + + +/** + * Provides a transferable wrapper for {@link com.rapidminer.repository.Entry}s in order to drag-n-drop them. + * + * @author Marco Boeck + * @since 8.1 + */ +public class TransferableRepositoryEntry implements Transferable { + + + public static final DataFlavor LOCAL_TRANSFERRED_REPOSITORY_LOCATION_FLAVOR = new DataFlavor( + DataFlavor.javaJVMLocalObjectMimeType + ";class=" + RepositoryLocation.class.getName(), "repository location"); + + public static final DataFlavor LOCAL_TRANSFERRED_REPOSITORY_LOCATION_LIST_FLAVOR = new DataFlavor( + DataFlavor.javaJVMLocalObjectMimeType + ";class=" + RepositoryLocationList.class.getName(), + "repository locations"); + + private static final DataFlavor[] DATA_FLAVORS = { LOCAL_TRANSFERRED_REPOSITORY_LOCATION_FLAVOR, LOCAL_TRANSFERRED_REPOSITORY_LOCATION_LIST_FLAVOR, + DataFlavor.stringFlavor }; + + private final RepositoryLocation[] location; + + /** + * The transferable location(s). + * + * @param location + * the location(s) of the entry/entries which should be drag & dropped + */ + public TransferableRepositoryEntry(RepositoryLocation... location) { + if (location == null) { + throw new IllegalArgumentException("location must not be null!"); + } + + this.location = location; + } + + @Override + public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { + if (flavor.equals(LOCAL_TRANSFERRED_REPOSITORY_LOCATION_FLAVOR)) { + return location[0]; + } else if (flavor.equals(LOCAL_TRANSFERRED_REPOSITORY_LOCATION_LIST_FLAVOR)) { + return location; + } else if (flavor.equals(DataFlavor.stringFlavor)) { + if (location.length == 1) { + return location[0].toString(); + } else { + return Arrays.toString(location); + } + } else { + throw new UnsupportedFlavorException(flavor); + } + } + + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + return Arrays.asList(DATA_FLAVORS).contains(flavor); + } + + @Override + public DataFlavor[] getTransferDataFlavors() { + return DATA_FLAVORS; + } + +} diff --git a/src/main/java/com/rapidminer/gui/docking/DetachedDockViewAsTab.java b/src/main/java/com/rapidminer/gui/docking/DetachedDockViewAsTab.java index 3ce7b1a80..738cafd9a 100644 --- a/src/main/java/com/rapidminer/gui/docking/DetachedDockViewAsTab.java +++ b/src/main/java/com/rapidminer/gui/docking/DetachedDockViewAsTab.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/docking/RapidDockableContainerFactory.java b/src/main/java/com/rapidminer/gui/docking/RapidDockableContainerFactory.java index 1acca0a9c..b03ecf881 100644 --- a/src/main/java/com/rapidminer/gui/docking/RapidDockableContainerFactory.java +++ b/src/main/java/com/rapidminer/gui/docking/RapidDockableContainerFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/docking/RapidDockingToolbar.java b/src/main/java/com/rapidminer/gui/docking/RapidDockingToolbar.java index 9f44949da..b7664b4fb 100644 --- a/src/main/java/com/rapidminer/gui/docking/RapidDockingToolbar.java +++ b/src/main/java/com/rapidminer/gui/docking/RapidDockingToolbar.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/docking/RapidFloatingDialog.java b/src/main/java/com/rapidminer/gui/docking/RapidFloatingDialog.java index d66ddc101..b197506e0 100644 --- a/src/main/java/com/rapidminer/gui/docking/RapidFloatingDialog.java +++ b/src/main/java/com/rapidminer/gui/docking/RapidFloatingDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/AutoWireThread.java b/src/main/java/com/rapidminer/gui/flow/AutoWireThread.java index d31702ffb..f1eb4c2a7 100644 --- a/src/main/java/com/rapidminer/gui/flow/AutoWireThread.java +++ b/src/main/java/com/rapidminer/gui/flow/AutoWireThread.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/ErrorTable.java b/src/main/java/com/rapidminer/gui/flow/ErrorTable.java index 298c6eb39..1365cd2af 100644 --- a/src/main/java/com/rapidminer/gui/flow/ErrorTable.java +++ b/src/main/java/com/rapidminer/gui/flow/ErrorTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/ExampleSetMetaDataTableModel.java b/src/main/java/com/rapidminer/gui/flow/ExampleSetMetaDataTableModel.java index 215c31d19..1de614828 100644 --- a/src/main/java/com/rapidminer/gui/flow/ExampleSetMetaDataTableModel.java +++ b/src/main/java/com/rapidminer/gui/flow/ExampleSetMetaDataTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/ExtensionButton.java b/src/main/java/com/rapidminer/gui/flow/ExtensionButton.java index 0905c8b24..3d9a2a4c6 100644 --- a/src/main/java/com/rapidminer/gui/flow/ExtensionButton.java +++ b/src/main/java/com/rapidminer/gui/flow/ExtensionButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/FlowVisualizer.java b/src/main/java/com/rapidminer/gui/flow/FlowVisualizer.java index fee6ca848..c3ddef438 100644 --- a/src/main/java/com/rapidminer/gui/flow/FlowVisualizer.java +++ b/src/main/java/com/rapidminer/gui/flow/FlowVisualizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/NewProcessUndoManager.java b/src/main/java/com/rapidminer/gui/flow/NewProcessUndoManager.java index 788de741b..2fe109fa4 100644 --- a/src/main/java/com/rapidminer/gui/flow/NewProcessUndoManager.java +++ b/src/main/java/com/rapidminer/gui/flow/NewProcessUndoManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/OverviewPanel.java b/src/main/java/com/rapidminer/gui/flow/OverviewPanel.java index 8728eaadb..a1d56f558 100644 --- a/src/main/java/com/rapidminer/gui/flow/OverviewPanel.java +++ b/src/main/java/com/rapidminer/gui/flow/OverviewPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/PanningManager.java b/src/main/java/com/rapidminer/gui/flow/PanningManager.java index 49eb418ef..09a481113 100644 --- a/src/main/java/com/rapidminer/gui/flow/PanningManager.java +++ b/src/main/java/com/rapidminer/gui/flow/PanningManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/ProcessButtonBar.java b/src/main/java/com/rapidminer/gui/flow/ProcessButtonBar.java index 80d22a8fe..90b7b1f5c 100644 --- a/src/main/java/com/rapidminer/gui/flow/ProcessButtonBar.java +++ b/src/main/java/com/rapidminer/gui/flow/ProcessButtonBar.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/ProcessInteractionListener.java b/src/main/java/com/rapidminer/gui/flow/ProcessInteractionListener.java index 1fe18c33f..35cab2311 100644 --- a/src/main/java/com/rapidminer/gui/flow/ProcessInteractionListener.java +++ b/src/main/java/com/rapidminer/gui/flow/ProcessInteractionListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/ProcessPanel.java b/src/main/java/com/rapidminer/gui/flow/ProcessPanel.java index 5d31c0454..b5d46f342 100644 --- a/src/main/java/com/rapidminer/gui/flow/ProcessPanel.java +++ b/src/main/java/com/rapidminer/gui/flow/ProcessPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -390,7 +390,7 @@ public void loggedActionPerformed(ActionEvent e) { toolBar.add(zoomOut); toolBar.add(annotationsHandler.makeAddAnnotationAction(null), ViewToolBar.RIGHT); - toolBar.add(new AutoWireAction(mainFrame), ViewToolBar.RIGHT); + toolBar.add(new AutoWireAction(), ViewToolBar.RIGHT); toolBar.add(flowVisualizer.SHOW_ORDER_TOGGLEBUTTON, ViewToolBar.RIGHT); toolBar.add(renderer.getAutoFitAction(), ViewToolBar.RIGHT); @@ -615,7 +615,7 @@ private Rectangle getOpViewRect(Rectangle2D opRect, int pIndex) { * @param center * the point to focus on * @since 7.5 - * @see #scrollToProcessPosition(Point) + * @see #scrollToProcessPosition(Point, int) */ public void scrollToViewPosition(Point center) { getViewPort().scrollRectToVisible(getScrollRectangle(center)); diff --git a/src/main/java/com/rapidminer/gui/flow/ProcessPanelScroller.java b/src/main/java/com/rapidminer/gui/flow/ProcessPanelScroller.java index 8d8390d21..8901970f4 100644 --- a/src/main/java/com/rapidminer/gui/flow/ProcessPanelScroller.java +++ b/src/main/java/com/rapidminer/gui/flow/ProcessPanelScroller.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/ProcessParentButtonModel.java b/src/main/java/com/rapidminer/gui/flow/ProcessParentButtonModel.java index 1435932dd..4423c6b6e 100644 --- a/src/main/java/com/rapidminer/gui/flow/ProcessParentButtonModel.java +++ b/src/main/java/com/rapidminer/gui/flow/ProcessParentButtonModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/ProcessUndoManager.java b/src/main/java/com/rapidminer/gui/flow/ProcessUndoManager.java index 3dd45e53e..60f2db94f 100644 --- a/src/main/java/com/rapidminer/gui/flow/ProcessUndoManager.java +++ b/src/main/java/com/rapidminer/gui/flow/ProcessUndoManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/QuickFixDialog.java b/src/main/java/com/rapidminer/gui/flow/QuickFixDialog.java index 4a50c5581..ae72314f5 100644 --- a/src/main/java/com/rapidminer/gui/flow/QuickFixDialog.java +++ b/src/main/java/com/rapidminer/gui/flow/QuickFixDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationDrawUtils.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationDrawUtils.java index 2fe14022d..45ee8a99e 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationDrawUtils.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationDrawUtils.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationDrawer.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationDrawer.java index 329ec05cf..b3b4a614b 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationDrawer.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationDrawer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationsDecorator.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationsDecorator.java index 02847e38d..ba4e9e7b4 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationsDecorator.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationsDecorator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationsVisualizer.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationsVisualizer.java index 3070bf0f1..b31ba57c0 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationsVisualizer.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/AnnotationsVisualizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/PasteAnnotationProxyAction.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/PasteAnnotationProxyAction.java index e1926f687..e8507727b 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/PasteAnnotationProxyAction.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/PasteAnnotationProxyAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/TransferHandlerAnnotationPlaintext.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/TransferHandlerAnnotationPlaintext.java index ec0628a01..68ddd7ffd 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/TransferHandlerAnnotationPlaintext.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/TransferHandlerAnnotationPlaintext.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/event/AnnotationEventHook.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/event/AnnotationEventHook.java index 7e3dfb1ad..7789f8d9b 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/event/AnnotationEventHook.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/event/AnnotationEventHook.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationDragHelper.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationDragHelper.java index 0a53c76fa..6adc82246 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationDragHelper.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationDragHelper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationResizeHelper.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationResizeHelper.java index 368ef7408..c316bfa41 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationResizeHelper.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationResizeHelper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationsModel.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationsModel.java index 871013cde..677a4beed 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationsModel.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/AnnotationsModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/OperatorAnnotation.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/OperatorAnnotation.java index 3c01bb34b..8ffd686be 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/OperatorAnnotation.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/OperatorAnnotation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/ProcessAnnotation.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/ProcessAnnotation.java index 386a8708b..3f817f121 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/ProcessAnnotation.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/ProcessAnnotation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/WorkflowAnnotation.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/WorkflowAnnotation.java index 48390827e..eeddb2983 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/WorkflowAnnotation.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/WorkflowAnnotation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/WorkflowAnnotations.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/WorkflowAnnotations.java index ede60985f..3a6edec29 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/WorkflowAnnotations.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/model/WorkflowAnnotations.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationAlignment.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationAlignment.java index 6f8ebe51f..5296ea260 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationAlignment.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationAlignment.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationColor.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationColor.java index c947e862c..5a36b4e89 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationColor.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationColor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationStyle.java b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationStyle.java index 3b482cde0..48272dd9e 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationStyle.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/annotations/style/AnnotationStyle.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImage.java b/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImage.java index 94b1625fd..681b865f9 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImage.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImage.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImageDecorator.java b/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImageDecorator.java index 3d81670a1..f650a14f0 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImageDecorator.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImageDecorator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImageVisualizer.java b/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImageVisualizer.java index 0976b0912..6830bb490 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImageVisualizer.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/background/ProcessBackgroundImageVisualizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/connections/ConnectionDrawUtils.java b/src/main/java/com/rapidminer/gui/flow/processrendering/connections/ConnectionDrawUtils.java index 260a78d09..2ecfbbeed 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/connections/ConnectionDrawUtils.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/connections/ConnectionDrawUtils.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/connections/RemoveHoveredConnectionDecorator.java b/src/main/java/com/rapidminer/gui/flow/processrendering/connections/RemoveHoveredConnectionDecorator.java index 4adbc8a07..80abeeddc 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/connections/RemoveHoveredConnectionDecorator.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/connections/RemoveHoveredConnectionDecorator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/connections/RemoveSelectedConnectionDecorator.java b/src/main/java/com/rapidminer/gui/flow/processrendering/connections/RemoveSelectedConnectionDecorator.java index d950ac86d..438484bfb 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/connections/RemoveSelectedConnectionDecorator.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/connections/RemoveSelectedConnectionDecorator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/draw/OperatorDrawDecorator.java b/src/main/java/com/rapidminer/gui/flow/processrendering/draw/OperatorDrawDecorator.java index 58d44bdb4..627d52d3a 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/draw/OperatorDrawDecorator.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/draw/OperatorDrawDecorator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawDecorator.java b/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawDecorator.java index 468f8e4f8..23f865c75 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawDecorator.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawDecorator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawUtils.java b/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawUtils.java index 3f1b47540..6935f0db1 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawUtils.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawUtils.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawer.java b/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawer.java index b5910d748..9f2f5da93 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawer.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/draw/ProcessDrawer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererAnnotationEvent.java b/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererAnnotationEvent.java index fb8ad3b20..805de8884 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererAnnotationEvent.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererAnnotationEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererEventListener.java b/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererEventListener.java index 7c57f8731..c61908e9b 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererEventListener.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererEventListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererModelEvent.java b/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererModelEvent.java index eb84af198..a86ddd6c1 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererModelEvent.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererModelEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererOperatorEvent.java b/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererOperatorEvent.java index 842a89fbe..abc9ef932 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererOperatorEvent.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/event/ProcessRendererOperatorEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/model/ProcessRendererModel.java b/src/main/java/com/rapidminer/gui/flow/processrendering/model/ProcessRendererModel.java index c5b40074e..824682921 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/model/ProcessRendererModel.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/model/ProcessRendererModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -55,6 +55,7 @@ import com.rapidminer.gui.processeditor.ExtendedProcessEditor; import com.rapidminer.gui.processeditor.ProcessEditor; import com.rapidminer.io.process.AnnotationProcessXMLFilter; +import com.rapidminer.io.process.AutoModelProcessXMLFilter; import com.rapidminer.io.process.BackgroundImageProcessXMLFilter; import com.rapidminer.io.process.GUIProcessXMLFilter; import com.rapidminer.io.process.ProcessLayoutXMLFilter; @@ -87,6 +88,10 @@ * methods. This is done for performance reasons and to support batch updates and only trigger * events when really needed. *

+ *

+ * The model should be disposed of if it is no longer needed using the {@link #dispose()} method. + * Take note that it can not be reliably used after that call. + *

* * @author Marco Boeck, Jan Czogalla * @since 6.4.0 @@ -155,6 +160,8 @@ public final class ProcessRendererModel { /** whether snap to grid is enabled */ private boolean snapToGrid; + private ParameterChangeListener paramListener; + /** source port of the current connection */ private OutputPort selectedConnectionSource; @@ -210,6 +217,7 @@ public final class ProcessRendererModel { static { if (!RapidMiner.getExecutionMode().isHeadless()) { ProcessXMLFilterRegistry.registerFilter(new GUIProcessXMLFilter()); + ProcessXMLFilterRegistry.registerFilter(new AutoModelProcessXMLFilter()); } } @@ -226,7 +234,7 @@ public ProcessRendererModel() { this.hoveringProcessIndex = -1; // listen for snapToGrid changes - ParameterService.registerParameterChangeListener(new ParameterChangeListener() { + paramListener = new ParameterChangeListener() { @Override public void informParameterSaved() { @@ -239,7 +247,8 @@ public void informParameterChanged(String key, String value) { setSnapToGrid(Boolean.parseBoolean(value)); } } - }); + }; + ParameterService.registerParameterChangeListener(paramListener); // listen for selection changes in the ProcessRendererView and notify all registered process // editors @@ -1930,4 +1939,16 @@ private void fireProcessStored() { l.stored(process); } } + + /** + * Disposes of this model. Removes the global {@link ParameterChangeListener} and clears the + * {@link NewProcessUndoManager}. This should be called if the model is no longer used and is + * expected to be garbage collected. It can not be used reliably after this call. + * + * @since 8.1 + */ + public void dispose() { + undoManager.reset(); + ParameterService.removeParameterChangeListener(paramListener); + } } diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessEventDecorator.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessEventDecorator.java index 58f82f47c..05cfde596 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessEventDecorator.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessEventDecorator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererController.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererController.java index 2030fc014..106ebfe75 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererController.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererController.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererDropTarget.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererDropTarget.java index f9745ac9e..8d76f7d16 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererDropTarget.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererDropTarget.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererMouseHandler.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererMouseHandler.java index 7bd25494f..84cccea16 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererMouseHandler.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererMouseHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererTransferHandler.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererTransferHandler.java index 6b8f2136e..2a75a792b 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererTransferHandler.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererTransferHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererView.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererView.java index 0fcca00ec..a39829fb1 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererView.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/ProcessRendererView.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/RenderPhase.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/RenderPhase.java index a4c52a459..995780264 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/RenderPhase.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/RenderPhase.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/RepaintFilter.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/RepaintFilter.java index 155688a18..4f368667b 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/RepaintFilter.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/RepaintFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/ArrangeOperatorsAction.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/ArrangeOperatorsAction.java index e6174794f..6ac970d93 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/ArrangeOperatorsAction.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/ArrangeOperatorsAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/AutoFitAction.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/AutoFitAction.java index 4dc1ccb65..7dd12706d 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/AutoFitAction.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/AutoFitAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/DeleteSelectedConnectionAction.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/DeleteSelectedConnectionAction.java index 087ca8a12..16c42d080 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/DeleteSelectedConnectionAction.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/DeleteSelectedConnectionAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/RenameAction.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/RenameAction.java index 0d03829fb..e0ca5cee3 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/RenameAction.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/RenameAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/SelectAllAction.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/SelectAllAction.java index c9fb57bd3..71fb1c776 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/SelectAllAction.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/actions/SelectAllAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -54,6 +54,12 @@ public void loggedActionPerformed(final ActionEvent e) { for (ExecutionUnit unit : view.getModel().getProcesses()) { selected.addAll(unit.getOperators()); } + + // On an empty process, select the displayed operator chain instead + if (selected.isEmpty()) { + selected.add(view.getModel().getDisplayedChain()); + } + view.getModel().addOperatorsToSelection(selected); view.getModel().fireOperatorSelectionChanged(selected); } diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/InterpolationMap.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/InterpolationMap.java index 5511f557d..c3c3e281d 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/InterpolationMap.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/InterpolationMap.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/OperatorWarningHandler.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/OperatorWarningHandler.java index bf38d4807..2a6cd46b3 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/OperatorWarningHandler.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/OperatorWarningHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/ProcessRendererTooltipProvider.java b/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/ProcessRendererTooltipProvider.java index be733944e..2e3dedca2 100644 --- a/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/ProcessRendererTooltipProvider.java +++ b/src/main/java/com/rapidminer/gui/flow/processrendering/view/components/ProcessRendererTooltipProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/AssociationRulesGraphCreator.java b/src/main/java/com/rapidminer/gui/graphs/AssociationRulesGraphCreator.java index 5a1c60338..c44b24cba 100644 --- a/src/main/java/com/rapidminer/gui/graphs/AssociationRulesGraphCreator.java +++ b/src/main/java/com/rapidminer/gui/graphs/AssociationRulesGraphCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/BasicVertexShapeTransformer.java b/src/main/java/com/rapidminer/gui/graphs/BasicVertexShapeTransformer.java index ad53cdcab..375f9a73b 100644 --- a/src/main/java/com/rapidminer/gui/graphs/BasicVertexShapeTransformer.java +++ b/src/main/java/com/rapidminer/gui/graphs/BasicVertexShapeTransformer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/ClusterModelGraphCreator.java b/src/main/java/com/rapidminer/gui/graphs/ClusterModelGraphCreator.java index 189c2dbf0..f63b1ad0a 100644 --- a/src/main/java/com/rapidminer/gui/graphs/ClusterModelGraphCreator.java +++ b/src/main/java/com/rapidminer/gui/graphs/ClusterModelGraphCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/ClusterModelObjectViewer.java b/src/main/java/com/rapidminer/gui/graphs/ClusterModelObjectViewer.java index 052e024b2..419e98cbd 100644 --- a/src/main/java/com/rapidminer/gui/graphs/ClusterModelObjectViewer.java +++ b/src/main/java/com/rapidminer/gui/graphs/ClusterModelObjectViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/DefaultObjectViewer.java b/src/main/java/com/rapidminer/gui/graphs/DefaultObjectViewer.java index 655c8aad8..43c4e0e52 100644 --- a/src/main/java/com/rapidminer/gui/graphs/DefaultObjectViewer.java +++ b/src/main/java/com/rapidminer/gui/graphs/DefaultObjectViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/ExtendedVertexShapeTransformer.java b/src/main/java/com/rapidminer/gui/graphs/ExtendedVertexShapeTransformer.java index c98a99fdb..748e6231f 100644 --- a/src/main/java/com/rapidminer/gui/graphs/ExtendedVertexShapeTransformer.java +++ b/src/main/java/com/rapidminer/gui/graphs/ExtendedVertexShapeTransformer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/GraphCreator.java b/src/main/java/com/rapidminer/gui/graphs/GraphCreator.java index c775fb366..202b6448c 100644 --- a/src/main/java/com/rapidminer/gui/graphs/GraphCreator.java +++ b/src/main/java/com/rapidminer/gui/graphs/GraphCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/GraphCreatorAdaptor.java b/src/main/java/com/rapidminer/gui/graphs/GraphCreatorAdaptor.java index 0d5569ada..b694356c9 100644 --- a/src/main/java/com/rapidminer/gui/graphs/GraphCreatorAdaptor.java +++ b/src/main/java/com/rapidminer/gui/graphs/GraphCreatorAdaptor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/GraphObjectViewer.java b/src/main/java/com/rapidminer/gui/graphs/GraphObjectViewer.java index 483d23fb1..2b9e39353 100644 --- a/src/main/java/com/rapidminer/gui/graphs/GraphObjectViewer.java +++ b/src/main/java/com/rapidminer/gui/graphs/GraphObjectViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/GraphViewer.java b/src/main/java/com/rapidminer/gui/graphs/GraphViewer.java index e0a5d154b..faec50694 100644 --- a/src/main/java/com/rapidminer/gui/graphs/GraphViewer.java +++ b/src/main/java/com/rapidminer/gui/graphs/GraphViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/LayoutSelection.java b/src/main/java/com/rapidminer/gui/graphs/LayoutSelection.java index 04fc102f5..3b2229ae8 100644 --- a/src/main/java/com/rapidminer/gui/graphs/LayoutSelection.java +++ b/src/main/java/com/rapidminer/gui/graphs/LayoutSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/ShapeBasedTreeLayout.java b/src/main/java/com/rapidminer/gui/graphs/ShapeBasedTreeLayout.java index 7652c6abe..b2abb34d5 100644 --- a/src/main/java/com/rapidminer/gui/graphs/ShapeBasedTreeLayout.java +++ b/src/main/java/com/rapidminer/gui/graphs/ShapeBasedTreeLayout.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/SimilarityGraphCreator.java b/src/main/java/com/rapidminer/gui/graphs/SimilarityGraphCreator.java index 406114294..4111960ff 100644 --- a/src/main/java/com/rapidminer/gui/graphs/SimilarityGraphCreator.java +++ b/src/main/java/com/rapidminer/gui/graphs/SimilarityGraphCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/SingleDefaultGraphMouse.java b/src/main/java/com/rapidminer/gui/graphs/SingleDefaultGraphMouse.java index f48100443..8a6a670ef 100644 --- a/src/main/java/com/rapidminer/gui/graphs/SingleDefaultGraphMouse.java +++ b/src/main/java/com/rapidminer/gui/graphs/SingleDefaultGraphMouse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 RapidMiner GmbH + * Copyright (C) 2001-2018 RapidMiner GmbH */ package com.rapidminer.gui.graphs; diff --git a/src/main/java/com/rapidminer/gui/graphs/SortableEdge.java b/src/main/java/com/rapidminer/gui/graphs/SortableEdge.java index 52494a4eb..080a46137 100644 --- a/src/main/java/com/rapidminer/gui/graphs/SortableEdge.java +++ b/src/main/java/com/rapidminer/gui/graphs/SortableEdge.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/TransitionGraphCreator.java b/src/main/java/com/rapidminer/gui/graphs/TransitionGraphCreator.java index 6481c6d57..16a5f5b26 100644 --- a/src/main/java/com/rapidminer/gui/graphs/TransitionGraphCreator.java +++ b/src/main/java/com/rapidminer/gui/graphs/TransitionGraphCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/TreeModelEdgeLabelRenderer.java b/src/main/java/com/rapidminer/gui/graphs/TreeModelEdgeLabelRenderer.java index 9c653c6ac..a12f16000 100644 --- a/src/main/java/com/rapidminer/gui/graphs/TreeModelEdgeLabelRenderer.java +++ b/src/main/java/com/rapidminer/gui/graphs/TreeModelEdgeLabelRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/TreeModelGraphCreator.java b/src/main/java/com/rapidminer/gui/graphs/TreeModelGraphCreator.java index cf3c60439..90e7fffe5 100644 --- a/src/main/java/com/rapidminer/gui/graphs/TreeModelGraphCreator.java +++ b/src/main/java/com/rapidminer/gui/graphs/TreeModelGraphCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/TreeModelNodeLabelRenderer.java b/src/main/java/com/rapidminer/gui/graphs/TreeModelNodeLabelRenderer.java index f629f9555..a1a56f8f6 100644 --- a/src/main/java/com/rapidminer/gui/graphs/TreeModelNodeLabelRenderer.java +++ b/src/main/java/com/rapidminer/gui/graphs/TreeModelNodeLabelRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/TreeModelNodeRenderer.java b/src/main/java/com/rapidminer/gui/graphs/TreeModelNodeRenderer.java index 30e67e485..7bb1a44b0 100644 --- a/src/main/java/com/rapidminer/gui/graphs/TreeModelNodeRenderer.java +++ b/src/main/java/com/rapidminer/gui/graphs/TreeModelNodeRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/actions/ZoomInAction.java b/src/main/java/com/rapidminer/gui/graphs/actions/ZoomInAction.java index 2ce77cea6..03a2e9206 100644 --- a/src/main/java/com/rapidminer/gui/graphs/actions/ZoomInAction.java +++ b/src/main/java/com/rapidminer/gui/graphs/actions/ZoomInAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/graphs/actions/ZoomOutAction.java b/src/main/java/com/rapidminer/gui/graphs/actions/ZoomOutAction.java index 319d3c09f..364d15cb3 100644 --- a/src/main/java/com/rapidminer/gui/graphs/actions/ZoomOutAction.java +++ b/src/main/java/com/rapidminer/gui/graphs/actions/ZoomOutAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/internal/GUIStartupListener.java b/src/main/java/com/rapidminer/gui/internal/GUIStartupListener.java index dbd5657d0..b8c7c4cc9 100644 --- a/src/main/java/com/rapidminer/gui/internal/GUIStartupListener.java +++ b/src/main/java/com/rapidminer/gui/internal/GUIStartupListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/license/LicenseTools.java b/src/main/java/com/rapidminer/gui/license/LicenseTools.java index 39e0aff1c..951f2c947 100644 --- a/src/main/java/com/rapidminer/gui/license/LicenseTools.java +++ b/src/main/java/com/rapidminer/gui/license/LicenseTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ButtonListener.java b/src/main/java/com/rapidminer/gui/look/ButtonListener.java index 079190835..01b135f0a 100644 --- a/src/main/java/com/rapidminer/gui/look/ButtonListener.java +++ b/src/main/java/com/rapidminer/gui/look/ButtonListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ClipboardActionsPopup.java b/src/main/java/com/rapidminer/gui/look/ClipboardActionsPopup.java index b324b615d..e03c19e8f 100644 --- a/src/main/java/com/rapidminer/gui/look/ClipboardActionsPopup.java +++ b/src/main/java/com/rapidminer/gui/look/ClipboardActionsPopup.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/Colors.java b/src/main/java/com/rapidminer/gui/look/Colors.java index 0117bc2c0..21f40e07e 100644 --- a/src/main/java/com/rapidminer/gui/look/Colors.java +++ b/src/main/java/com/rapidminer/gui/look/Colors.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -38,6 +38,9 @@ public class Colors { private static final ColorUIResource INPUT_BORDER = new ColorUIResource(187, 187, 187); private static final ColorUIResource INPUT_BORDER_DISABLED = new ColorUIResource(227, 227, 227); private static final ColorUIResource INPUT_BORDER_FOCUS = new ColorUIResource(145, 145, 145); + private static final ColorUIResource INPUT_BORDER_DARK = new ColorUIResource(157, 157, 157); + private static final ColorUIResource INPUT_BORDER_DARK_DISABLED = INPUT_BORDER_DISABLED; + private static final ColorUIResource INPUT_BORDER_DARK_FOCUS = new ColorUIResource(115, 115, 115); public static final ColorUIResource SELECTION_FOREGROUND = new ColorUIResource(155, 155, 155); public static final ColorUIResource SELECTION_FOREGROUND_DISABLED = new ColorUIResource(209, 208, 208); @@ -55,6 +58,9 @@ public class Colors { public static final ColorUIResource TEXTFIELD_BORDER = INPUT_BORDER; public static final ColorUIResource TEXTFIELD_BORDER_DISABLED = INPUT_BORDER_DISABLED; public static final ColorUIResource TEXTFIELD_BORDER_FOCUS = INPUT_BORDER_FOCUS; + public static final ColorUIResource TEXTFIELD_BORDER_DARK = INPUT_BORDER_DARK; + public static final ColorUIResource TEXTFIELD_BORDER_DARK_DISABLED = INPUT_BORDER_DARK_DISABLED; + public static final ColorUIResource TEXTFIELD_BORDER_DARK_FOCUS = INPUT_BORDER_DARK_FOCUS; public static final ColorUIResource TEXT_FOREGROUND = new ColorUIResource(0, 0, 0); public static final ColorUIResource TEXT_HIGHLIGHT_BACKGROUND = new ColorUIResource(178, 215, 255); @@ -64,6 +70,9 @@ public class Colors { public static final ColorUIResource BUTTON_BORDER = new ColorUIResource(177, 177, 177); public static final ColorUIResource BUTTON_BORDER_DISABLED = new ColorUIResource(200, 200, 200); public static final ColorUIResource BUTTON_BORDER_FOCUS = INPUT_BORDER_FOCUS; + public static final ColorUIResource BUTTON_BORDER_DARK = INPUT_BORDER_DARK; + public static final ColorUIResource BUTTON_BORDER_DARK_DISABLED = BUTTON_BORDER_DISABLED; + public static final ColorUIResource BUTTON_BORDER_DARK_FOCUS = INPUT_BORDER_DARK_FOCUS; public static final ColorUIResource BUTTON_BACKGROUND_GRADIENT_START = new ColorUIResource(240, 240, 240); public static final ColorUIResource BUTTON_BACKGROUND_GRADIENT_END = new ColorUIResource(218, 218, 218); public static final ColorUIResource BUTTON_BACKGROUND_ROLLOVER_GRADIENT_START = new ColorUIResource(225, 225, 225); @@ -72,6 +81,14 @@ public class Colors { public static final ColorUIResource BUTTON_BACKGROUND_PRESSED_GRADIENT_END = new ColorUIResource(230, 230, 230); public static final ColorUIResource BUTTON_BACKGROUND_DISABLED_GRADIENT_START = new ColorUIResource(210, 210, 210); public static final ColorUIResource BUTTON_BACKGROUND_DISABLED_GRADIENT_END = new ColorUIResource(210, 210, 210); + public static final ColorUIResource BUTTON_BACKGROUND_HIGHLIGHTED_GRADIENT_START = new ColorUIResource(247, 120, 79); + public static final ColorUIResource BUTTON_BACKGROUND_HIGHLIGHTED_GRADIENT_END = new ColorUIResource(232, 86, 39); + public static final ColorUIResource BUTTON_BACKGROUND_HIGHLIGHTED_ROLLOVER_GRADIENT_START = new ColorUIResource(232, 105, 64); + public static final ColorUIResource BUTTON_BACKGROUND_HIGHLIGHTED_ROLLOVER_GRADIENT_END = new ColorUIResource(217, 90, 49); + public static final ColorUIResource BUTTON_BACKGROUND_HIGHLIGHTED_PRESSED_GRADIENT_START = new ColorUIResource(210, 83, 42); + public static final ColorUIResource BUTTON_BACKGROUND_HIGHLIGHTED_PRESSED_GRADIENT_END = new ColorUIResource(237, 110, 69); + public static final ColorUIResource BUTTON_BACKGROUND_HIGHLIGHTED_DISABLED_GRADIENT_START = BUTTON_BACKGROUND_DISABLED_GRADIENT_START; + public static final ColorUIResource BUTTON_BACKGROUND_HIGHLIGHTED_DISABLED_GRADIENT_END = BUTTON_BACKGROUND_DISABLED_GRADIENT_END; public static final ColorUIResource COMBOBOX_BACKGROUND = INPUT_BACKGROUND; public static final ColorUIResource COMBOBOX_BACKGROUND_DARK = INPUT_BACKGROUND_DARK; diff --git a/src/main/java/com/rapidminer/gui/look/GenericArrowButton.java b/src/main/java/com/rapidminer/gui/look/GenericArrowButton.java index 6040e4bc7..2fa2ad6fa 100644 --- a/src/main/java/com/rapidminer/gui/look/GenericArrowButton.java +++ b/src/main/java/com/rapidminer/gui/look/GenericArrowButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ImageIconUIResource.java b/src/main/java/com/rapidminer/gui/look/ImageIconUIResource.java index ef39c83eb..ade6a97d2 100644 --- a/src/main/java/com/rapidminer/gui/look/ImageIconUIResource.java +++ b/src/main/java/com/rapidminer/gui/look/ImageIconUIResource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/InternalFrameTitlePane.java b/src/main/java/com/rapidminer/gui/look/InternalFrameTitlePane.java index ca3bbe48a..dc56a54e9 100644 --- a/src/main/java/com/rapidminer/gui/look/InternalFrameTitlePane.java +++ b/src/main/java/com/rapidminer/gui/look/InternalFrameTitlePane.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/RapidLookAndFeel.java b/src/main/java/com/rapidminer/gui/look/RapidLookAndFeel.java index 2a53f24f0..0fc99400a 100644 --- a/src/main/java/com/rapidminer/gui/look/RapidLookAndFeel.java +++ b/src/main/java/com/rapidminer/gui/look/RapidLookAndFeel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -365,7 +365,7 @@ protected void initComponentDefaults(UIDefaults table) { "PAGE_DOWN", "scrollDown", "shift PAGE_DOWN", "scrollDownExtendSelection", CONTROL_ID + " A", "selectAll", CONTROL_ID + " SLASH", "selectAll", CONTROL_ID + " BACK_SLASH", "clearSelection" }), // MenuBar - "MenuBar.font", fontDialog12, "MenuBar.windowBindings", new Object[] { "F10", "takeFocus" } + "MenuBar.font", fontDialog12, "MenuBar.windowBindings", new Object[] {} , "MenuBar.selectionForeground", Colors.TEXT_HIGHLIGHT_FOREGROUND, // Menu Item @@ -438,7 +438,7 @@ protected void initComponentDefaults(UIDefaults table) { new UIDefaults.LazyInputMap(new Object[] { "UP", "negativeIncrement", "DOWN", "positiveIncrement", "LEFT", "negativeIncrement", "RIGHT", "positiveIncrement", "KP_UP", "negativeIncrement", "KP_DOWN", "positiveIncrement", "KP_LEFT", "negativeIncrement", "KP_RIGHT", "positiveIncrement", "HOME", - "selectMin", "END", "selectMax", "F8", "startResize", "F6", "toggleFocus", CONTROL_ID + " TAB", + "selectMin", "END", "selectMax", "HOME", "toggleFocus", CONTROL_ID + " TAB", "focusOutForward", CONTROL_ID + " shift TAB", "focusOutBackward" }), "SplitPaneDivider.border", null, diff --git a/src/main/java/com/rapidminer/gui/look/RapidLookComboBoxEditor.java b/src/main/java/com/rapidminer/gui/look/RapidLookComboBoxEditor.java index db1fea349..2b0587e69 100644 --- a/src/main/java/com/rapidminer/gui/look/RapidLookComboBoxEditor.java +++ b/src/main/java/com/rapidminer/gui/look/RapidLookComboBoxEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/RapidLookListCellRenderer.java b/src/main/java/com/rapidminer/gui/look/RapidLookListCellRenderer.java index 5021746d6..d121744ab 100644 --- a/src/main/java/com/rapidminer/gui/look/RapidLookListCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/look/RapidLookListCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/RapidLookTools.java b/src/main/java/com/rapidminer/gui/look/RapidLookTools.java index 4f69764ce..d10f2092d 100644 --- a/src/main/java/com/rapidminer/gui/look/RapidLookTools.java +++ b/src/main/java/com/rapidminer/gui/look/RapidLookTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -27,7 +27,6 @@ import java.awt.RenderingHints; import java.awt.Shape; import java.awt.geom.RoundRectangle2D; - import javax.swing.AbstractButton; import javax.swing.ButtonModel; import javax.swing.JComboBox; @@ -78,6 +77,37 @@ public final class RapidLookTools { */ public static final String PROPERTY_INPUT_BACKGROUND_DARK = "input_dark_bg"; + /** + * If buttons should be highlighted in orange or not. Set to {@code true} or {@code false}. Default is {@code false}. + * + * @since 8.1 + */ + public static final String PROPERTY_BUTTON_HIGHLIGHT = "button_highlight"; + + /** + * If buttons should have a darker border. Set to {@code true} or {@code false}. Default is {@code false}. + * + * @since 8.1 + */ + public static final String PROPERTY_BUTTON_DARK_BORDER = "button_dark_border"; + + /** + * If input fields should have a darker border. Set to {@code true} or {@code false}. Default is {@code false}. + * + * @since 8.1 + */ + public static final String PROPERTY_INPUT_DARK_BORDER = "input_dark_border"; + + /** + * If input fields should be part of a composite input/button. Normally, each component has rounded borders all around so they look good as a standalone field. + * If you want to have inputs and buttons right next to each other with no padding, this would look ugly. + * Setting this to either {@link javax.swing.SwingConstants#LEFT}, {@link javax.swing.SwingConstants#CENTER} or {@link javax.swing.SwingConstants#RIGHT} + * will produce a composite input border which is not rounded on the right, both sides, or the left respectively. Default is {@code -1}, aka standalone with round borders all around. + * + * @since 8.1 + */ + public static final String PROPERTY_INPUT_TYPE_COMPOSITE = "input_type_composite"; + static { try { VLToolBar.class.getName(); @@ -202,16 +232,30 @@ public static void drawButtonBorder(AbstractButton b, Graphics g, Shape shape) { Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - if (b.isEnabled()) { - if (b.hasFocus()) { - g2.setColor(Colors.BUTTON_BORDER_FOCUS); + boolean darkBorder = Boolean.parseBoolean(String.valueOf(b.getClientProperty(RapidLookTools.PROPERTY_BUTTON_DARK_BORDER))); + if (darkBorder) { + if (b.isEnabled()) { + if (b.hasFocus()) { + g2.setColor(Colors.BUTTON_BORDER_DARK_FOCUS); + } else { + g2.setColor(Colors.BUTTON_BORDER_DARK); + } } else { - g2.setColor(Colors.BUTTON_BORDER); + g2.setColor(Colors.BUTTON_BORDER_DARK_DISABLED); } } else { - g2.setColor(Colors.BUTTON_BORDER_DISABLED); + if (b.isEnabled()) { + if (b.hasFocus()) { + g2.setColor(Colors.BUTTON_BORDER_FOCUS); + } else { + g2.setColor(Colors.BUTTON_BORDER); + } + } else { + g2.setColor(Colors.BUTTON_BORDER_DISABLED); + } } + g2.draw(shape); } @@ -227,26 +271,46 @@ public static void drawButton(AbstractButton b, Graphics g, Shape shape) { g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int h = (int) shape.getBounds().getHeight(); - if (b.isEnabled()) { - if (b.getModel().isPressed() || b.getModel().isSelected()) { - Paint gp = new GradientPaint(0, 0, Colors.BUTTON_BACKGROUND_PRESSED_GRADIENT_START, 0, h, - Colors.BUTTON_BACKGROUND_PRESSED_GRADIENT_END); - g2.setPaint(gp); - } else if (b.getModel().isRollover()) { - Paint gp = new GradientPaint(0, 0, Colors.BUTTON_BACKGROUND_ROLLOVER_GRADIENT_START, 0, h, - Colors.BUTTON_BACKGROUND_ROLLOVER_GRADIENT_END); - g2.setPaint(gp); + ColorUIResource colorGradientStart; + ColorUIResource colorGradientEnd; + boolean highlighted = Boolean.parseBoolean(String.valueOf(b.getClientProperty(PROPERTY_BUTTON_HIGHLIGHT))); + if (highlighted) { + if (b.isEnabled()) { + if (b.getModel().isPressed() || b.getModel().isSelected()) { + colorGradientStart = Colors.BUTTON_BACKGROUND_HIGHLIGHTED_PRESSED_GRADIENT_START; + colorGradientEnd = Colors.BUTTON_BACKGROUND_HIGHLIGHTED_PRESSED_GRADIENT_END; + } else if (b.getModel().isRollover()) { + colorGradientStart = Colors.BUTTON_BACKGROUND_HIGHLIGHTED_ROLLOVER_GRADIENT_START; + colorGradientEnd = Colors.BUTTON_BACKGROUND_HIGHLIGHTED_ROLLOVER_GRADIENT_END; + } else { + colorGradientStart = Colors.BUTTON_BACKGROUND_HIGHLIGHTED_GRADIENT_START; + colorGradientEnd = Colors.BUTTON_BACKGROUND_HIGHLIGHTED_GRADIENT_END; + } } else { - Paint gp = new GradientPaint(0, 0, Colors.BUTTON_BACKGROUND_GRADIENT_START, 0, h, - Colors.BUTTON_BACKGROUND_GRADIENT_END); - g2.setPaint(gp); + colorGradientStart = Colors.BUTTON_BACKGROUND_HIGHLIGHTED_DISABLED_GRADIENT_START; + colorGradientEnd = Colors.BUTTON_BACKGROUND_HIGHLIGHTED_DISABLED_GRADIENT_END; } } else { - Paint gp = new GradientPaint(0, 0, Colors.BUTTON_BACKGROUND_DISABLED_GRADIENT_START, 0, h, - Colors.BUTTON_BACKGROUND_DISABLED_GRADIENT_END); - g2.setPaint(gp); + if (b.isEnabled()) { + if (b.getModel().isPressed() || b.getModel().isSelected()) { + colorGradientStart = Colors.BUTTON_BACKGROUND_PRESSED_GRADIENT_START; + colorGradientEnd = Colors.BUTTON_BACKGROUND_PRESSED_GRADIENT_END; + } else if (b.getModel().isRollover()) { + colorGradientStart = Colors.BUTTON_BACKGROUND_ROLLOVER_GRADIENT_START; + colorGradientEnd = Colors.BUTTON_BACKGROUND_ROLLOVER_GRADIENT_END; + } else { + colorGradientStart = Colors.BUTTON_BACKGROUND_GRADIENT_START; + colorGradientEnd = Colors.BUTTON_BACKGROUND_GRADIENT_END; + } + } else { + colorGradientStart = Colors.BUTTON_BACKGROUND_DISABLED_GRADIENT_START; + colorGradientEnd = Colors.BUTTON_BACKGROUND_DISABLED_GRADIENT_END; + } } + Paint gp = new GradientPaint(0, 0, colorGradientStart, 0, h, colorGradientEnd); + g2.setPaint(gp); + g2.fill(shape); } diff --git a/src/main/java/com/rapidminer/gui/look/RoundedPopupFactory.java b/src/main/java/com/rapidminer/gui/look/RoundedPopupFactory.java index 41a45590a..85702e4eb 100644 --- a/src/main/java/com/rapidminer/gui/look/RoundedPopupFactory.java +++ b/src/main/java/com/rapidminer/gui/look/RoundedPopupFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/RoundedRectanglePopup.java b/src/main/java/com/rapidminer/gui/look/RoundedRectanglePopup.java index bd43fa0ee..1bd75877c 100644 --- a/src/main/java/com/rapidminer/gui/look/RoundedRectanglePopup.java +++ b/src/main/java/com/rapidminer/gui/look/RoundedRectanglePopup.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/TextActions.java b/src/main/java/com/rapidminer/gui/look/TextActions.java index 764906888..5eeb5d4a5 100644 --- a/src/main/java/com/rapidminer/gui/look/TextActions.java +++ b/src/main/java/com/rapidminer/gui/look/TextActions.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ToggleButtonListener.java b/src/main/java/com/rapidminer/gui/look/ToggleButtonListener.java index 1a476ee02..c303ae642 100644 --- a/src/main/java/com/rapidminer/gui/look/ToggleButtonListener.java +++ b/src/main/java/com/rapidminer/gui/look/ToggleButtonListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ToolbarHandlerBuffer.java b/src/main/java/com/rapidminer/gui/look/ToolbarHandlerBuffer.java index 6e39dff4b..efa898202 100644 --- a/src/main/java/com/rapidminer/gui/look/ToolbarHandlerBuffer.java +++ b/src/main/java/com/rapidminer/gui/look/ToolbarHandlerBuffer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ToolbarHandlerIcon.java b/src/main/java/com/rapidminer/gui/look/ToolbarHandlerIcon.java index 01d05d80e..59a68f819 100644 --- a/src/main/java/com/rapidminer/gui/look/ToolbarHandlerIcon.java +++ b/src/main/java/com/rapidminer/gui/look/ToolbarHandlerIcon.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/Borders.java b/src/main/java/com/rapidminer/gui/look/borders/Borders.java index 590eeb138..4e0f98abd 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/Borders.java +++ b/src/main/java/com/rapidminer/gui/look/borders/Borders.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/CheckBoxBorder.java b/src/main/java/com/rapidminer/gui/look/borders/CheckBoxBorder.java index b11750ce0..e16e52625 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/CheckBoxBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/CheckBoxBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/ComboBoxBorder.java b/src/main/java/com/rapidminer/gui/look/borders/ComboBoxBorder.java index a2fa8716e..11c6b1569 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/ComboBoxBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/ComboBoxBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/ComboBoxListCellRendererFocusBorder.java b/src/main/java/com/rapidminer/gui/look/borders/ComboBoxListCellRendererFocusBorder.java index 95167f2eb..85224fa8f 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/ComboBoxListCellRendererFocusBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/ComboBoxListCellRendererFocusBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/DummyBorder.java b/src/main/java/com/rapidminer/gui/look/borders/DummyBorder.java index bcce79bba..9c114f3f4 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/DummyBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/DummyBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/EmptyBorder.java b/src/main/java/com/rapidminer/gui/look/borders/EmptyBorder.java index 3ff67aa7d..a1abec028 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/EmptyBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/EmptyBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/EmptyButtonBorder.java b/src/main/java/com/rapidminer/gui/look/borders/EmptyButtonBorder.java index 0f1672c36..58ef3f7fe 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/EmptyButtonBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/EmptyButtonBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/EmptyComboBoxBorder.java b/src/main/java/com/rapidminer/gui/look/borders/EmptyComboBoxBorder.java index 5655ce918..f27ccb5fc 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/EmptyComboBoxBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/EmptyComboBoxBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/InternalFrameBorder.java b/src/main/java/com/rapidminer/gui/look/borders/InternalFrameBorder.java index f2cfc9dd9..5098c4fb2 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/InternalFrameBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/InternalFrameBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/MenuBarBorder.java b/src/main/java/com/rapidminer/gui/look/borders/MenuBarBorder.java index 686c8edcb..a15d4df6c 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/MenuBarBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/MenuBarBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/PopupBorder.java b/src/main/java/com/rapidminer/gui/look/borders/PopupBorder.java index b100ae59e..645fc7974 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/PopupBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/PopupBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/PopupMenuBorder.java b/src/main/java/com/rapidminer/gui/look/borders/PopupMenuBorder.java index 8d036526c..816f8d6d2 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/PopupMenuBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/PopupMenuBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/ProgressBarBorder.java b/src/main/java/com/rapidminer/gui/look/borders/ProgressBarBorder.java index 9fa844ecf..f5ddd36d3 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/ProgressBarBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/ProgressBarBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/RoundTitledBorder.java b/src/main/java/com/rapidminer/gui/look/borders/RoundTitledBorder.java index 40df91b48..deea46d72 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/RoundTitledBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/RoundTitledBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/ScrollPaneBorder.java b/src/main/java/com/rapidminer/gui/look/borders/ScrollPaneBorder.java index 62851c03e..d2bfc5ed7 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/ScrollPaneBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/ScrollPaneBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/ShadowedPopupMenuBorder.java b/src/main/java/com/rapidminer/gui/look/borders/ShadowedPopupMenuBorder.java index 325ebfdd8..545355d6c 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/ShadowedPopupMenuBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/ShadowedPopupMenuBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/SpinnerBorder.java b/src/main/java/com/rapidminer/gui/look/borders/SpinnerBorder.java index c872ccfa2..65a9bf367 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/SpinnerBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/SpinnerBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/SplitPaneBorder.java b/src/main/java/com/rapidminer/gui/look/borders/SplitPaneBorder.java index 313163ff2..dd0af5956 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/SplitPaneBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/SplitPaneBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/TableHeaderBorder.java b/src/main/java/com/rapidminer/gui/look/borders/TableHeaderBorder.java index 5c9a71d2b..28b686973 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/TableHeaderBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/TableHeaderBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/TextFieldBorder.java b/src/main/java/com/rapidminer/gui/look/borders/TextFieldBorder.java index da56e769e..45fa235da 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/TextFieldBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/TextFieldBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -23,12 +23,18 @@ import java.awt.Graphics2D; import java.awt.Insets; import java.awt.RenderingHints; - +import java.awt.Shape; +import java.awt.geom.Line2D; +import java.awt.geom.Rectangle2D; +import java.awt.geom.RoundRectangle2D; +import javax.swing.JComponent; +import javax.swing.SwingConstants; import javax.swing.border.AbstractBorder; import javax.swing.plaf.UIResource; import com.rapidminer.gui.look.Colors; import com.rapidminer.gui.look.RapidLookAndFeel; +import com.rapidminer.gui.look.RapidLookTools; /** @@ -47,17 +53,66 @@ public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) { g2.translate(x, y); - if (c.isEnabled()) { - if (c.isFocusOwner()) { - g2.setColor(Colors.TEXTFIELD_BORDER_FOCUS); + boolean darkBorder = c instanceof JComponent && Boolean.parseBoolean(String.valueOf(((JComponent) c).getClientProperty(RapidLookTools.PROPERTY_INPUT_DARK_BORDER))); + if (darkBorder) { + if (c.isEnabled()) { + if (c.isFocusOwner()) { + g2.setColor(Colors.TEXTFIELD_BORDER_DARK_FOCUS); + } else { + g2.setColor(Colors.TEXTFIELD_BORDER_DARK); + } } else { - g2.setColor(Colors.TEXTFIELD_BORDER); + g2.setColor(Colors.TEXTFIELD_BORDER_DARK_DISABLED); } } else { - g2.setColor(Colors.TEXTFIELD_BORDER_DISABLED); + if (c.isEnabled()) { + if (c.isFocusOwner()) { + g2.setColor(Colors.TEXTFIELD_BORDER_FOCUS); + } else { + g2.setColor(Colors.TEXTFIELD_BORDER); + } + } else { + g2.setColor(Colors.TEXTFIELD_BORDER_DISABLED); + } + } + + // composite field, aka part of other components directly adjacent to it? + int position = -1; + if (c instanceof JComponent) { + Object composite = ((JComponent) c).getClientProperty(RapidLookTools.PROPERTY_INPUT_TYPE_COMPOSITE); + if (composite != null) { + try { + position = Integer.valueOf(String.valueOf(composite)); + } catch (NumberFormatException e) { + // stay with -1 aka standalone + } + } + } - g2.drawRoundRect(0, 0, w - 1, h - 1, RapidLookAndFeel.CORNER_DEFAULT_RADIUS, RapidLookAndFeel.CORNER_DEFAULT_RADIUS); + int radius = RapidLookAndFeel.CORNER_DEFAULT_RADIUS; + Shape borderShape; + switch (position) { + case SwingConstants.LEFT: + borderShape = new RoundRectangle2D.Double(0, 0, w + radius, h - 1, radius, radius); + g2.draw(borderShape); + break; + case SwingConstants.CENTER: + borderShape = new Rectangle2D.Double(0, 0, w + radius, h - 1); + g2.draw(borderShape); + break; + case SwingConstants.RIGHT: + borderShape = new RoundRectangle2D.Double(-radius, 0, w + radius - 1, h - 1, radius, radius); + g2.draw(borderShape); + // special case, right field has a left border + borderShape = new Line2D.Double(0, 0, 0, h); + g2.draw(borderShape); + break; + default: + borderShape = new RoundRectangle2D.Double(0, 0, w - 1, h - 1, radius, radius); + g2.draw(borderShape); + break; + } g2.translate(-x, -y); } diff --git a/src/main/java/com/rapidminer/gui/look/borders/ToolBarBorder.java b/src/main/java/com/rapidminer/gui/look/borders/ToolBarBorder.java index b5fc3407c..4bc30312a 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/ToolBarBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/ToolBarBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/borders/ToolTipBorder.java b/src/main/java/com/rapidminer/gui/look/borders/ToolTipBorder.java index 94bc1a995..bb81bc2d7 100644 --- a/src/main/java/com/rapidminer/gui/look/borders/ToolTipBorder.java +++ b/src/main/java/com/rapidminer/gui/look/borders/ToolTipBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/AutomaticTextField.java b/src/main/java/com/rapidminer/gui/look/fc/AutomaticTextField.java index 5ab6b0e22..5beeed1fe 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/AutomaticTextField.java +++ b/src/main/java/com/rapidminer/gui/look/fc/AutomaticTextField.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/Bookmark.java b/src/main/java/com/rapidminer/gui/look/fc/Bookmark.java index 27cb32d8c..9b966b0db 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/Bookmark.java +++ b/src/main/java/com/rapidminer/gui/look/fc/Bookmark.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/BookmarkDialog.java b/src/main/java/com/rapidminer/gui/look/fc/BookmarkDialog.java index 076c10a1c..67bc53af7 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/BookmarkDialog.java +++ b/src/main/java/com/rapidminer/gui/look/fc/BookmarkDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/BookmarkIO.java b/src/main/java/com/rapidminer/gui/look/fc/BookmarkIO.java index f2af93a11..ff7c9065a 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/BookmarkIO.java +++ b/src/main/java/com/rapidminer/gui/look/fc/BookmarkIO.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/BookmarkList.java b/src/main/java/com/rapidminer/gui/look/fc/BookmarkList.java index e101a4a22..12aa62460 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/BookmarkList.java +++ b/src/main/java/com/rapidminer/gui/look/fc/BookmarkList.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/BookmarkListModel.java b/src/main/java/com/rapidminer/gui/look/fc/BookmarkListModel.java index 7f15d36d8..424e8b94a 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/BookmarkListModel.java +++ b/src/main/java/com/rapidminer/gui/look/fc/BookmarkListModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/DragSelectionThread.java b/src/main/java/com/rapidminer/gui/look/fc/DragSelectionThread.java index 2e8f4ccb1..ee42a7c10 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/DragSelectionThread.java +++ b/src/main/java/com/rapidminer/gui/look/fc/DragSelectionThread.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/FileChooserUI.java b/src/main/java/com/rapidminer/gui/look/fc/FileChooserUI.java index 0c2422694..b8343c110 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/FileChooserUI.java +++ b/src/main/java/com/rapidminer/gui/look/fc/FileChooserUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/FileList.java b/src/main/java/com/rapidminer/gui/look/fc/FileList.java index 3a2642806..56d84ab39 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/FileList.java +++ b/src/main/java/com/rapidminer/gui/look/fc/FileList.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/FileTable.java b/src/main/java/com/rapidminer/gui/look/fc/FileTable.java index 2cec55a85..796fa033b 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/FileTable.java +++ b/src/main/java/com/rapidminer/gui/look/fc/FileTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/FileTableLabel.java b/src/main/java/com/rapidminer/gui/look/fc/FileTableLabel.java index bd80dfaa6..ab727da09 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/FileTableLabel.java +++ b/src/main/java/com/rapidminer/gui/look/fc/FileTableLabel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/Item.java b/src/main/java/com/rapidminer/gui/look/fc/Item.java index 986641ea7..d5e5caab5 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/Item.java +++ b/src/main/java/com/rapidminer/gui/look/fc/Item.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/ItemPanel.java b/src/main/java/com/rapidminer/gui/look/fc/ItemPanel.java index af34f4642..33ff1bba9 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/ItemPanel.java +++ b/src/main/java/com/rapidminer/gui/look/fc/ItemPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/ItemPanelKeyboardListener.java b/src/main/java/com/rapidminer/gui/look/fc/ItemPanelKeyboardListener.java index b2ce3dec1..b6590f663 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/ItemPanelKeyboardListener.java +++ b/src/main/java/com/rapidminer/gui/look/fc/ItemPanelKeyboardListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/MultipleLinesLabel.java b/src/main/java/com/rapidminer/gui/look/fc/MultipleLinesLabel.java index 3194fa175..306ae52fb 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/MultipleLinesLabel.java +++ b/src/main/java/com/rapidminer/gui/look/fc/MultipleLinesLabel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/ThumbGeneratorThread.java b/src/main/java/com/rapidminer/gui/look/fc/ThumbGeneratorThread.java index f05bef003..cb6370b8d 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/ThumbGeneratorThread.java +++ b/src/main/java/com/rapidminer/gui/look/fc/ThumbGeneratorThread.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/fc/Tools.java b/src/main/java/com/rapidminer/gui/look/fc/Tools.java index f8a235a3e..b3e312b73 100644 --- a/src/main/java/com/rapidminer/gui/look/fc/Tools.java +++ b/src/main/java/com/rapidminer/gui/look/fc/Tools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/icons/CheckBoxIcon.java b/src/main/java/com/rapidminer/gui/look/icons/CheckBoxIcon.java index dcc6a09f4..d0d3c2102 100644 --- a/src/main/java/com/rapidminer/gui/look/icons/CheckBoxIcon.java +++ b/src/main/java/com/rapidminer/gui/look/icons/CheckBoxIcon.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/icons/CheckBoxMenuItemIcon.java b/src/main/java/com/rapidminer/gui/look/icons/CheckBoxMenuItemIcon.java index 357d84e08..6887efa33 100644 --- a/src/main/java/com/rapidminer/gui/look/icons/CheckBoxMenuItemIcon.java +++ b/src/main/java/com/rapidminer/gui/look/icons/CheckBoxMenuItemIcon.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/icons/IconFactory.java b/src/main/java/com/rapidminer/gui/look/icons/IconFactory.java index 8e7ad1756..9e7658696 100644 --- a/src/main/java/com/rapidminer/gui/look/icons/IconFactory.java +++ b/src/main/java/com/rapidminer/gui/look/icons/IconFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/icons/RadioButtonIcon.java b/src/main/java/com/rapidminer/gui/look/icons/RadioButtonIcon.java index bb357c23d..00ccae100 100644 --- a/src/main/java/com/rapidminer/gui/look/icons/RadioButtonIcon.java +++ b/src/main/java/com/rapidminer/gui/look/icons/RadioButtonIcon.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/icons/RadioButtonMenuItemIcon.java b/src/main/java/com/rapidminer/gui/look/icons/RadioButtonMenuItemIcon.java index 59c250353..b991108c8 100644 --- a/src/main/java/com/rapidminer/gui/look/icons/RadioButtonMenuItemIcon.java +++ b/src/main/java/com/rapidminer/gui/look/icons/RadioButtonMenuItemIcon.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/painters/AbstractCachedPainter.java b/src/main/java/com/rapidminer/gui/look/painters/AbstractCachedPainter.java index a8221a6a2..11340d21a 100644 --- a/src/main/java/com/rapidminer/gui/look/painters/AbstractCachedPainter.java +++ b/src/main/java/com/rapidminer/gui/look/painters/AbstractCachedPainter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/painters/Cache.java b/src/main/java/com/rapidminer/gui/look/painters/Cache.java index 5b0eaf429..83077e145 100644 --- a/src/main/java/com/rapidminer/gui/look/painters/Cache.java +++ b/src/main/java/com/rapidminer/gui/look/painters/Cache.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/painters/CachedPainter.java b/src/main/java/com/rapidminer/gui/look/painters/CachedPainter.java index ce03ad04a..65cb173be 100644 --- a/src/main/java/com/rapidminer/gui/look/painters/CachedPainter.java +++ b/src/main/java/com/rapidminer/gui/look/painters/CachedPainter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/painters/MenuBackgroundPainter.java b/src/main/java/com/rapidminer/gui/look/painters/MenuBackgroundPainter.java index 666aa37df..b6d334b3d 100644 --- a/src/main/java/com/rapidminer/gui/look/painters/MenuBackgroundPainter.java +++ b/src/main/java/com/rapidminer/gui/look/painters/MenuBackgroundPainter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/painters/MenuBarBackgroundPainter.java b/src/main/java/com/rapidminer/gui/look/painters/MenuBarBackgroundPainter.java index 23664dab0..97dbb89e9 100644 --- a/src/main/java/com/rapidminer/gui/look/painters/MenuBarBackgroundPainter.java +++ b/src/main/java/com/rapidminer/gui/look/painters/MenuBarBackgroundPainter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/painters/MenuSeparatorPainter.java b/src/main/java/com/rapidminer/gui/look/painters/MenuSeparatorPainter.java index 74e53fe48..d132db6ac 100644 --- a/src/main/java/com/rapidminer/gui/look/painters/MenuSeparatorPainter.java +++ b/src/main/java/com/rapidminer/gui/look/painters/MenuSeparatorPainter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/ButtonUI.java b/src/main/java/com/rapidminer/gui/look/ui/ButtonUI.java index db9776b1e..9635e27c1 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/ButtonUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/ButtonUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/CheckBoxMenuItemUI.java b/src/main/java/com/rapidminer/gui/look/ui/CheckBoxMenuItemUI.java index b0cbbe629..852596bb8 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/CheckBoxMenuItemUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/CheckBoxMenuItemUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/CheckBoxUI.java b/src/main/java/com/rapidminer/gui/look/ui/CheckBoxUI.java index 4b5268eac..c46f891e7 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/CheckBoxUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/CheckBoxUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/ComboBoxUI.java b/src/main/java/com/rapidminer/gui/look/ui/ComboBoxUI.java index aa89493ec..77d5ab1e7 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/ComboBoxUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/ComboBoxUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/DesktopIconUI.java b/src/main/java/com/rapidminer/gui/look/ui/DesktopIconUI.java index bcba0a168..f398d9ff4 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/DesktopIconUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/DesktopIconUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/EditorPaneUI.java b/src/main/java/com/rapidminer/gui/look/ui/EditorPaneUI.java index 7b04512f0..fc1c4dec5 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/EditorPaneUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/EditorPaneUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/ExtensionButtonUI.java b/src/main/java/com/rapidminer/gui/look/ui/ExtensionButtonUI.java index 97c2b6763..1051793cd 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/ExtensionButtonUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/ExtensionButtonUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/FormattedTextFieldUI.java b/src/main/java/com/rapidminer/gui/look/ui/FormattedTextFieldUI.java index e0f7d7763..b6e2d6c0f 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/FormattedTextFieldUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/FormattedTextFieldUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/InternalFrameUI.java b/src/main/java/com/rapidminer/gui/look/ui/InternalFrameUI.java index 3acb525a6..86938606d 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/InternalFrameUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/InternalFrameUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/LabelUI.java b/src/main/java/com/rapidminer/gui/look/ui/LabelUI.java index d6b7b0bd5..8acf4a057 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/LabelUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/LabelUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/ListUI.java b/src/main/java/com/rapidminer/gui/look/ui/ListUI.java index 3007ec1eb..335c426fd 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/ListUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/ListUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/MenuBarUI.java b/src/main/java/com/rapidminer/gui/look/ui/MenuBarUI.java index f7fd628ca..c49e028d0 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/MenuBarUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/MenuBarUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/MenuItemUI.java b/src/main/java/com/rapidminer/gui/look/ui/MenuItemUI.java index 1bacbf59d..d345cdca0 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/MenuItemUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/MenuItemUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/MenuUI.java b/src/main/java/com/rapidminer/gui/look/ui/MenuUI.java index 5fe504117..c9094ae76 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/MenuUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/MenuUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/PasswordFieldUI.java b/src/main/java/com/rapidminer/gui/look/ui/PasswordFieldUI.java index 8dd23f2b4..588649c72 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/PasswordFieldUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/PasswordFieldUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/PopupMenuSeparatorUI.java b/src/main/java/com/rapidminer/gui/look/ui/PopupMenuSeparatorUI.java index 1f1008914..cafcf0be8 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/PopupMenuSeparatorUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/PopupMenuSeparatorUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/PopupMenuUI.java b/src/main/java/com/rapidminer/gui/look/ui/PopupMenuUI.java index 962806e97..98e86b42e 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/PopupMenuUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/PopupMenuUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/ProgressBarUI.java b/src/main/java/com/rapidminer/gui/look/ui/ProgressBarUI.java index 077ae6053..66f99cbd0 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/ProgressBarUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/ProgressBarUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/RadioButtonMenuItemUI.java b/src/main/java/com/rapidminer/gui/look/ui/RadioButtonMenuItemUI.java index 792189074..28ca46f6d 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/RadioButtonMenuItemUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/RadioButtonMenuItemUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/RadioButtonUI.java b/src/main/java/com/rapidminer/gui/look/ui/RadioButtonUI.java index 42010016c..71f337ac3 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/RadioButtonUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/RadioButtonUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/RapidDockingUISettings.java b/src/main/java/com/rapidminer/gui/look/ui/RapidDockingUISettings.java index a48c14808..8ed0c9d11 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/RapidDockingUISettings.java +++ b/src/main/java/com/rapidminer/gui/look/ui/RapidDockingUISettings.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/ScrollBarUI.java b/src/main/java/com/rapidminer/gui/look/ui/ScrollBarUI.java index ec918765c..6d3710070 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/ScrollBarUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/ScrollBarUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/SliderUI.java b/src/main/java/com/rapidminer/gui/look/ui/SliderUI.java index 9a1200aee..f85fbd13a 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/SliderUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/SliderUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/SpinnerButton.java b/src/main/java/com/rapidminer/gui/look/ui/SpinnerButton.java index 63381b1cb..2db006583 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/SpinnerButton.java +++ b/src/main/java/com/rapidminer/gui/look/ui/SpinnerButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/SpinnerUI.java b/src/main/java/com/rapidminer/gui/look/ui/SpinnerUI.java index b336e74af..7d8450782 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/SpinnerUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/SpinnerUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/SplitPaneDividerUI.java b/src/main/java/com/rapidminer/gui/look/ui/SplitPaneDividerUI.java index 13bb9927b..d127f4904 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/SplitPaneDividerUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/SplitPaneDividerUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/SplitPaneUI.java b/src/main/java/com/rapidminer/gui/look/ui/SplitPaneUI.java index b251bdef3..bdcb1b7e7 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/SplitPaneUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/SplitPaneUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/TabbedPaneUI.java b/src/main/java/com/rapidminer/gui/look/ui/TabbedPaneUI.java index 5bab34336..0f8c8ca3c 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/TabbedPaneUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/TabbedPaneUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/TableHeaderUI.java b/src/main/java/com/rapidminer/gui/look/ui/TableHeaderUI.java index 4611fd044..0cf430940 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/TableHeaderUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/TableHeaderUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/TableUI.java b/src/main/java/com/rapidminer/gui/look/ui/TableUI.java index 98a1a9a7d..b3c836152 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/TableUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/TableUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/TextAreaUI.java b/src/main/java/com/rapidminer/gui/look/ui/TextAreaUI.java index 5bf1fd531..d587da83e 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/TextAreaUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/TextAreaUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/TextFieldUI.java b/src/main/java/com/rapidminer/gui/look/ui/TextFieldUI.java index 3917ea9d8..dedee7a2e 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/TextFieldUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/TextFieldUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/TextPaneUI.java b/src/main/java/com/rapidminer/gui/look/ui/TextPaneUI.java index 7de907754..314bc3a76 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/TextPaneUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/TextPaneUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/ToggleButtonUI.java b/src/main/java/com/rapidminer/gui/look/ui/ToggleButtonUI.java index 1241d85f8..1a02ca022 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/ToggleButtonUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/ToggleButtonUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/ToolBarUI.java b/src/main/java/com/rapidminer/gui/look/ui/ToolBarUI.java index 9120ac955..3a0c75b97 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/ToolBarUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/ToolBarUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/ToolbarButtonUI.java b/src/main/java/com/rapidminer/gui/look/ui/ToolbarButtonUI.java index 15005e33b..eae8a1647 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/ToolbarButtonUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/ToolbarButtonUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/look/ui/TreeUI.java b/src/main/java/com/rapidminer/gui/look/ui/TreeUI.java index 00eea80c5..e1812c019 100644 --- a/src/main/java/com/rapidminer/gui/look/ui/TreeUI.java +++ b/src/main/java/com/rapidminer/gui/look/ui/TreeUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/metadata/MetaDataRendererFactory.java b/src/main/java/com/rapidminer/gui/metadata/MetaDataRendererFactory.java index 64a71706a..62e7e60e9 100644 --- a/src/main/java/com/rapidminer/gui/metadata/MetaDataRendererFactory.java +++ b/src/main/java/com/rapidminer/gui/metadata/MetaDataRendererFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/metadata/MetaDataRendererFactoryRegistry.java b/src/main/java/com/rapidminer/gui/metadata/MetaDataRendererFactoryRegistry.java index 65b8224dc..3cf01f5b5 100644 --- a/src/main/java/com/rapidminer/gui/metadata/MetaDataRendererFactoryRegistry.java +++ b/src/main/java/com/rapidminer/gui/metadata/MetaDataRendererFactoryRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/ChartConfigurationException.java b/src/main/java/com/rapidminer/gui/new_plotter/ChartConfigurationException.java index f8f89a0b1..696e060f8 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/ChartConfigurationException.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/ChartConfigurationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/ChartCreationException.java b/src/main/java/com/rapidminer/gui/new_plotter/ChartCreationException.java index f3e98b71f..905595c05 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/ChartCreationException.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/ChartCreationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/ChartPlottimeException.java b/src/main/java/com/rapidminer/gui/new_plotter/ChartPlottimeException.java index 7aa6674be..e55bf73d7 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/ChartPlottimeException.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/ChartPlottimeException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/ConfigurationChangeResponse.java b/src/main/java/com/rapidminer/gui/new_plotter/ConfigurationChangeResponse.java index 7338edcc2..ae68978d5 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/ConfigurationChangeResponse.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/ConfigurationChangeResponse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/MasterOfDesaster.java b/src/main/java/com/rapidminer/gui/new_plotter/MasterOfDesaster.java index ecef22876..84698b91d 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/MasterOfDesaster.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/MasterOfDesaster.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/PlotConfigurationError.java b/src/main/java/com/rapidminer/gui/new_plotter/PlotConfigurationError.java index fbff8da54..1b8f87064 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/PlotConfigurationError.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/PlotConfigurationError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/PlotConfigurationQuickFix.java b/src/main/java/com/rapidminer/gui/new_plotter/PlotConfigurationQuickFix.java index 1e40af05b..a90efc6fe 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/PlotConfigurationQuickFix.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/PlotConfigurationQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AbstractDimensionConfig.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AbstractDimensionConfig.java index 9e6feae43..3281f3f0b 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AbstractDimensionConfig.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AbstractDimensionConfig.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AbstractValueGrouping.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AbstractValueGrouping.java index 00f2541e0..3a90a5d47 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AbstractValueGrouping.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AbstractValueGrouping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AggregationWindowing.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AggregationWindowing.java index 0d7f712f2..602123da0 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AggregationWindowing.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AggregationWindowing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLineConfiguration.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLineConfiguration.java index b5e2fe354..0c13f1375 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLineConfiguration.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLineConfiguration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLinesConfiguration.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLinesConfiguration.java index 30576c067..9313cf461 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLinesConfiguration.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLinesConfiguration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLinesConfigurationListener.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLinesConfigurationListener.java index b3a40cef6..8c1541013 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLinesConfigurationListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/AxisParallelLinesConfigurationListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/DataTableColumn.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/DataTableColumn.java index 78ba311b4..2aed4055d 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/DataTableColumn.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/DataTableColumn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/DefaultDimensionConfig.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/DefaultDimensionConfig.java index 5fbba0f59..aaff5e939 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/DefaultDimensionConfig.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/DefaultDimensionConfig.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/DimensionConfig.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/DimensionConfig.java index f095250b8..ec913877e 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/DimensionConfig.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/DimensionConfig.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/DistinctValueGrouping.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/DistinctValueGrouping.java index a4ec658a4..0c2009047 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/DistinctValueGrouping.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/DistinctValueGrouping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/DomainConfigManager.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/DomainConfigManager.java index 96a16396c..de48ca6db 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/DomainConfigManager.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/DomainConfigManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/EqualDataFractionGrouping.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/EqualDataFractionGrouping.java index f711609b8..dae0910ef 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/EqualDataFractionGrouping.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/EqualDataFractionGrouping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/EquidistantFixedBinCountBinning.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/EquidistantFixedBinCountBinning.java index 1f1c9b521..f2d6fc67c 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/EquidistantFixedBinCountBinning.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/EquidistantFixedBinCountBinning.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/GroupCellKey.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/GroupCellKey.java index b8b9ce960..a065061fa 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/GroupCellKey.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/GroupCellKey.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/LegendConfiguration.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/LegendConfiguration.java index bbceef26b..ed3c33476 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/LegendConfiguration.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/LegendConfiguration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/LineFormat.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/LineFormat.java index 6446c4e8a..0261319c1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/LineFormat.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/LineFormat.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/LineFormatListener.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/LineFormatListener.java index 9e106ce13..7f97851e9 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/LineFormatListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/LineFormatListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/LinkAndBrushMaster.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/LinkAndBrushMaster.java index a03544ca3..42be11576 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/LinkAndBrushMaster.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/LinkAndBrushMaster.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/PlotConfiguration.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/PlotConfiguration.java index 0e79a3545..76aeb721d 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/PlotConfiguration.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/PlotConfiguration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/RangeAxisConfig.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/RangeAxisConfig.java index eb5a853fd..a62ffd1c5 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/RangeAxisConfig.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/RangeAxisConfig.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/SeriesFormat.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/SeriesFormat.java index 3106ce5c3..497642b1d 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/SeriesFormat.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/SeriesFormat.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/ValueGrouping.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/ValueGrouping.java index e898eedd1..c32bf2efb 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/ValueGrouping.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/ValueGrouping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/ValueSource.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/ValueSource.java index e9840e3c7..e21fc7926 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/ValueSource.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/ValueSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/configuration/event/AxisParallelLinesConfigurationChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/configuration/event/AxisParallelLinesConfigurationChangeEvent.java index 651b09b6c..2650fe11a 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/configuration/event/AxisParallelLinesConfigurationChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/configuration/event/AxisParallelLinesConfigurationChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/data/DataTableColumnIndex.java b/src/main/java/com/rapidminer/gui/new_plotter/data/DataTableColumnIndex.java index 2df9f4e98..6e55b39d1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/data/DataTableColumnIndex.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/data/DataTableColumnIndex.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/data/DimensionConfigData.java b/src/main/java/com/rapidminer/gui/new_plotter/data/DimensionConfigData.java index 275a08f9a..166b919f0 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/data/DimensionConfigData.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/data/DimensionConfigData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/data/DomainConfigManagerData.java b/src/main/java/com/rapidminer/gui/new_plotter/data/DomainConfigManagerData.java index 03fad0531..c720cf658 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/data/DomainConfigManagerData.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/data/DomainConfigManagerData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellData.java b/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellData.java index 2d891cd12..1eaa4c2ba 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellData.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellKeyAndData.java b/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellKeyAndData.java index 71866223a..c2d4e848b 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellKeyAndData.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellKeyAndData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellSeriesData.java b/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellSeriesData.java index ccb4063a1..9ea7b247d 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellSeriesData.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/data/GroupCellSeriesData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/data/PlotData.java b/src/main/java/com/rapidminer/gui/new_plotter/data/PlotData.java index 02f316cd5..83db53812 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/data/PlotData.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/data/PlotData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/data/PlotInstance.java b/src/main/java/com/rapidminer/gui/new_plotter/data/PlotInstance.java index 3d5fd0350..39b9e5d59 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/data/PlotInstance.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/data/PlotInstance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/data/RangeAxisData.java b/src/main/java/com/rapidminer/gui/new_plotter/data/RangeAxisData.java index 125aa045b..3ad18f174 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/data/RangeAxisData.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/data/RangeAxisData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/data/ValueSourceData.java b/src/main/java/com/rapidminer/gui/new_plotter/data/ValueSourceData.java index f30a14cb2..058da27b7 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/data/ValueSourceData.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/data/ValueSourceData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/PlotEngine.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/PlotEngine.java index 588104eca..ad6c572dc 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/PlotEngine.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/PlotEngine.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartAxisFactory.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartAxisFactory.java index 9ac9b0279..d08a1cc85 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartAxisFactory.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartAxisFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartDatasetFactory.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartDatasetFactory.java index 0f1fed391..9b43b9748 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartDatasetFactory.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartDatasetFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartRendererFactory.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartRendererFactory.java index a630e2f5a..837f0a2d2 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartRendererFactory.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/ChartRendererFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/JFreeChartPlotEngine.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/JFreeChartPlotEngine.java index bc687841f..2726ec722 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/JFreeChartPlotEngine.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/JFreeChartPlotEngine.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/MultiAxesCrosshairOverlay.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/MultiAxesCrosshairOverlay.java index e46d12c7c..4306cff0d 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/MultiAxesCrosshairOverlay.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/MultiAxesCrosshairOverlay.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/PlotInstanceLegendCreator.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/PlotInstanceLegendCreator.java index eedc53f6f..ad127186e 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/PlotInstanceLegendCreator.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/PlotInstanceLegendCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/RenderFormatDelegate.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/RenderFormatDelegate.java index 0c66eed7d..05558c0a6 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/RenderFormatDelegate.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/RenderFormatDelegate.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/AddParallelLineAction.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/AddParallelLineAction.java index 7230b1102..fd81f459c 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/AddParallelLineAction.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/AddParallelLineAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ClearParallelLinesAction.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ClearParallelLinesAction.java index 6970f16e5..edbfd9923 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ClearParallelLinesAction.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ClearParallelLinesAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/CopyChartAction.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/CopyChartAction.java index df9452f4c..257ac1c71 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/CopyChartAction.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/CopyChartAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ManageParallelLinesAction.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ManageParallelLinesAction.java index 7a565e6d4..64cc4a913 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ManageParallelLinesAction.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ManageParallelLinesAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ManageZoomAction.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ManageZoomAction.java index 8e4c27c4b..6a7a6d9ad 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ManageZoomAction.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/actions/ManageZoomAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/dataset/ValueSourceToMultiValueCategoryDatasetAdapter.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/dataset/ValueSourceToMultiValueCategoryDatasetAdapter.java index 21404a785..8092fdf0d 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/dataset/ValueSourceToMultiValueCategoryDatasetAdapter.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/dataset/ValueSourceToMultiValueCategoryDatasetAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/ColoredBlockContainer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/ColoredBlockContainer.java index 740c5c525..579fc3ea8 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/ColoredBlockContainer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/ColoredBlockContainer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/CustomLegendGraphic.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/CustomLegendGraphic.java index 8f652b89b..592ba0a62 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/CustomLegendGraphic.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/CustomLegendGraphic.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/CustomLegendItem.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/CustomLegendItem.java index 3b969a2f8..5b5795869 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/CustomLegendItem.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/CustomLegendItem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/FlankedShapeLegendItem.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/FlankedShapeLegendItem.java index 7a9d222c1..5f3e3bd17 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/FlankedShapeLegendItem.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/FlankedShapeLegendItem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/SmartLegendTitle.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/SmartLegendTitle.java index 9038b6e14..64d1163c6 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/SmartLegendTitle.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/legend/SmartLegendTitle.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/LinkAndBrushChartPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/LinkAndBrushChartPanel.java index 83b5c2439..6b7da215b 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/LinkAndBrushChartPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/LinkAndBrushChartPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomDateAxis.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomDateAxis.java index 0f7e21630..52d589520 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomDateAxis.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomDateAxis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomLogarithmicAxis.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomLogarithmicAxis.java index 8df7396ce..104439a6c 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomLogarithmicAxis.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomLogarithmicAxis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomNumberAxis.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomNumberAxis.java index 121af7009..50de39e15 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomNumberAxis.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomNumberAxis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomSymbolAxis.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomSymbolAxis.java index 5302868fa..50bbe47e9 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomSymbolAxis.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/CustomSymbolAxis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/LinkAndBrushAxis.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/LinkAndBrushAxis.java index 5d396a9e8..686eec3ca 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/LinkAndBrushAxis.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/axis/LinkAndBrushAxis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushListener.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushListener.java index e53677aa2..e85d5187c 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushSelection.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushSelection.java index e173e591f..35c341a8d 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushSelection.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushSelectionListener.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushSelectionListener.java index 1320da233..b1d3e981e 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushSelectionListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/listener/LinkAndBrushSelectionListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushCategoryPlot.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushCategoryPlot.java index 0b6b2f73a..efb6ea1a8 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushCategoryPlot.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushCategoryPlot.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushPlot.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushPlot.java index 59b25bd00..ae6b46933 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushPlot.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushPlot.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushXYPlot.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushXYPlot.java index fd083dfbc..68ce9807e 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushXYPlot.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/link_and_brush/plots/LinkAndBrushXYPlot.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedAreaRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedAreaRenderer.java index ee065355a..0cbad15e9 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedAreaRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedAreaRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedBarRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedBarRenderer.java index a99158099..e317b5ebf 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedBarRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedBarRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedClusteredXYBarRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedClusteredXYBarRenderer.java index 42dfbd2e4..50d140656 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedClusteredXYBarRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedClusteredXYBarRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedDeviationRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedDeviationRenderer.java index 4e379e04d..0ef5416fb 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedDeviationRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedDeviationRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedLineAndShapeRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedLineAndShapeRenderer.java index 37ad4d93e..147deeba0 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedLineAndShapeRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedLineAndShapeRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedRenderer.java index 0c6845fb5..b8c5340c2 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedScatterRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedScatterRenderer.java index 8e9c7db35..2f909160f 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedScatterRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedScatterRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedAreaRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedAreaRenderer.java index ae9786f33..703418b2e 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedAreaRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedAreaRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedBarRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedBarRenderer.java index dd5daf201..739c75a46 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedBarRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedBarRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedXYAreaRenderer2.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedXYAreaRenderer2.java index 922873d02..210928bb6 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedXYAreaRenderer2.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedXYAreaRenderer2.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedXYBarRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedXYBarRenderer.java index 670170e63..91587f43d 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedXYBarRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStackedXYBarRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStatisticalBarRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStatisticalBarRenderer.java index ef7931dbe..59fc2bcc8 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStatisticalBarRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStatisticalBarRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStatisticalLineAndShapeRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStatisticalLineAndShapeRenderer.java index ff0d6801a..635daff24 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStatisticalLineAndShapeRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedStatisticalLineAndShapeRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYAreaRenderer2.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYAreaRenderer2.java index 46c542faa..a868ee4a6 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYAreaRenderer2.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYAreaRenderer2.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYDifferenceRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYDifferenceRenderer.java index 403b8a47d..af550f71f 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYDifferenceRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYDifferenceRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYErrorRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYErrorRenderer.java index 9de1e3d27..8f04f1e90 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYErrorRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYErrorRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYLineAndShapeRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYLineAndShapeRenderer.java index 7340688de..49778e171 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYLineAndShapeRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/engine/jfreechart/renderer/FormattedXYLineAndShapeRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/event/AxisParallelLineConfigurationChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/event/AxisParallelLineConfigurationChangeEvent.java index 7fcca5b04..9135b3f1e 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/event/AxisParallelLineConfigurationChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/event/AxisParallelLineConfigurationChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/AbstractConfigurationPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/AbstractConfigurationPanel.java index 361f0bb48..e7141ee20 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/AbstractConfigurationPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/AbstractConfigurationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/AbstractTreeSelectionDependentPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/AbstractTreeSelectionDependentPanel.java index e66c2fbb4..c4d4501c8 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/AbstractTreeSelectionDependentPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/AbstractTreeSelectionDependentPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/AreaAndBarChartConfigurationPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/AreaAndBarChartConfigurationPanel.java index a033cd923..12637e2e0 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/AreaAndBarChartConfigurationPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/AreaAndBarChartConfigurationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/AttributeDropTextField.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/AttributeDropTextField.java index 980a7197b..c0588a103 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/AttributeDropTextField.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/AttributeDropTextField.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/AttributeSelectionDialog.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/AttributeSelectionDialog.java index 1d1ab578e..546132d31 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/AttributeSelectionDialog.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/AttributeSelectionDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/AxisConfigurationContainer.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/AxisConfigurationContainer.java index bb9d32207..b7e963483 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/AxisConfigurationContainer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/AxisConfigurationContainer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/ChartConfigurationPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/ChartConfigurationPanel.java index 73594163d..b3fdebddb 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/ChartConfigurationPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/ChartConfigurationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/ChartTitleConfigurationContainer.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/ChartTitleConfigurationContainer.java index dbc12f914..3c65b6de4 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/ChartTitleConfigurationContainer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/ChartTitleConfigurationContainer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/ColorSchemeDialog.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/ColorSchemeDialog.java index dd3c9e299..6056fa37f 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/ColorSchemeDialog.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/ColorSchemeDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/DimensionConfigPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/DimensionConfigPanel.java index 4aef09a68..35a8643b1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/DimensionConfigPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/DimensionConfigPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/FontDialog.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/FontDialog.java index 5c52e7ca8..8181ee877 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/FontDialog.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/FontDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/GlobalConfigurationPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/GlobalConfigurationPanel.java index 006ecb8b2..72428e3cc 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/GlobalConfigurationPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/GlobalConfigurationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/GroupingConfigurationPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/GroupingConfigurationPanel.java index e048f4a58..ea12a7fb1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/GroupingConfigurationPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/GroupingConfigurationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/LegendConfigurationPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/LegendConfigurationPanel.java index 875ff3618..2c5737fe9 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/LegendConfigurationPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/LegendConfigurationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/LineChartConfigurationPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/LineChartConfigurationPanel.java index f0a4d4e5e..7d94c1ef9 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/LineChartConfigurationPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/LineChartConfigurationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/PlotConfigurationTree.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/PlotConfigurationTree.java index a714f2ca4..ef445f5a1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/PlotConfigurationTree.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/PlotConfigurationTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/PlotConfigurationTreeModel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/PlotConfigurationTreeModel.java index 6734dff82..0f35311e7 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/PlotConfigurationTreeModel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/PlotConfigurationTreeModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/RangeAxisConfigPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/RangeAxisConfigPanel.java index 5e3aa5f71..57b141681 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/RangeAxisConfigPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/RangeAxisConfigPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/SeriesFormatConfigurationPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/SeriesFormatConfigurationPanel.java index 6e4a77188..7613f7b74 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/SeriesFormatConfigurationPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/SeriesFormatConfigurationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/ValueSourceConfigurationPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/ValueSourceConfigurationPanel.java index ee1c1b7fd..684040014 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/ValueSourceConfigurationPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/ValueSourceConfigurationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/WindowingConfigurationContainer.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/WindowingConfigurationContainer.java index 00b9d868a..9c697cfe1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/WindowingConfigurationContainer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/WindowingConfigurationContainer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorListCellRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorListCellRenderer.java index 802b3e479..d471a2874 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorListCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorListCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorRGBComboBoxCellRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorRGBComboBoxCellRenderer.java index fe9140dbf..d43ccf6d0 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorRGBComboBoxCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorRGBComboBoxCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorSchemeComboBoxRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorSchemeComboBoxRenderer.java index 39bc5362d..65483f6be 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorSchemeComboBoxRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ColorSchemeComboBoxRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ComboSeparatorsRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ComboSeparatorsRenderer.java index 9a2aa3f99..a66cfe318 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ComboSeparatorsRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/ComboSeparatorsRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/DataTableColumnListCellRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/DataTableColumnListCellRenderer.java index 73760dee4..3e27a8eaa 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/DataTableColumnListCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/DataTableColumnListCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/EnumComboBoxCellRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/EnumComboBoxCellRenderer.java index a7d4eb0c7..f18854214 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/EnumComboBoxCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/EnumComboBoxCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/PlotConfigurationTreeCellRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/PlotConfigurationTreeCellRenderer.java index 09c2c96bc..93eebd9c1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/PlotConfigurationTreeCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/PlotConfigurationTreeCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/TreeNodeColors.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/TreeNodeColors.java index 1a8bb2512..226c3cf35 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/TreeNodeColors.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/cellrenderer/TreeNodeColors.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/AddParallelLineDialog.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/AddParallelLineDialog.java index da12394b0..e5d3c9ac8 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/AddParallelLineDialog.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/AddParallelLineDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/EditParallelLineDialog.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/EditParallelLineDialog.java index ed91ab6ad..b43599a77 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/EditParallelLineDialog.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/EditParallelLineDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/ManageParallelLinesDialog.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/ManageParallelLinesDialog.java index 7bddfa72a..c766aff5c 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/ManageParallelLinesDialog.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/ManageParallelLinesDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/ManageZoomDialog.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/ManageZoomDialog.java index a804d271e..01ec2a8d2 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/ManageZoomDialog.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/dialog/ManageZoomDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnCollection.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnCollection.java index 374111319..f81e9b530 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnCollection.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnCollection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnCollectionTransferable.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnCollectionTransferable.java index 6f6b1583f..10e89923b 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnCollectionTransferable.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnCollectionTransferable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnDropTextFieldTransferHandler.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnDropTextFieldTransferHandler.java index d0e09f039..1ceede2cc 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnDropTextFieldTransferHandler.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnDropTextFieldTransferHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnListTransferHandler.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnListTransferHandler.java index 55008a57d..b00df3709 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnListTransferHandler.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/DataTableColumnListTransferHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/PlotConfigurationTreeTransferHandler.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/PlotConfigurationTreeTransferHandler.java index 783278958..792d00aa0 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/PlotConfigurationTreeTransferHandler.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/dnd/PlotConfigurationTreeTransferHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/AbstractGroupingCardPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/AbstractGroupingCardPanel.java index 44c52b9ae..0269217fc 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/AbstractGroupingCardPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/AbstractGroupingCardPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/DistinctValueGroupingCardPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/DistinctValueGroupingCardPanel.java index 4f24423f2..1c292a8fa 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/DistinctValueGroupingCardPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/DistinctValueGroupingCardPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/EqualDataFractionCardPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/EqualDataFractionCardPanel.java index 339d231dc..ff9101078 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/EqualDataFractionCardPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/EqualDataFractionCardPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/EquidistantFixedBinCountCardPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/EquidistantFixedBinCountCardPanel.java index ac4ab121f..40bc896a2 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/EquidistantFixedBinCountCardPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/groupingpanel/EquidistantFixedBinCountCardPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupAction.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupAction.java index 4f5107cf6..18353ae7b 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupAction.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupComponentListener.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupComponentListener.java index c85c7d8c7..a3b8e5c20 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupComponentListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupComponentListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupPanel.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupPanel.java index e4441bae8..2ba7ea3ae 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupPanel.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/popup/PopupPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/DimensionConfigTreeNode.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/DimensionConfigTreeNode.java index 146de5b02..e01d2a6fb 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/DimensionConfigTreeNode.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/DimensionConfigTreeNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/PlotConfigurationTreeNode.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/PlotConfigurationTreeNode.java index d4da2fd71..8c6275c6c 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/PlotConfigurationTreeNode.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/PlotConfigurationTreeNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/RangeAxisConfigTreeNode.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/RangeAxisConfigTreeNode.java index bb123290d..b7c47fbe9 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/RangeAxisConfigTreeNode.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/RangeAxisConfigTreeNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/ValueSourceTreeNode.java b/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/ValueSourceTreeNode.java index 839ea3a36..e4fe56264 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/ValueSourceTreeNode.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/gui/treenodes/ValueSourceTreeNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/integration/ExpertDataTableRenderer.java b/src/main/java/com/rapidminer/gui/new_plotter/integration/ExpertDataTableRenderer.java index 91adb9c81..685627bc4 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/integration/ExpertDataTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/integration/ExpertDataTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/integration/PlotConfigurationHistory.java b/src/main/java/com/rapidminer/gui/new_plotter/integration/PlotConfigurationHistory.java index cdb857a3f..04235c0fd 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/integration/PlotConfigurationHistory.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/integration/PlotConfigurationHistory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/AggregationWindowingListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/AggregationWindowingListener.java index 99b3c5839..9d53a7282 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/AggregationWindowingListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/AggregationWindowingListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/AxisParallelLineConfigurationListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/AxisParallelLineConfigurationListener.java index 073fd70b2..ab7636914 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/AxisParallelLineConfigurationListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/AxisParallelLineConfigurationListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/DimensionConfigListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/DimensionConfigListener.java index 8f3644d25..7aec0ea1a 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/DimensionConfigListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/DimensionConfigListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/JFreeChartPlotEngineListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/JFreeChartPlotEngineListener.java index fb07e17d1..5be52ae80 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/JFreeChartPlotEngineListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/JFreeChartPlotEngineListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/LegendConfigurationListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/LegendConfigurationListener.java index 063cf5113..789057ec6 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/LegendConfigurationListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/LegendConfigurationListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/MasterOfDesasterListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/MasterOfDesasterListener.java index dd3bd62f9..38f3ba5f0 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/MasterOfDesasterListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/MasterOfDesasterListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotConfigurationListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotConfigurationListener.java index 6ed14ab6a..fe676beac 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotConfigurationListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotConfigurationListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotConfigurationProcessingListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotConfigurationProcessingListener.java index ece02680a..219037d9c 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotConfigurationProcessingListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotConfigurationProcessingListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotInstanceChangedListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotInstanceChangedListener.java index da8d7d0bd..ad78960f1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotInstanceChangedListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/PlotInstanceChangedListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/RangeAxisConfigListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/RangeAxisConfigListener.java index f6e18ce66..32b77b5e5 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/RangeAxisConfigListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/RangeAxisConfigListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/RenderFormatDelegateChangeListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/RenderFormatDelegateChangeListener.java index 89561ed4a..cc9add409 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/RenderFormatDelegateChangeListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/RenderFormatDelegateChangeListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/SeriesFormatListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/SeriesFormatListener.java index ecf2b2457..5caf23670 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/SeriesFormatListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/SeriesFormatListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueGroupingListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueGroupingListener.java index 14b1df5da..1f1ba6c53 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueGroupingListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueGroupingListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueRangeListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueRangeListener.java index e1ccd23e2..c4ea7aa9e 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueRangeListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueRangeListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueSourceListener.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueSourceListener.java index 669a3dea8..96cb48a5e 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueSourceListener.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/ValueSourceListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ConfigurationChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ConfigurationChangeEvent.java index 7a862fb81..a50f38cc1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ConfigurationChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ConfigurationChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/DimensionConfigChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/DimensionConfigChangeEvent.java index 4ca753241..edc420fd0 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/DimensionConfigChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/DimensionConfigChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/LegendConfigurationChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/LegendConfigurationChangeEvent.java index 9f82475bf..479bcb006 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/LegendConfigurationChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/LegendConfigurationChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/LineFormatChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/LineFormatChangeEvent.java index f9861a9d2..a33fb3b88 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/LineFormatChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/LineFormatChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/PlotConfigurationChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/PlotConfigurationChangeEvent.java index 659861574..95c9ccb3e 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/PlotConfigurationChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/PlotConfigurationChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/RangeAxisConfigChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/RangeAxisConfigChangeEvent.java index ac4b88fc0..5a6171600 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/RangeAxisConfigChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/RangeAxisConfigChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/SeriesFormatChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/SeriesFormatChangeEvent.java index 6b6ac5f96..0a2790cdc 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/SeriesFormatChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/SeriesFormatChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueGroupingChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueGroupingChangeEvent.java index 303d1fe82..f384d37cb 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueGroupingChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueGroupingChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueRangeChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueRangeChangeEvent.java index f6157357c..b2f5fc9ad 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueRangeChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueRangeChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueSourceChangeEvent.java b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueSourceChangeEvent.java index c95f94599..ef79f87d4 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueSourceChangeEvent.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/listener/events/ValueSourceChangeEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/templates/style/ColorRGB.java b/src/main/java/com/rapidminer/gui/new_plotter/templates/style/ColorRGB.java index 56b29d79c..2677f2d55 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/templates/style/ColorRGB.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/templates/style/ColorRGB.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/templates/style/ColorScheme.java b/src/main/java/com/rapidminer/gui/new_plotter/templates/style/ColorScheme.java index c1fbf2f3d..fbe6b4250 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/templates/style/ColorScheme.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/templates/style/ColorScheme.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/templates/style/PlotterStyleProvider.java b/src/main/java/com/rapidminer/gui/new_plotter/templates/style/PlotterStyleProvider.java index 8e1bdf3a9..49d66cc99 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/templates/style/PlotterStyleProvider.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/templates/style/PlotterStyleProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/AbstractValueRange.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/AbstractValueRange.java index 83ae1a30b..c62923a0e 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/AbstractValueRange.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/AbstractValueRange.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/AggregatedValueRange.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/AggregatedValueRange.java index 8efc169ff..c0d5c13b3 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/AggregatedValueRange.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/AggregatedValueRange.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/CategoricalColorProvider.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/CategoricalColorProvider.java index d81c71e9c..bf67b16a2 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/CategoricalColorProvider.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/CategoricalColorProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/CategoricalSizeProvider.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/CategoricalSizeProvider.java index d67698944..f1590c9db 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/CategoricalSizeProvider.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/CategoricalSizeProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/ColorProvider.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/ColorProvider.java index a299a444e..583da0446 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/ColorProvider.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/ColorProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/ContinuousColorProvider.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/ContinuousColorProvider.java index 31a78e38a..279c8bac0 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/ContinuousColorProvider.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/ContinuousColorProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/ContinuousSizeProvider.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/ContinuousSizeProvider.java index 88178b922..f5731c949 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/ContinuousSizeProvider.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/ContinuousSizeProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/DataStructureUtils.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/DataStructureUtils.java index 058c7bf33..95c7aafb1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/DataStructureUtils.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/DataStructureUtils.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/DataTransformation.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/DataTransformation.java index 3803d68aa..15ec6dc1b 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/DataTransformation.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/DataTransformation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/ListUtility.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/ListUtility.java index a200b4aaa..c0e863607 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/ListUtility.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/ListUtility.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/NumericalValueRange.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/NumericalValueRange.java index af4cc5231..4bfd4500f 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/NumericalValueRange.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/NumericalValueRange.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/SayNoValueRange.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/SayNoValueRange.java index 55c8040c1..a6fb65c7d 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/SayNoValueRange.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/SayNoValueRange.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/ShapeProvider.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/ShapeProvider.java index c8883bb10..ae39c2f62 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/ShapeProvider.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/ShapeProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/SingleValueValueRange.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/SingleValueValueRange.java index 76b149fc9..1f3bac7bf 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/SingleValueValueRange.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/SingleValueValueRange.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/SizeProvider.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/SizeProvider.java index 46d17e58a..eccedfad1 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/SizeProvider.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/SizeProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/SortProvider.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/SortProvider.java index 005beae65..7f4627e5b 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/SortProvider.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/SortProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/new_plotter/utility/ValueRange.java b/src/main/java/com/rapidminer/gui/new_plotter/utility/ValueRange.java index 2597b4096..f1267b947 100644 --- a/src/main/java/com/rapidminer/gui/new_plotter/utility/ValueRange.java +++ b/src/main/java/com/rapidminer/gui/new_plotter/utility/ValueRange.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatormenu/NewOperatorMenu.java b/src/main/java/com/rapidminer/gui/operatormenu/NewOperatorMenu.java index 115e578bf..866e55249 100644 --- a/src/main/java/com/rapidminer/gui/operatormenu/NewOperatorMenu.java +++ b/src/main/java/com/rapidminer/gui/operatormenu/NewOperatorMenu.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatormenu/OperatorGroupMenu.java b/src/main/java/com/rapidminer/gui/operatormenu/OperatorGroupMenu.java index 2fc0ac896..2e9bfd634 100644 --- a/src/main/java/com/rapidminer/gui/operatormenu/OperatorGroupMenu.java +++ b/src/main/java/com/rapidminer/gui/operatormenu/OperatorGroupMenu.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatormenu/OperatorMenu.java b/src/main/java/com/rapidminer/gui/operatormenu/OperatorMenu.java index e2682ffa3..9930c4421 100644 --- a/src/main/java/com/rapidminer/gui/operatormenu/OperatorMenu.java +++ b/src/main/java/com/rapidminer/gui/operatormenu/OperatorMenu.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatormenu/ReplaceOperatorMenu.java b/src/main/java/com/rapidminer/gui/operatormenu/ReplaceOperatorMenu.java index 0535f0ece..716fd723c 100644 --- a/src/main/java/com/rapidminer/gui/operatormenu/ReplaceOperatorMenu.java +++ b/src/main/java/com/rapidminer/gui/operatormenu/ReplaceOperatorMenu.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/OperatorTree.java b/src/main/java/com/rapidminer/gui/operatortree/OperatorTree.java index 8063846fe..84240699a 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/OperatorTree.java +++ b/src/main/java/com/rapidminer/gui/operatortree/OperatorTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/OperatorTreeCellRenderer.java b/src/main/java/com/rapidminer/gui/operatortree/OperatorTreeCellRenderer.java index 5947d7947..497e05e0f 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/OperatorTreeCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/operatortree/OperatorTreeCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/OperatorTreePanel.java b/src/main/java/com/rapidminer/gui/operatortree/OperatorTreePanel.java index 80c2ebccc..aa4d93298 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/OperatorTreePanel.java +++ b/src/main/java/com/rapidminer/gui/operatortree/OperatorTreePanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/ProcessTreeModel.java b/src/main/java/com/rapidminer/gui/operatortree/ProcessTreeModel.java index 0f1e53eee..1c69e9361 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/ProcessTreeModel.java +++ b/src/main/java/com/rapidminer/gui/operatortree/ProcessTreeModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/actions/ActionUtil.java b/src/main/java/com/rapidminer/gui/operatortree/actions/ActionUtil.java index 1cd736325..e2c0bfd51 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/actions/ActionUtil.java +++ b/src/main/java/com/rapidminer/gui/operatortree/actions/ActionUtil.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/actions/CollapseAllAction.java b/src/main/java/com/rapidminer/gui/operatortree/actions/CollapseAllAction.java index 95bce9af2..2c6bfa6b1 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/actions/CollapseAllAction.java +++ b/src/main/java/com/rapidminer/gui/operatortree/actions/CollapseAllAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/actions/CutCopyPasteDeleteAction.java b/src/main/java/com/rapidminer/gui/operatortree/actions/CutCopyPasteDeleteAction.java index 001aec486..235e245c2 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/actions/CutCopyPasteDeleteAction.java +++ b/src/main/java/com/rapidminer/gui/operatortree/actions/CutCopyPasteDeleteAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/actions/DeleteOperatorAction.java b/src/main/java/com/rapidminer/gui/operatortree/actions/DeleteOperatorAction.java index e836ecbfe..e96fe1601 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/actions/DeleteOperatorAction.java +++ b/src/main/java/com/rapidminer/gui/operatortree/actions/DeleteOperatorAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/actions/ExpandAllAction.java b/src/main/java/com/rapidminer/gui/operatortree/actions/ExpandAllAction.java index cdf9b7d32..86037a1db 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/actions/ExpandAllAction.java +++ b/src/main/java/com/rapidminer/gui/operatortree/actions/ExpandAllAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/actions/InfoOperatorAction.java b/src/main/java/com/rapidminer/gui/operatortree/actions/InfoOperatorAction.java index 2953072c9..519b9dcd5 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/actions/InfoOperatorAction.java +++ b/src/main/java/com/rapidminer/gui/operatortree/actions/InfoOperatorAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleActivationItem.java b/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleActivationItem.java index c71a46bd2..917733064 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleActivationItem.java +++ b/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleActivationItem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleAllBreakpointsItem.java b/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleAllBreakpointsItem.java index 3f6c5b22e..8b05303d3 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleAllBreakpointsItem.java +++ b/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleAllBreakpointsItem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,14 +18,15 @@ */ package com.rapidminer.gui.operatortree.actions; +import java.awt.event.ActionEvent; + import com.rapidminer.BreakpointListener; +import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.actions.Actions; import com.rapidminer.gui.actions.ToggleAction; import com.rapidminer.operator.Operator; import com.rapidminer.operator.OperatorChain; -import java.awt.event.ActionEvent; - /** * Start the corresponding action. @@ -36,16 +37,22 @@ public class ToggleAllBreakpointsItem extends ToggleAction { private static final long serialVersionUID = 1727841552148351670L; - private final Actions actions; - public ToggleAllBreakpointsItem(final Actions actions) { + public ToggleAllBreakpointsItem() { super(true, "toggle_all_breakpoints"); - this.actions = actions; + } + + /** + * @deprecated use {@link #ToggleAllBreakpointsItem()} instead + */ + @Deprecated + public ToggleAllBreakpointsItem(final Actions actions) { + this(); } @Override public void actionToggled(ActionEvent e) { - Operator rootOp = actions.getRootOperator(); + Operator rootOp = RapidMinerGUI.getMainFrame().getActions().getRootOperator(); if (rootOp != null) { for (Operator op : ((OperatorChain) rootOp).getAllInnerOperators()) { op.setBreakpoint(BreakpointListener.BREAKPOINT_BEFORE, false); diff --git a/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleBreakpointItem.java b/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleBreakpointItem.java index 20a1fedbd..a6b6d4d51 100644 --- a/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleBreakpointItem.java +++ b/src/main/java/com/rapidminer/gui/operatortree/actions/ToggleBreakpointItem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/AndrewsCurves.java b/src/main/java/com/rapidminer/gui/plotter/AndrewsCurves.java index 5a3394b44..2380a75a3 100644 --- a/src/main/java/com/rapidminer/gui/plotter/AndrewsCurves.java +++ b/src/main/java/com/rapidminer/gui/plotter/AndrewsCurves.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/AxisNameResolver.java b/src/main/java/com/rapidminer/gui/plotter/AxisNameResolver.java index c97b4184a..2c353897c 100644 --- a/src/main/java/com/rapidminer/gui/plotter/AxisNameResolver.java +++ b/src/main/java/com/rapidminer/gui/plotter/AxisNameResolver.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/AxisTransformation.java b/src/main/java/com/rapidminer/gui/plotter/AxisTransformation.java index 26da1f557..82345ab3d 100644 --- a/src/main/java/com/rapidminer/gui/plotter/AxisTransformation.java +++ b/src/main/java/com/rapidminer/gui/plotter/AxisTransformation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/AxisTransformationId.java b/src/main/java/com/rapidminer/gui/plotter/AxisTransformationId.java index a1e7cb514..26b69ce67 100644 --- a/src/main/java/com/rapidminer/gui/plotter/AxisTransformationId.java +++ b/src/main/java/com/rapidminer/gui/plotter/AxisTransformationId.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/AxisTransformationLog.java b/src/main/java/com/rapidminer/gui/plotter/AxisTransformationLog.java index c6c2ffc3d..73af80af6 100644 --- a/src/main/java/com/rapidminer/gui/plotter/AxisTransformationLog.java +++ b/src/main/java/com/rapidminer/gui/plotter/AxisTransformationLog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/BoundDiagram.java b/src/main/java/com/rapidminer/gui/plotter/BoundDiagram.java index 0658daf25..c97b63d33 100644 --- a/src/main/java/com/rapidminer/gui/plotter/BoundDiagram.java +++ b/src/main/java/com/rapidminer/gui/plotter/BoundDiagram.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/ColorPlotterPoint.java b/src/main/java/com/rapidminer/gui/plotter/ColorPlotterPoint.java index 436270b35..c7512471f 100644 --- a/src/main/java/com/rapidminer/gui/plotter/ColorPlotterPoint.java +++ b/src/main/java/com/rapidminer/gui/plotter/ColorPlotterPoint.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/ColorProvider.java b/src/main/java/com/rapidminer/gui/plotter/ColorProvider.java index 6bfd5dc93..5adc4bd36 100644 --- a/src/main/java/com/rapidminer/gui/plotter/ColorProvider.java +++ b/src/main/java/com/rapidminer/gui/plotter/ColorProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/ColorQuartileMatrixPlotter.java b/src/main/java/com/rapidminer/gui/plotter/ColorQuartileMatrixPlotter.java index 5f69ed412..4b9bb9806 100644 --- a/src/main/java/com/rapidminer/gui/plotter/ColorQuartileMatrixPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/ColorQuartileMatrixPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/ColorQuartilePlotter.java b/src/main/java/com/rapidminer/gui/plotter/ColorQuartilePlotter.java index 743320022..74db89331 100644 --- a/src/main/java/com/rapidminer/gui/plotter/ColorQuartilePlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/ColorQuartilePlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/CoordinateTransformation.java b/src/main/java/com/rapidminer/gui/plotter/CoordinateTransformation.java index 4c12fb60c..a9604fc5a 100644 --- a/src/main/java/com/rapidminer/gui/plotter/CoordinateTransformation.java +++ b/src/main/java/com/rapidminer/gui/plotter/CoordinateTransformation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/CoordinatesHandler.java b/src/main/java/com/rapidminer/gui/plotter/CoordinatesHandler.java index f97bcd992..e577baa16 100644 --- a/src/main/java/com/rapidminer/gui/plotter/CoordinatesHandler.java +++ b/src/main/java/com/rapidminer/gui/plotter/CoordinatesHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/DensityPlotter.java b/src/main/java/com/rapidminer/gui/plotter/DensityPlotter.java index cdd48a4d9..c8a263954 100644 --- a/src/main/java/com/rapidminer/gui/plotter/DensityPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/DensityPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/ExamplePlotterPoint.java b/src/main/java/com/rapidminer/gui/plotter/ExamplePlotterPoint.java index 81931ba85..43fd0dbb7 100644 --- a/src/main/java/com/rapidminer/gui/plotter/ExamplePlotterPoint.java +++ b/src/main/java/com/rapidminer/gui/plotter/ExamplePlotterPoint.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/GridVizPlotter.java b/src/main/java/com/rapidminer/gui/plotter/GridVizPlotter.java index f069af21f..5c08f0580 100644 --- a/src/main/java/com/rapidminer/gui/plotter/GridVizPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/GridVizPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/HeuristicPlotterConfigurator.java b/src/main/java/com/rapidminer/gui/plotter/HeuristicPlotterConfigurator.java index 303070574..c73b7df79 100644 --- a/src/main/java/com/rapidminer/gui/plotter/HeuristicPlotterConfigurator.java +++ b/src/main/java/com/rapidminer/gui/plotter/HeuristicPlotterConfigurator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/HintonDiagram.java b/src/main/java/com/rapidminer/gui/plotter/HintonDiagram.java index 1c047ebb9..02315878a 100644 --- a/src/main/java/com/rapidminer/gui/plotter/HintonDiagram.java +++ b/src/main/java/com/rapidminer/gui/plotter/HintonDiagram.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/LabelRotatingPlotterAdapter.java b/src/main/java/com/rapidminer/gui/plotter/LabelRotatingPlotterAdapter.java index bc09efbf9..b27a6f326 100644 --- a/src/main/java/com/rapidminer/gui/plotter/LabelRotatingPlotterAdapter.java +++ b/src/main/java/com/rapidminer/gui/plotter/LabelRotatingPlotterAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/LocalNormalizationPlotterAdapter.java b/src/main/java/com/rapidminer/gui/plotter/LocalNormalizationPlotterAdapter.java index 566170db8..db1e21043 100644 --- a/src/main/java/com/rapidminer/gui/plotter/LocalNormalizationPlotterAdapter.java +++ b/src/main/java/com/rapidminer/gui/plotter/LocalNormalizationPlotterAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/NameValue.java b/src/main/java/com/rapidminer/gui/plotter/NameValue.java index 2381c9733..58ce0662e 100644 --- a/src/main/java/com/rapidminer/gui/plotter/NameValue.java +++ b/src/main/java/com/rapidminer/gui/plotter/NameValue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/NullCoordinateTransformation.java b/src/main/java/com/rapidminer/gui/plotter/NullCoordinateTransformation.java index 96a1fe188..d156b7039 100644 --- a/src/main/java/com/rapidminer/gui/plotter/NullCoordinateTransformation.java +++ b/src/main/java/com/rapidminer/gui/plotter/NullCoordinateTransformation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/ParallelPlotter.java b/src/main/java/com/rapidminer/gui/plotter/ParallelPlotter.java index e2b87e472..18e6f3ae0 100644 --- a/src/main/java/com/rapidminer/gui/plotter/ParallelPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/ParallelPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/Plot.java b/src/main/java/com/rapidminer/gui/plotter/Plot.java index 629d21bbf..5eff583d9 100644 --- a/src/main/java/com/rapidminer/gui/plotter/Plot.java +++ b/src/main/java/com/rapidminer/gui/plotter/Plot.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/Plotter.java b/src/main/java/com/rapidminer/gui/plotter/Plotter.java index 96ae67bc3..24fd20298 100644 --- a/src/main/java/com/rapidminer/gui/plotter/Plotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/Plotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/PlotterAdapter.java b/src/main/java/com/rapidminer/gui/plotter/PlotterAdapter.java index 062d1a1e5..b04f329b0 100644 --- a/src/main/java/com/rapidminer/gui/plotter/PlotterAdapter.java +++ b/src/main/java/com/rapidminer/gui/plotter/PlotterAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/PlotterChooser.java b/src/main/java/com/rapidminer/gui/plotter/PlotterChooser.java index 788b10ef3..2cafb505a 100644 --- a/src/main/java/com/rapidminer/gui/plotter/PlotterChooser.java +++ b/src/main/java/com/rapidminer/gui/plotter/PlotterChooser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/PlotterConfigurationModel.java b/src/main/java/com/rapidminer/gui/plotter/PlotterConfigurationModel.java index 31133a608..c2cc8012b 100644 --- a/src/main/java/com/rapidminer/gui/plotter/PlotterConfigurationModel.java +++ b/src/main/java/com/rapidminer/gui/plotter/PlotterConfigurationModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/PlotterConfigurationSettings.java b/src/main/java/com/rapidminer/gui/plotter/PlotterConfigurationSettings.java index 76016cedc..c9af1180e 100644 --- a/src/main/java/com/rapidminer/gui/plotter/PlotterConfigurationSettings.java +++ b/src/main/java/com/rapidminer/gui/plotter/PlotterConfigurationSettings.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/PlotterControlPanel.java b/src/main/java/com/rapidminer/gui/plotter/PlotterControlPanel.java index 7a0e5f71d..91dc7dd10 100644 --- a/src/main/java/com/rapidminer/gui/plotter/PlotterControlPanel.java +++ b/src/main/java/com/rapidminer/gui/plotter/PlotterControlPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/PlotterLegend.java b/src/main/java/com/rapidminer/gui/plotter/PlotterLegend.java index ec43f99b0..58464b95b 100644 --- a/src/main/java/com/rapidminer/gui/plotter/PlotterLegend.java +++ b/src/main/java/com/rapidminer/gui/plotter/PlotterLegend.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/PlotterMouseHandler.java b/src/main/java/com/rapidminer/gui/plotter/PlotterMouseHandler.java index d0ae8e721..fa487c088 100644 --- a/src/main/java/com/rapidminer/gui/plotter/PlotterMouseHandler.java +++ b/src/main/java/com/rapidminer/gui/plotter/PlotterMouseHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/PlotterPanel.java b/src/main/java/com/rapidminer/gui/plotter/PlotterPanel.java index b1b59a846..53fb156e9 100644 --- a/src/main/java/com/rapidminer/gui/plotter/PlotterPanel.java +++ b/src/main/java/com/rapidminer/gui/plotter/PlotterPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/PlotterPoint.java b/src/main/java/com/rapidminer/gui/plotter/PlotterPoint.java index 7c0aaf578..82ce02701 100644 --- a/src/main/java/com/rapidminer/gui/plotter/PlotterPoint.java +++ b/src/main/java/com/rapidminer/gui/plotter/PlotterPoint.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/Quartile.java b/src/main/java/com/rapidminer/gui/plotter/Quartile.java index fc4e881c2..26ff0af63 100644 --- a/src/main/java/com/rapidminer/gui/plotter/Quartile.java +++ b/src/main/java/com/rapidminer/gui/plotter/Quartile.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/QuartilePlotter.java b/src/main/java/com/rapidminer/gui/plotter/QuartilePlotter.java index 2275762a9..64e15219b 100644 --- a/src/main/java/com/rapidminer/gui/plotter/QuartilePlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/QuartilePlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/RadVizPlotter.java b/src/main/java/com/rapidminer/gui/plotter/RadVizPlotter.java index bccdeeb8c..377c7673d 100644 --- a/src/main/java/com/rapidminer/gui/plotter/RadVizPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/RadVizPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/RangeablePlotterAdapter.java b/src/main/java/com/rapidminer/gui/plotter/RangeablePlotterAdapter.java index 1e09f0e75..9337470e5 100644 --- a/src/main/java/com/rapidminer/gui/plotter/RangeablePlotterAdapter.java +++ b/src/main/java/com/rapidminer/gui/plotter/RangeablePlotterAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/RectangleStyle.java b/src/main/java/com/rapidminer/gui/plotter/RectangleStyle.java index c71d19b40..90f460e92 100644 --- a/src/main/java/com/rapidminer/gui/plotter/RectangleStyle.java +++ b/src/main/java/com/rapidminer/gui/plotter/RectangleStyle.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/ScatterMatrixPlotter.java b/src/main/java/com/rapidminer/gui/plotter/ScatterMatrixPlotter.java index 3757510e7..193f161d2 100644 --- a/src/main/java/com/rapidminer/gui/plotter/ScatterMatrixPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/ScatterMatrixPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/ScatterPlotter.java b/src/main/java/com/rapidminer/gui/plotter/ScatterPlotter.java index 56caeea92..a7e7f8cc4 100644 --- a/src/main/java/com/rapidminer/gui/plotter/ScatterPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/ScatterPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/SimplePlotterDialog.java b/src/main/java/com/rapidminer/gui/plotter/SimplePlotterDialog.java index 5c964043d..7a5c20097 100644 --- a/src/main/java/com/rapidminer/gui/plotter/SimplePlotterDialog.java +++ b/src/main/java/com/rapidminer/gui/plotter/SimplePlotterDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/SimplePlotterPanelDialog.java b/src/main/java/com/rapidminer/gui/plotter/SimplePlotterPanelDialog.java index 4be20a2f3..fd95fe53d 100644 --- a/src/main/java/com/rapidminer/gui/plotter/SimplePlotterPanelDialog.java +++ b/src/main/java/com/rapidminer/gui/plotter/SimplePlotterPanelDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/SurveyPlotter.java b/src/main/java/com/rapidminer/gui/plotter/SurveyPlotter.java index 1b79a7e60..a15677083 100644 --- a/src/main/java/com/rapidminer/gui/plotter/SurveyPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/SurveyPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/ToolTip.java b/src/main/java/com/rapidminer/gui/plotter/ToolTip.java index 139cb9d9f..d5f1d493c 100644 --- a/src/main/java/com/rapidminer/gui/plotter/ToolTip.java +++ b/src/main/java/com/rapidminer/gui/plotter/ToolTip.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/WeightIndex.java b/src/main/java/com/rapidminer/gui/plotter/WeightIndex.java index 0d5cffdfc..acb6e4ec9 100644 --- a/src/main/java/com/rapidminer/gui/plotter/WeightIndex.java +++ b/src/main/java/com/rapidminer/gui/plotter/WeightIndex.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/Abstract2DChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/Abstract2DChartPlotter.java index edadb8bf6..57af5e5c5 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/Abstract2DChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/Abstract2DChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/AbstractChartPanel.java b/src/main/java/com/rapidminer/gui/plotter/charts/AbstractChartPanel.java index ff2a39528..099fcacbf 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/AbstractChartPanel.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/AbstractChartPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/AbstractPieChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/AbstractPieChartPlotter.java index df07f5a06..7cecafc48 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/AbstractPieChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/AbstractPieChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/BarChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/BarChartPlotter.java index 401b57c09..2924d9ca6 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/BarChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/BarChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/BlockChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/BlockChartPlotter.java index 356e87f61..b2fabeb26 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/BlockChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/BlockChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/BubbleChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/BubbleChartPlotter.java index e3e6ab7ac..adf938ee1 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/BubbleChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/BubbleChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/ChartPanelShiftController.java b/src/main/java/com/rapidminer/gui/plotter/charts/ChartPanelShiftController.java index 2abaed547..b32225659 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/ChartPanelShiftController.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/ChartPanelShiftController.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedBarRenderer.java b/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedBarRenderer.java index 70b91c82f..8c76c8c0b 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedBarRenderer.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedBarRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedBubbleRenderer.java b/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedBubbleRenderer.java index 55a6aeaee..4161a3205 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedBubbleRenderer.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedBubbleRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedLineAndShapeRenderer.java b/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedLineAndShapeRenderer.java index 989c170bf..501e9b0ce 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedLineAndShapeRenderer.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedLineAndShapeRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedShapeItemRenderer.java b/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedShapeItemRenderer.java index 801cebe19..09b6e2787 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedShapeItemRenderer.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/ColorizedShapeItemRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/DeviationChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/DeviationChartPlotter.java index 41d0b1819..afe75ac41 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/DeviationChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/DeviationChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/DistributionPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/DistributionPlotter.java index 2bf3e04c4..14f3c7bdd 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/DistributionPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/DistributionPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/HistogramChart.java b/src/main/java/com/rapidminer/gui/plotter/charts/HistogramChart.java index 43e542749..8cefdd798 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/HistogramChart.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/HistogramChart.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/HistogramColorChart.java b/src/main/java/com/rapidminer/gui/plotter/charts/HistogramColorChart.java index f001dc828..d3b2e2043 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/HistogramColorChart.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/HistogramColorChart.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/MultipleScatterPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/MultipleScatterPlotter.java index f76ee9672..928fa57f6 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/MultipleScatterPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/MultipleScatterPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/MultipleSeriesChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/MultipleSeriesChartPlotter.java index dc83acf88..65dc76a9e 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/MultipleSeriesChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/MultipleSeriesChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/ParallelPlotter2.java b/src/main/java/com/rapidminer/gui/plotter/charts/ParallelPlotter2.java index 61e3b736d..136b939b3 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/ParallelPlotter2.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/ParallelPlotter2.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/ParetoChartItemLabelGenerator.java b/src/main/java/com/rapidminer/gui/plotter/charts/ParetoChartItemLabelGenerator.java index 92d33423d..b7ae906d5 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/ParetoChartItemLabelGenerator.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/ParetoChartItemLabelGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/ParetoChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/ParetoChartPlotter.java index f33d06c11..71595b410 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/ParetoChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/ParetoChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/PieChart2DPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/PieChart2DPlotter.java index 1040a886d..9536e4564 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/PieChart2DPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/PieChart2DPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/PieChart3DPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/PieChart3DPlotter.java index 256b53e8d..91ca6d0dd 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/PieChart3DPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/PieChart3DPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/PointsAndLinesDialog.java b/src/main/java/com/rapidminer/gui/plotter/charts/PointsAndLinesDialog.java index 6c1ef2cca..3722126c9 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/PointsAndLinesDialog.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/PointsAndLinesDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/RapidBarPainter.java b/src/main/java/com/rapidminer/gui/plotter/charts/RapidBarPainter.java index ac7583e06..60d1a4676 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/RapidBarPainter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/RapidBarPainter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/RapidHistogramDataset.java b/src/main/java/com/rapidminer/gui/plotter/charts/RapidHistogramDataset.java index 0fd6bfcbb..7d7443c3e 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/RapidHistogramDataset.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/RapidHistogramDataset.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/RapidXYBarPainter.java b/src/main/java/com/rapidminer/gui/plotter/charts/RapidXYBarPainter.java index ae2ecbbca..3b654f0b5 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/RapidXYBarPainter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/RapidXYBarPainter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/RingChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/RingChartPlotter.java index 2d05c0e92..80e145f39 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/RingChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/RingChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/ScatterPlotter2.java b/src/main/java/com/rapidminer/gui/plotter/charts/ScatterPlotter2.java index e80cd4fe1..4fc87000a 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/ScatterPlotter2.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/ScatterPlotter2.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/SelectablePlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/SelectablePlotter.java index a40fed15a..1f45bba25 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/SelectablePlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/SelectablePlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/SeriesChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/SeriesChartPlotter.java index 70d4ad8bd..f8c7c8bc3 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/SeriesChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/SeriesChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/StackedBarChartPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/StackedBarChartPlotter.java index f26ffc2ad..21a75fe20 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/StackedBarChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/StackedBarChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/WebPlotter.java b/src/main/java/com/rapidminer/gui/plotter/charts/WebPlotter.java index e14efdf31..7efc7ebb7 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/WebPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/WebPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/charts/WeightBasedSymbolAxis.java b/src/main/java/com/rapidminer/gui/plotter/charts/WeightBasedSymbolAxis.java index 47826c565..f1358ac27 100644 --- a/src/main/java/com/rapidminer/gui/plotter/charts/WeightBasedSymbolAxis.java +++ b/src/main/java/com/rapidminer/gui/plotter/charts/WeightBasedSymbolAxis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/conditions/BasicPlotterCondition.java b/src/main/java/com/rapidminer/gui/plotter/conditions/BasicPlotterCondition.java index 5dd12b1f7..ad1fe5226 100644 --- a/src/main/java/com/rapidminer/gui/plotter/conditions/BasicPlotterCondition.java +++ b/src/main/java/com/rapidminer/gui/plotter/conditions/BasicPlotterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/conditions/ColumnsPlotterCondition.java b/src/main/java/com/rapidminer/gui/plotter/conditions/ColumnsPlotterCondition.java index 78feb1dcb..8d4709bea 100644 --- a/src/main/java/com/rapidminer/gui/plotter/conditions/ColumnsPlotterCondition.java +++ b/src/main/java/com/rapidminer/gui/plotter/conditions/ColumnsPlotterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/conditions/CombinedPlotterCondition.java b/src/main/java/com/rapidminer/gui/plotter/conditions/CombinedPlotterCondition.java index d721bc7d1..ba61dad25 100644 --- a/src/main/java/com/rapidminer/gui/plotter/conditions/CombinedPlotterCondition.java +++ b/src/main/java/com/rapidminer/gui/plotter/conditions/CombinedPlotterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/conditions/PlotterCondition.java b/src/main/java/com/rapidminer/gui/plotter/conditions/PlotterCondition.java index e970a69b9..190d9e32a 100644 --- a/src/main/java/com/rapidminer/gui/plotter/conditions/PlotterCondition.java +++ b/src/main/java/com/rapidminer/gui/plotter/conditions/PlotterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/conditions/RowsPlotterCondition.java b/src/main/java/com/rapidminer/gui/plotter/conditions/RowsPlotterCondition.java index 116c379a5..e4637f892 100644 --- a/src/main/java/com/rapidminer/gui/plotter/conditions/RowsPlotterCondition.java +++ b/src/main/java/com/rapidminer/gui/plotter/conditions/RowsPlotterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/mathplot/BoxPlot2D.java b/src/main/java/com/rapidminer/gui/plotter/mathplot/BoxPlot2D.java index 9659442dd..e26f520ac 100644 --- a/src/main/java/com/rapidminer/gui/plotter/mathplot/BoxPlot2D.java +++ b/src/main/java/com/rapidminer/gui/plotter/mathplot/BoxPlot2D.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/mathplot/BoxPlot3D.java b/src/main/java/com/rapidminer/gui/plotter/mathplot/BoxPlot3D.java index 7ea3a25ad..15e66e03f 100644 --- a/src/main/java/com/rapidminer/gui/plotter/mathplot/BoxPlot3D.java +++ b/src/main/java/com/rapidminer/gui/plotter/mathplot/BoxPlot3D.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter.java b/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter.java index aaecff2c4..0e0bef875 100644 --- a/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter2D.java b/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter2D.java index a691da2a6..4e7274828 100644 --- a/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter2D.java +++ b/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter2D.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter3D.java b/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter3D.java index 0933d60c5..85185f72e 100644 --- a/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter3D.java +++ b/src/main/java/com/rapidminer/gui/plotter/mathplot/JMathPlotter3D.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/mathplot/ScatterPlot3D.java b/src/main/java/com/rapidminer/gui/plotter/mathplot/ScatterPlot3D.java index c919b504b..212d7df95 100644 --- a/src/main/java/com/rapidminer/gui/plotter/mathplot/ScatterPlot3D.java +++ b/src/main/java/com/rapidminer/gui/plotter/mathplot/ScatterPlot3D.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/mathplot/ScatterPlot3DColor.java b/src/main/java/com/rapidminer/gui/plotter/mathplot/ScatterPlot3DColor.java index 1c818e5ba..4e4d7522a 100644 --- a/src/main/java/com/rapidminer/gui/plotter/mathplot/ScatterPlot3DColor.java +++ b/src/main/java/com/rapidminer/gui/plotter/mathplot/ScatterPlot3DColor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/mathplot/SticksPlot2D.java b/src/main/java/com/rapidminer/gui/plotter/mathplot/SticksPlot2D.java index 735af0213..133d1478a 100644 --- a/src/main/java/com/rapidminer/gui/plotter/mathplot/SticksPlot2D.java +++ b/src/main/java/com/rapidminer/gui/plotter/mathplot/SticksPlot2D.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/mathplot/SticksPlot3D.java b/src/main/java/com/rapidminer/gui/plotter/mathplot/SticksPlot3D.java index 101d3fd6f..64ed77dd8 100644 --- a/src/main/java/com/rapidminer/gui/plotter/mathplot/SticksPlot3D.java +++ b/src/main/java/com/rapidminer/gui/plotter/mathplot/SticksPlot3D.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/mathplot/SurfacePlot3D.java b/src/main/java/com/rapidminer/gui/plotter/mathplot/SurfacePlot3D.java index f00f11552..a63f13c42 100644 --- a/src/main/java/com/rapidminer/gui/plotter/mathplot/SurfacePlot3D.java +++ b/src/main/java/com/rapidminer/gui/plotter/mathplot/SurfacePlot3D.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJCheckBox.java b/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJCheckBox.java index 130e0d1f7..6182e5438 100644 --- a/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJCheckBox.java +++ b/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJCheckBox.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJComboBox.java b/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJComboBox.java index 85f305e4a..f81aeac0f 100644 --- a/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJComboBox.java +++ b/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJComboBox.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJSlider.java b/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJSlider.java index f319e3eaa..0b702abc0 100644 --- a/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJSlider.java +++ b/src/main/java/com/rapidminer/gui/plotter/settings/ListeningJSlider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/settings/ListeningListSelectionModel.java b/src/main/java/com/rapidminer/gui/plotter/settings/ListeningListSelectionModel.java index 39aa5ae08..dff61ba41 100644 --- a/src/main/java/com/rapidminer/gui/plotter/settings/ListeningListSelectionModel.java +++ b/src/main/java/com/rapidminer/gui/plotter/settings/ListeningListSelectionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/settings/PlotterSettingsHistory.java b/src/main/java/com/rapidminer/gui/plotter/settings/PlotterSettingsHistory.java index 258184286..2e3bc1f8c 100644 --- a/src/main/java/com/rapidminer/gui/plotter/settings/PlotterSettingsHistory.java +++ b/src/main/java/com/rapidminer/gui/plotter/settings/PlotterSettingsHistory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/som/SOMClassColorizer.java b/src/main/java/com/rapidminer/gui/plotter/som/SOMClassColorizer.java index c53ec9412..1e2f25101 100644 --- a/src/main/java/com/rapidminer/gui/plotter/som/SOMClassColorizer.java +++ b/src/main/java/com/rapidminer/gui/plotter/som/SOMClassColorizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/som/SOMFireColorizer.java b/src/main/java/com/rapidminer/gui/plotter/som/SOMFireColorizer.java index a043d503b..0ae4f3a37 100644 --- a/src/main/java/com/rapidminer/gui/plotter/som/SOMFireColorizer.java +++ b/src/main/java/com/rapidminer/gui/plotter/som/SOMFireColorizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/som/SOMGreyColorizer.java b/src/main/java/com/rapidminer/gui/plotter/som/SOMGreyColorizer.java index 7a5b96f90..b3756821f 100644 --- a/src/main/java/com/rapidminer/gui/plotter/som/SOMGreyColorizer.java +++ b/src/main/java/com/rapidminer/gui/plotter/som/SOMGreyColorizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/som/SOMLandscapeColorizer.java b/src/main/java/com/rapidminer/gui/plotter/som/SOMLandscapeColorizer.java index 86838e7f9..c4354d142 100644 --- a/src/main/java/com/rapidminer/gui/plotter/som/SOMLandscapeColorizer.java +++ b/src/main/java/com/rapidminer/gui/plotter/som/SOMLandscapeColorizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/som/SOMMatrixColorizer.java b/src/main/java/com/rapidminer/gui/plotter/som/SOMMatrixColorizer.java index 462d9054a..6150a7d68 100644 --- a/src/main/java/com/rapidminer/gui/plotter/som/SOMMatrixColorizer.java +++ b/src/main/java/com/rapidminer/gui/plotter/som/SOMMatrixColorizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/plotter/som/SOMPlotter.java b/src/main/java/com/rapidminer/gui/plotter/som/SOMPlotter.java index 8c270a707..2f0b73d5a 100644 --- a/src/main/java/com/rapidminer/gui/plotter/som/SOMPlotter.java +++ b/src/main/java/com/rapidminer/gui/plotter/som/SOMPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/ExtendedProcessEditor.java b/src/main/java/com/rapidminer/gui/processeditor/ExtendedProcessEditor.java index 444d438e0..c72a7a976 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/ExtendedProcessEditor.java +++ b/src/main/java/com/rapidminer/gui/processeditor/ExtendedProcessEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/MacroEditor.java b/src/main/java/com/rapidminer/gui/processeditor/MacroEditor.java index 4b7691a86..6bbb4f796 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/MacroEditor.java +++ b/src/main/java/com/rapidminer/gui/processeditor/MacroEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/MacroViewer.java b/src/main/java/com/rapidminer/gui/processeditor/MacroViewer.java index 66238232c..3f1d38cf9 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/MacroViewer.java +++ b/src/main/java/com/rapidminer/gui/processeditor/MacroViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/NewOperatorEditor.java b/src/main/java/com/rapidminer/gui/processeditor/NewOperatorEditor.java index f0bae5981..90a314493 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/NewOperatorEditor.java +++ b/src/main/java/com/rapidminer/gui/processeditor/NewOperatorEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTree.java b/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTree.java index 4eea083c0..27898b719 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTree.java +++ b/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTreeModel.java b/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTreeModel.java index 9795bcff3..ca3e1adae 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTreeModel.java +++ b/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTreeModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTreeRenderer.java b/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTreeRenderer.java index ff9f476eb..4e5576ab6 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTreeRenderer.java +++ b/src/main/java/com/rapidminer/gui/processeditor/NewOperatorGroupTreeRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/ProcessContextEditor.java b/src/main/java/com/rapidminer/gui/processeditor/ProcessContextEditor.java index 88d18c0ee..50228a5f3 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/ProcessContextEditor.java +++ b/src/main/java/com/rapidminer/gui/processeditor/ProcessContextEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/ProcessContextProcessEditor.java b/src/main/java/com/rapidminer/gui/processeditor/ProcessContextProcessEditor.java index 1105597e6..2b9faa70b 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/ProcessContextProcessEditor.java +++ b/src/main/java/com/rapidminer/gui/processeditor/ProcessContextProcessEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/ProcessEditor.java b/src/main/java/com/rapidminer/gui/processeditor/ProcessEditor.java index 830756a7d..38cd758c2 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/ProcessEditor.java +++ b/src/main/java/com/rapidminer/gui/processeditor/ProcessEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/ProcessLogTab.java b/src/main/java/com/rapidminer/gui/processeditor/ProcessLogTab.java index 77d9cf55a..7be196fae 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/ProcessLogTab.java +++ b/src/main/java/com/rapidminer/gui/processeditor/ProcessLogTab.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/RepositoryLocationsEditor.java b/src/main/java/com/rapidminer/gui/processeditor/RepositoryLocationsEditor.java index f0a798511..37a159fd0 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/RepositoryLocationsEditor.java +++ b/src/main/java/com/rapidminer/gui/processeditor/RepositoryLocationsEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/XMLEditor.java b/src/main/java/com/rapidminer/gui/processeditor/XMLEditor.java index 1681f58af..981fee16e 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/XMLEditor.java +++ b/src/main/java/com/rapidminer/gui/processeditor/XMLEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -128,10 +128,11 @@ public void setSelection(List selection) { Operator currentOperator = selection.get(0); String name = currentOperator.getName(); String text = this.editor.getText(); - int result = text.indexOf("\"" + name + "\""); - if (result >= 0) { - this.editor.select(result + 1, result + name.length() + 1); - this.editor.setCaretPosition(result + name.length() + 1); + int start = text.indexOf("\"" + name + "\""); + int end = start + name.length() + 1; + if (start >= 0 && editor.getDocument().getLength() > end) { + this.editor.select(start + 1, end); + this.editor.setCaretPosition(end); } } } diff --git a/src/main/java/com/rapidminer/gui/processeditor/results/DockableResultDisplay.java b/src/main/java/com/rapidminer/gui/processeditor/results/DockableResultDisplay.java index 448d7bec9..9a844b810 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/results/DockableResultDisplay.java +++ b/src/main/java/com/rapidminer/gui/processeditor/results/DockableResultDisplay.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/results/ProcessExecutionResultOverview.java b/src/main/java/com/rapidminer/gui/processeditor/results/ProcessExecutionResultOverview.java index 8f57475bb..34b304c0c 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/results/ProcessExecutionResultOverview.java +++ b/src/main/java/com/rapidminer/gui/processeditor/results/ProcessExecutionResultOverview.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/results/RapidBorder.java b/src/main/java/com/rapidminer/gui/processeditor/results/RapidBorder.java index fa51d412b..f75662e4e 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/results/RapidBorder.java +++ b/src/main/java/com/rapidminer/gui/processeditor/results/RapidBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/results/ResultDisplay.java b/src/main/java/com/rapidminer/gui/processeditor/results/ResultDisplay.java index e6f6aba22..1ab7f4f45 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/results/ResultDisplay.java +++ b/src/main/java/com/rapidminer/gui/processeditor/results/ResultDisplay.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/results/ResultDisplayTools.java b/src/main/java/com/rapidminer/gui/processeditor/results/ResultDisplayTools.java index 0f28eb49c..62f99be2a 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/results/ResultDisplayTools.java +++ b/src/main/java/com/rapidminer/gui/processeditor/results/ResultDisplayTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/results/ResultLimitPanel.java b/src/main/java/com/rapidminer/gui/processeditor/results/ResultLimitPanel.java index 3ed6649a0..693e0ed25 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/results/ResultLimitPanel.java +++ b/src/main/java/com/rapidminer/gui/processeditor/results/ResultLimitPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/results/ResultOverview.java b/src/main/java/com/rapidminer/gui/processeditor/results/ResultOverview.java index 397faa231..5796388b3 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/results/ResultOverview.java +++ b/src/main/java/com/rapidminer/gui/processeditor/results/ResultOverview.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/results/ResultTab.java b/src/main/java/com/rapidminer/gui/processeditor/results/ResultTab.java index 9189fd11b..13e161ad7 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/results/ResultTab.java +++ b/src/main/java/com/rapidminer/gui/processeditor/results/ResultTab.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/results/SingleResultOverview.java b/src/main/java/com/rapidminer/gui/processeditor/results/SingleResultOverview.java index 481516c3e..34139744b 100644 --- a/src/main/java/com/rapidminer/gui/processeditor/results/SingleResultOverview.java +++ b/src/main/java/com/rapidminer/gui/processeditor/results/SingleResultOverview.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearch.java b/src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearch.java new file mode 100644 index 000000000..6ec6e2fb0 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearch.java @@ -0,0 +1,53 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.processeditor.search; + +import com.rapidminer.search.GlobalSearchIndexer; +import com.rapidminer.search.GlobalSearchManager; +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchable; + + +/** + * Responsible for implementing Global Search capabilities to operators. See {@link GlobalSearchRegistry} + * for more information. + * + * @author Marco Boeck + * @since 8.1 + */ +public class OperatorGlobalSearch implements GlobalSearchable { + + public static final String CATEGORY_ID = "operator"; + + private final OperatorGlobalSearchManager manager; + + + public OperatorGlobalSearch() { + manager = new OperatorGlobalSearchManager(); + + if (GlobalSearchIndexer.INSTANCE.isInitialized()) { + GlobalSearchRegistry.INSTANCE.registerSearchCategory(this); + } + } + + @Override + public GlobalSearchManager getSearchManager() { + return manager; + } +} diff --git a/src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearchGUIProvider.java b/src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearchGUIProvider.java new file mode 100644 index 000000000..383b9748f --- /dev/null +++ b/src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearchGUIProvider.java @@ -0,0 +1,248 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.processeditor.search; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Font; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DragGestureEvent; +import java.awt.dnd.DragGestureListener; +import java.awt.dnd.DragSource; +import java.awt.event.InputEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Collections; +import java.util.logging.Level; +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.border.Border; + +import org.apache.lucene.document.Document; + +import com.rapidminer.gui.MainFrame; +import com.rapidminer.gui.PerspectiveModel; +import com.rapidminer.gui.RapidMinerGUI; +import com.rapidminer.gui.dnd.TransferableOperator; +import com.rapidminer.gui.flow.processrendering.model.ProcessRendererModel; +import com.rapidminer.gui.search.GlobalSearchGUIUtilities; +import com.rapidminer.gui.search.GlobalSearchableGUIProvider; +import com.rapidminer.operator.Operator; +import com.rapidminer.operator.OperatorCreationException; +import com.rapidminer.operator.OperatorDescription; +import com.rapidminer.search.GlobalSearchUtilities; +import com.rapidminer.tools.I18N; +import com.rapidminer.tools.LogService; +import com.rapidminer.tools.OperatorService; +import com.rapidminer.tools.documentation.GroupDocumentation; + + +/** + * Provides UI elements to display operators in the Global Search results for the {@link OperatorGlobalSearch}. + * + * @author Marco Boeck + * @since 8.1 + */ +public class OperatorGlobalSearchGUIProvider implements GlobalSearchableGUIProvider { + + /** + * Drag & Drop support for operators. + */ + private static final class OperatorDragGesture implements DragGestureListener { + + private final Operator operator; + + private OperatorDragGesture(Operator operator) { + this.operator = operator; + } + + + @Override + public void dragGestureRecognized(DragGestureEvent event) { + // only allow dragging with left mouse button + if (event.getTriggerEvent().getModifiers() != InputEvent.BUTTON1_MASK) { + return; + } + + // change cursor to drag move + Cursor cursor = null; + if (event.getDragAction() == DnDConstants.ACTION_COPY) { + cursor = DragSource.DefaultCopyDrop; + } + + // set the recommended operator as the Transferable + event.startDrag(cursor, new TransferableOperator(new Operator[]{operator})); + } + } + + private static final Border ICON_EMPTY_BORDER = BorderFactory.createEmptyBorder(0, 5, 0, 15); + + private static final Color LOCATION_COLOR = new Color(128, 128, 128); + + private static final float FONT_SIZE_LOCATION = 9f; + private static final float FONT_SIZE_NAME = 14f; + + + @Override + public JComponent getGUIListComponentForDocument(final Document document, final String[] bestFragments) { + JPanel mainListPanel = new JPanel(); + mainListPanel.setLayout(new BorderLayout()); + mainListPanel.setOpaque(false); + JPanel descriptionPanel = new JPanel(); + descriptionPanel.setOpaque(false); + descriptionPanel.setLayout(new BorderLayout()); + + JLabel nameListLabel = new JLabel(); + nameListLabel.setFont(nameListLabel.getFont().deriveFont(Font.BOLD).deriveFont(FONT_SIZE_NAME)); + JLabel locationListLabel = new JLabel(); + locationListLabel.setFont(locationListLabel.getFont().deriveFont(FONT_SIZE_LOCATION)); + JLabel iconListLabel = new JLabel(); + iconListLabel.setBorder(ICON_EMPTY_BORDER); + + descriptionPanel.add(nameListLabel, BorderLayout.CENTER); + descriptionPanel.add(locationListLabel, BorderLayout.SOUTH); + + mainListPanel.add(iconListLabel, BorderLayout.WEST); + mainListPanel.add(descriptionPanel, BorderLayout.CENTER); + + OperatorDescription opDesc = OperatorService.getOperatorDescription(document.get(GlobalSearchUtilities.FIELD_UNIQUE_ID)); + String name = opDesc.getName(); + mainListPanel.setToolTipText(name); + name = GlobalSearchGUIUtilities.INSTANCE.createHTMLHighlightFromString(name, bestFragments); + + // add the "drag here" label to the process panel + mainListPanel.addMouseListener(new MouseAdapter() { + + @Override + public void mouseEntered(MouseEvent e) { + handleHoverOverOperator(true); + } + + @Override + public void mouseExited(MouseEvent e) { + handleHoverOverOperator(false); + } + + /** + * Handle the hover-over-operator events. + * + * @param hovered + * {@code true} if hovering over an operator; {@code false} otherwise + */ + private void handleHoverOverOperator(final boolean hovered) { + ProcessRendererModel modelRenderer = RapidMinerGUI.getMainFrame().getProcessPanel().getProcessRenderer() + .getModel(); + + modelRenderer.setOperatorSourceHovered(hovered); + modelRenderer.fireMiscChanged(); + } + }); + + nameListLabel.setText(name); + iconListLabel.setIcon(opDesc.getSmallIcon()); + locationListLabel.setText(createFullGroupName(opDesc.getGroup())); + locationListLabel.setForeground(LOCATION_COLOR); + return mainListPanel; + } + + @Override + public String getI18nNameForSearchable() { + return I18N.getMessage(I18N.getGUIBundle(), "gui.component.global_search.operators.category.title"); + } + + @Override + public void searchResultTriggered(final Document document, final Veto veto) { + // try to insert operator into process + String operatorKey = document.get(GlobalSearchUtilities.FIELD_UNIQUE_ID); + if (operatorKey == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.processeditor.global_search.OperatorSearchManager.error.no_key"); + return; + } + + try { + Operator operator = OperatorService.getOperatorDescription(operatorKey).createOperatorInstance(); + MainFrame mainFrame = RapidMinerGUI.getMainFrame(); + mainFrame.getActions().insert(Collections.singletonList(operator)); + mainFrame.getPerspectiveController().showPerspective(PerspectiveModel.DESIGN); + } catch (OperatorCreationException e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.processeditor.global_search.OperatorSearchManager.error.operator_creation_error", e.getMessage()); + } + } + + @Override + public void searchResultBrowsed(final Document document) { + String operatorKey = document.get(GlobalSearchUtilities.FIELD_UNIQUE_ID); + if (operatorKey == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.processeditor.global_search.OperatorSearchManager.error.no_key"); + return; + } + + try { + Operator operator = OperatorService.getOperatorDescription(operatorKey).createOperatorInstance(); + RapidMinerGUI.getMainFrame().getOperatorDocViewer().setDisplayedOperator(operator); + } catch (OperatorCreationException e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.processeditor.global_search.OperatorSearchManager.error.operator_browse_error", e.getMessage()); + } + } + + @Override + public boolean isDragAndDropSupported(final Document document) { + return true; + } + + @Override + public DragGestureListener getDragAndDropSupport(final Document document) { + String operatorKey = document.get(GlobalSearchUtilities.FIELD_UNIQUE_ID); + if (operatorKey == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.processeditor.global_search.OperatorSearchManager.error.no_key"); + return null; + } + + try { + return new OperatorDragGesture(OperatorService.getOperatorDescription(operatorKey).createOperatorInstance()); + } catch (OperatorCreationException e) { + return null; + } + } + + /** + * Creates the full group path for an operator in human-readable form. + * + * @param groupKey + * the full group path in the format goupname.groupothername.finalgroup + * @return the human-readable key, never {@code null} + */ + private static String createFullGroupName(final String groupKey) { + String[] groups = groupKey.split("\\."); + StringBuilder sb = new StringBuilder(); + for (String group : groups) { + sb.append(GroupDocumentation.keyToUpperCase(group)); + sb.append('/'); + } + if (sb.length() > 0) { + sb.deleteCharAt(sb.length() - 1); + } else { + sb.append(GroupDocumentation.keyToUpperCase(groupKey)); + } + return sb.toString(); + } +} diff --git a/src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearchManager.java b/src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearchManager.java new file mode 100644 index 000000000..c79f24299 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/processeditor/search/OperatorGlobalSearchManager.java @@ -0,0 +1,281 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.processeditor.search; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; + +import com.rapidminer.gui.renderer.RendererService; +import com.rapidminer.gui.tools.ProgressThread; +import com.rapidminer.operator.Operator; +import com.rapidminer.operator.OperatorCapability; +import com.rapidminer.operator.OperatorCreationException; +import com.rapidminer.operator.OperatorDescription; +import com.rapidminer.operator.learner.CapabilityProvider; +import com.rapidminer.operator.learner.Learner; +import com.rapidminer.operator.ports.InputPort; +import com.rapidminer.operator.ports.InputPorts; +import com.rapidminer.operator.ports.OutputPort; +import com.rapidminer.operator.ports.OutputPorts; +import com.rapidminer.operator.ports.metadata.MetaData; +import com.rapidminer.operator.ports.metadata.Precondition; +import com.rapidminer.parameter.ParameterType; +import com.rapidminer.search.AbstractGlobalSearchManager; +import com.rapidminer.search.GlobalSearchDefaultField; +import com.rapidminer.search.GlobalSearchUtilities; +import com.rapidminer.tools.OperatorService; +import com.rapidminer.tools.documentation.OperatorDocBundle; + + +/** + * Manages operator search for the Global Search feature. See {@link OperatorGlobalSearch}. + * + * @author Marco Boeck + * @since 8.1 + */ +class OperatorGlobalSearchManager extends AbstractGlobalSearchManager implements OperatorService.OperatorServiceListener { + + private static final Map ADDITIONAL_FIELDS; + + private static final String FIELD_TAG = "tag"; + private static final String FIELD_PARAMETER = "parameter"; + private static final String FIELD_INPUT_CLASS = "input"; + private static final String FIELD_OUTPUT_CLASS = "output"; + private static final String FIELD_CAPABILITIES = "capability"; + private static final String FIELD_SOURCE = "source"; + + private static final String DUMMY_OPERATOR = "dummy"; + private static final String PROCESS_ROOT_OPERATOR = "process"; + private static final String IO_OBJECT = "IOObject"; + + private static final float FIELD_BOOST_TAG = 0.5f; + private static final float FIELD_BOOST_SOURCE = 0.25f; + + static { + ADDITIONAL_FIELDS = new HashMap<>(); + ADDITIONAL_FIELDS.put(FIELD_TAG, "The tags of the operator"); + ADDITIONAL_FIELDS.put(FIELD_PARAMETER, "The parameter names of the operator"); + ADDITIONAL_FIELDS.put(FIELD_INPUT_CLASS, "The input port types of the operator"); + ADDITIONAL_FIELDS.put(FIELD_OUTPUT_CLASS, "The output port types of the operator"); + ADDITIONAL_FIELDS.put(FIELD_CAPABILITIES, "The capabilities of the operator (typically only specified for learners)"); + ADDITIONAL_FIELDS.put(FIELD_SOURCE, "The source of the operator, e.g. RapidMiner Studio Core or an extension"); + } + + + protected OperatorGlobalSearchManager() { + super(OperatorGlobalSearch.CATEGORY_ID, ADDITIONAL_FIELDS, new GlobalSearchDefaultField(FIELD_TAG, FIELD_BOOST_TAG), new GlobalSearchDefaultField(FIELD_SOURCE, FIELD_BOOST_SOURCE)); + } + + @Override + public void operatorRegistered(final OperatorDescription description, final OperatorDocBundle bundle) { + if (description.isDeprecated()) { + return; + } + if (DUMMY_OPERATOR.equals(description.getKey()) || PROCESS_ROOT_OPERATOR.equals(description.getKey())) { + return; + } + addDocumentToIndex(createDocument(description)); + } + + @Override + public void operatorUnregistered(final OperatorDescription description) { + removeDocumentFromIndex(createDocument(description)); + } + + @Override + protected void init() { + OperatorService.addOperatorServiceListener(this); + } + + @Override + protected List createInitialIndex(final ProgressThread progressThread) { + // not needed + return Collections.emptyList(); + } + + /** + * Creates an operator search document for the given operator description. + * + * @param opDesc + * the operator description for which to create the search document + * @return the document, never {@code null} + */ + private Document createDocument(final OperatorDescription opDesc) { + List fields = new ArrayList<>(); + + // add tags + List tags = opDesc.getTags(); + StringBuilder sb = new StringBuilder(); + if (!tags.isEmpty()) { + for (String tag : tags) { + sb.append(tag); + sb.append(' '); + } + } + sb.append(opDesc.getGroupName()); + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForTexts(FIELD_TAG, sb.toString())); + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForTexts(FIELD_SOURCE, opDesc.getProviderName())); + + // add parameters and input/output port classes + // as of 8.1, this operator creation does not cost any time, even though it looks scary + // for over a dozen extensions, the whole try-block below with operator creation adds less than 1 second to Studio start + try { + Operator op = opDesc.createOperatorInstance(); + + // store parameter keys + createParameterField(fields, op); + + // store input port types + createInputPortField(fields, op); + + // store output port types + createOutputPortField(fields, op); + + // for learners, also store their capabilities + if (op instanceof CapabilityProvider) { + createCapabilitiesField(fields, (CapabilityProvider) op); + } + } catch (OperatorCreationException e) { + // should not happen, if it does, ignore + } + return GlobalSearchUtilities.INSTANCE.createDocument(opDesc.getKey(), opDesc.getName(), fields.toArray(new Field[fields.size()])); + } + + /** + * Creates the parameter field for operators. + * + * @param fields + * the list of fields to which the new field should be added + * @param op + * the operator instance + */ + private void createParameterField(final List fields, final Operator op) { + StringBuilder sb; + sb = new StringBuilder(); + for (ParameterType type : op.getParameterTypes()) { + String key = type.getKey().replaceAll("_", " "); + sb.append(key); + sb.append(' '); + } + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForTexts(FIELD_PARAMETER, sb.toString())); + } + + /** + * Creates the input port type field for operators. + * + * @param fields + * the list of fields to which the new field should be added + * @param op + * the operator instance + */ + + private void createInputPortField(final List fields, final Operator op) { + StringBuilder sb; + InputPorts inputPorts = op.getInputPorts(); + if (inputPorts != null && inputPorts.getNumberOfPorts() > 0) { + sb = new StringBuilder(); + // there is a port? Every port input class extends IOObject, so add that + sb.append(IO_OBJECT); + sb.append(' '); + for (InputPort inPort : inputPorts.getAllPorts()) { + if (!inPort.getAllPreconditions().isEmpty()) { + List preconditions = new LinkedList<>(inPort.getAllPreconditions()); + MetaData expectedMD = preconditions.get(0).getExpectedMetaData(); + String name = RendererService.getName(expectedMD.getObjectClass()); + if (name != null) { + sb.append(name); + } else { + sb.append(inPort.getName()); + } + } else { + sb.append(inPort.getName()); + } + sb.append(' '); + } + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForTexts(FIELD_INPUT_CLASS, sb.toString())); + } + } + + /** + * Creates the output port type field for operators. + * + * @param fields + * the list of fields to which the new field should be added + * @param op + * the operator instance + */ + private void createOutputPortField(final List fields, final Operator op) { + StringBuilder sb; + OutputPorts outputPorts = op.getOutputPorts(); + if (outputPorts != null && outputPorts.getNumberOfPorts() > 0) { + sb = new StringBuilder(); + // there is a port? Every port output class extends IOObject, so add that + sb.append(IO_OBJECT); + sb.append(' '); + + // to prepare output MD, we need to trigger generation here + op.transformMetaData(); + for (OutputPort outPort : outputPorts.getAllPorts()) { + // we need to use the deprecated method because we don't want specific MD, but whatever MD is there + MetaData resultMD = outPort.getMetaData(); + if (resultMD != null) { + String name = RendererService.getName(resultMD.getObjectClass()); + if (name != null) { + sb.append(name); + } else { + sb.append(outPort.getName()); + } + } else { + sb.append(outPort.getName()); + } + sb.append(' '); + } + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForTexts(FIELD_OUTPUT_CLASS, sb.toString())); + } + } + + /** + * Create the capabilities field for {@link Learner}s. + * + * @param fields + * the list of fields to which the new field should be added + * @param op + * the learner instance + */ + private void createCapabilitiesField(final List fields, final CapabilityProvider op) { + StringBuilder sb; + sb = new StringBuilder(); + for (OperatorCapability capability : OperatorCapability.values()) { + if (op.supportsCapability(capability)) { + sb.append(capability.getDescription()); + sb.append(' '); + } + } + + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForTexts(FIELD_CAPABILITIES, sb.toString())); + } + +} diff --git a/src/main/java/com/rapidminer/gui/properties/AttributeOrderingDialog.java b/src/main/java/com/rapidminer/gui/properties/AttributeOrderingDialog.java index 2bafdca7e..88812a591 100644 --- a/src/main/java/com/rapidminer/gui/properties/AttributeOrderingDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/AttributeOrderingDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/AttributesPropertyDialog.java b/src/main/java/com/rapidminer/gui/properties/AttributesPropertyDialog.java index 53b42af0c..01d9fa7f8 100644 --- a/src/main/java/com/rapidminer/gui/properties/AttributesPropertyDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/AttributesPropertyDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/BasicPropertyTable.java b/src/main/java/com/rapidminer/gui/properties/BasicPropertyTable.java index 451c3214e..5d3fdc769 100644 --- a/src/main/java/com/rapidminer/gui/properties/BasicPropertyTable.java +++ b/src/main/java/com/rapidminer/gui/properties/BasicPropertyTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/BetaFeaturesListener.java b/src/main/java/com/rapidminer/gui/properties/BetaFeaturesListener.java index cb0c518e5..ac170211a 100644 --- a/src/main/java/com/rapidminer/gui/properties/BetaFeaturesListener.java +++ b/src/main/java/com/rapidminer/gui/properties/BetaFeaturesListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/CompatibilityLevelSpinnerModel.java b/src/main/java/com/rapidminer/gui/properties/CompatibilityLevelSpinnerModel.java index b5cff1926..e1bbadc73 100644 --- a/src/main/java/com/rapidminer/gui/properties/CompatibilityLevelSpinnerModel.java +++ b/src/main/java/com/rapidminer/gui/properties/CompatibilityLevelSpinnerModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/ConfigureParameterOptimizationDialog.java b/src/main/java/com/rapidminer/gui/properties/ConfigureParameterOptimizationDialog.java index 579c2b750..68944c06b 100644 --- a/src/main/java/com/rapidminer/gui/properties/ConfigureParameterOptimizationDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/ConfigureParameterOptimizationDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/ConfigureParameterOptimizationDialogCreator.java b/src/main/java/com/rapidminer/gui/properties/ConfigureParameterOptimizationDialogCreator.java index e19db0b86..f204c8772 100644 --- a/src/main/java/com/rapidminer/gui/properties/ConfigureParameterOptimizationDialogCreator.java +++ b/src/main/java/com/rapidminer/gui/properties/ConfigureParameterOptimizationDialogCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/DefaultPropertyTable.java b/src/main/java/com/rapidminer/gui/properties/DefaultPropertyTable.java index 341c82b60..c18484506 100644 --- a/src/main/java/com/rapidminer/gui/properties/DefaultPropertyTable.java +++ b/src/main/java/com/rapidminer/gui/properties/DefaultPropertyTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/DefaultRMCellEditor.java b/src/main/java/com/rapidminer/gui/properties/DefaultRMCellEditor.java index e6dbe98ff..00ce74641 100644 --- a/src/main/java/com/rapidminer/gui/properties/DefaultRMCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/DefaultRMCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/EnumerationPropertyDialog.java b/src/main/java/com/rapidminer/gui/properties/EnumerationPropertyDialog.java index 6f7da19af..88cec1c83 100644 --- a/src/main/java/com/rapidminer/gui/properties/EnumerationPropertyDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/EnumerationPropertyDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/EnumerationPropertyTable.java b/src/main/java/com/rapidminer/gui/properties/EnumerationPropertyTable.java index 29da3ec06..1fd5ab7b0 100644 --- a/src/main/java/com/rapidminer/gui/properties/EnumerationPropertyTable.java +++ b/src/main/java/com/rapidminer/gui/properties/EnumerationPropertyTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/ExpressionPropertyDialog.java b/src/main/java/com/rapidminer/gui/properties/ExpressionPropertyDialog.java index d7d204f25..95ea211cb 100644 --- a/src/main/java/com/rapidminer/gui/properties/ExpressionPropertyDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/ExpressionPropertyDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/FilterPropertyDialog.java b/src/main/java/com/rapidminer/gui/properties/FilterPropertyDialog.java index d2c5d43a4..6a3bc2b4d 100644 --- a/src/main/java/com/rapidminer/gui/properties/FilterPropertyDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/FilterPropertyDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/FilterTableModel.java b/src/main/java/com/rapidminer/gui/properties/FilterTableModel.java index 7bbcd7d22..c81f1a776 100644 --- a/src/main/java/com/rapidminer/gui/properties/FilterTableModel.java +++ b/src/main/java/com/rapidminer/gui/properties/FilterTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/FocusedComponentBorder.java b/src/main/java/com/rapidminer/gui/properties/FocusedComponentBorder.java index 456de4c2a..380a36edf 100644 --- a/src/main/java/com/rapidminer/gui/properties/FocusedComponentBorder.java +++ b/src/main/java/com/rapidminer/gui/properties/FocusedComponentBorder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/FunctionDescriptionModel.java b/src/main/java/com/rapidminer/gui/properties/FunctionDescriptionModel.java index c47be25e4..0769456a9 100644 --- a/src/main/java/com/rapidminer/gui/properties/FunctionDescriptionModel.java +++ b/src/main/java/com/rapidminer/gui/properties/FunctionDescriptionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/FunctionDescriptionPanel.java b/src/main/java/com/rapidminer/gui/properties/FunctionDescriptionPanel.java index c078d96e0..7bc6c82b3 100644 --- a/src/main/java/com/rapidminer/gui/properties/FunctionDescriptionPanel.java +++ b/src/main/java/com/rapidminer/gui/properties/FunctionDescriptionPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/FunctionInputPanel.java b/src/main/java/com/rapidminer/gui/properties/FunctionInputPanel.java index 0dab156c5..376a09064 100644 --- a/src/main/java/com/rapidminer/gui/properties/FunctionInputPanel.java +++ b/src/main/java/com/rapidminer/gui/properties/FunctionInputPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/FunctionInputsModel.java b/src/main/java/com/rapidminer/gui/properties/FunctionInputsModel.java index 170937874..c0ee8b2c7 100644 --- a/src/main/java/com/rapidminer/gui/properties/FunctionInputsModel.java +++ b/src/main/java/com/rapidminer/gui/properties/FunctionInputsModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/GenericParameterPanel.java b/src/main/java/com/rapidminer/gui/properties/GenericParameterPanel.java index c9b53b793..fc4755b87 100644 --- a/src/main/java/com/rapidminer/gui/properties/GenericParameterPanel.java +++ b/src/main/java/com/rapidminer/gui/properties/GenericParameterPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/ListPropertyDialog.java b/src/main/java/com/rapidminer/gui/properties/ListPropertyDialog.java index 1f316760b..10206d04b 100644 --- a/src/main/java/com/rapidminer/gui/properties/ListPropertyDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/ListPropertyDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/ListPropertyTable.java b/src/main/java/com/rapidminer/gui/properties/ListPropertyTable.java index a0fa0e51c..dc068c16b 100644 --- a/src/main/java/com/rapidminer/gui/properties/ListPropertyTable.java +++ b/src/main/java/com/rapidminer/gui/properties/ListPropertyTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/ListPropertyTable2.java b/src/main/java/com/rapidminer/gui/properties/ListPropertyTable2.java index 381771042..a535db0b3 100644 --- a/src/main/java/com/rapidminer/gui/properties/ListPropertyTable2.java +++ b/src/main/java/com/rapidminer/gui/properties/ListPropertyTable2.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/ListTableModel.java b/src/main/java/com/rapidminer/gui/properties/ListTableModel.java index c83b979b1..702e7f3ac 100644 --- a/src/main/java/com/rapidminer/gui/properties/ListTableModel.java +++ b/src/main/java/com/rapidminer/gui/properties/ListTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/MacroSelectionDialog.java b/src/main/java/com/rapidminer/gui/properties/MacroSelectionDialog.java index f95c08adc..9d6961428 100644 --- a/src/main/java/com/rapidminer/gui/properties/MacroSelectionDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/MacroSelectionDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/MatrixPropertyDialog.java b/src/main/java/com/rapidminer/gui/properties/MatrixPropertyDialog.java index 19697c789..dd95570ef 100644 --- a/src/main/java/com/rapidminer/gui/properties/MatrixPropertyDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/MatrixPropertyDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/MatrixPropertyTable.java b/src/main/java/com/rapidminer/gui/properties/MatrixPropertyTable.java index 54470e551..41c8eebe4 100644 --- a/src/main/java/com/rapidminer/gui/properties/MatrixPropertyTable.java +++ b/src/main/java/com/rapidminer/gui/properties/MatrixPropertyTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/MatrixPropertyTableModel.java b/src/main/java/com/rapidminer/gui/properties/MatrixPropertyTableModel.java index dc1c72c1c..e08ab1ec2 100644 --- a/src/main/java/com/rapidminer/gui/properties/MatrixPropertyTableModel.java +++ b/src/main/java/com/rapidminer/gui/properties/MatrixPropertyTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/OperatorPropertyPanel.java b/src/main/java/com/rapidminer/gui/properties/OperatorPropertyPanel.java index 907c8cad6..e8f9ba239 100644 --- a/src/main/java/com/rapidminer/gui/properties/OperatorPropertyPanel.java +++ b/src/main/java/com/rapidminer/gui/properties/OperatorPropertyPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/ParameterChangeListener.java b/src/main/java/com/rapidminer/gui/properties/ParameterChangeListener.java index fb61ba5a2..8ca6e1d54 100644 --- a/src/main/java/com/rapidminer/gui/properties/ParameterChangeListener.java +++ b/src/main/java/com/rapidminer/gui/properties/ParameterChangeListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/PropertyDialog.java b/src/main/java/com/rapidminer/gui/properties/PropertyDialog.java index 841282c00..95d168929 100644 --- a/src/main/java/com/rapidminer/gui/properties/PropertyDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/PropertyDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/PropertyPanel.java b/src/main/java/com/rapidminer/gui/properties/PropertyPanel.java index 95105c661..f500ba33c 100644 --- a/src/main/java/com/rapidminer/gui/properties/PropertyPanel.java +++ b/src/main/java/com/rapidminer/gui/properties/PropertyPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/PropertyTable.java b/src/main/java/com/rapidminer/gui/properties/PropertyTable.java index 0a12aed5f..dd1e3e6ae 100644 --- a/src/main/java/com/rapidminer/gui/properties/PropertyTable.java +++ b/src/main/java/com/rapidminer/gui/properties/PropertyTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/PropertyTableParameterChangeListener.java b/src/main/java/com/rapidminer/gui/properties/PropertyTableParameterChangeListener.java index 5fcc337a9..268f40f7e 100644 --- a/src/main/java/com/rapidminer/gui/properties/PropertyTableParameterChangeListener.java +++ b/src/main/java/com/rapidminer/gui/properties/PropertyTableParameterChangeListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/ProxyParameterSaver.java b/src/main/java/com/rapidminer/gui/properties/ProxyParameterSaver.java index d5098fa00..f34837d19 100644 --- a/src/main/java/com/rapidminer/gui/properties/ProxyParameterSaver.java +++ b/src/main/java/com/rapidminer/gui/properties/ProxyParameterSaver.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/RegexpPropertyDialog.java b/src/main/java/com/rapidminer/gui/properties/RegexpPropertyDialog.java index 3689c682f..d563f10c1 100644 --- a/src/main/java/com/rapidminer/gui/properties/RegexpPropertyDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/RegexpPropertyDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/SettingsDialog.java b/src/main/java/com/rapidminer/gui/properties/SettingsDialog.java index c630c5ce5..54b48bfa1 100644 --- a/src/main/java/com/rapidminer/gui/properties/SettingsDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/SettingsDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/SettingsItem.java b/src/main/java/com/rapidminer/gui/properties/SettingsItem.java index 91f0b951c..216ab721c 100644 --- a/src/main/java/com/rapidminer/gui/properties/SettingsItem.java +++ b/src/main/java/com/rapidminer/gui/properties/SettingsItem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/SettingsItems.java b/src/main/java/com/rapidminer/gui/properties/SettingsItems.java index b845e59e1..8d3c58613 100644 --- a/src/main/java/com/rapidminer/gui/properties/SettingsItems.java +++ b/src/main/java/com/rapidminer/gui/properties/SettingsItems.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/SettingsPropertyPanel.java b/src/main/java/com/rapidminer/gui/properties/SettingsPropertyPanel.java index a95aa1be2..9b3e2c8ef 100644 --- a/src/main/java/com/rapidminer/gui/properties/SettingsPropertyPanel.java +++ b/src/main/java/com/rapidminer/gui/properties/SettingsPropertyPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/SettingsTabs.java b/src/main/java/com/rapidminer/gui/properties/SettingsTabs.java index 4012a46ab..de0db7288 100644 --- a/src/main/java/com/rapidminer/gui/properties/SettingsTabs.java +++ b/src/main/java/com/rapidminer/gui/properties/SettingsTabs.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/SettingsXmlHandler.java b/src/main/java/com/rapidminer/gui/properties/SettingsXmlHandler.java index c98286e61..1a21f84cd 100644 --- a/src/main/java/com/rapidminer/gui/properties/SettingsXmlHandler.java +++ b/src/main/java/com/rapidminer/gui/properties/SettingsXmlHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/TextPropertyDialog.java b/src/main/java/com/rapidminer/gui/properties/TextPropertyDialog.java index 2ea2443a0..c370fce99 100644 --- a/src/main/java/com/rapidminer/gui/properties/TextPropertyDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/TextPropertyDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/key/DefaultPropertyKeyRenderer.java b/src/main/java/com/rapidminer/gui/properties/celleditors/key/DefaultPropertyKeyRenderer.java index c8258865c..dee5db951 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/key/DefaultPropertyKeyRenderer.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/key/DefaultPropertyKeyRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/key/DelegationKeyCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/key/DelegationKeyCellEditor.java index a73dc8c5b..f81c57c33 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/key/DelegationKeyCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/key/DelegationKeyCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/key/ParameterValueKeyCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/key/ParameterValueKeyCellEditor.java index e908020f2..d2c2e40bc 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/key/ParameterValueKeyCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/key/ParameterValueKeyCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/key/PropertyKeyCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/key/PropertyKeyCellEditor.java index 42f2122c9..e676826f9 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/key/PropertyKeyCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/key/PropertyKeyCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AbstractSuggestionBoxValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AbstractSuggestionBoxValueCellEditor.java index aaff955b3..682e028a9 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AbstractSuggestionBoxValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AbstractSuggestionBoxValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeComboBox.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeComboBox.java index e871a606c..328297f28 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeComboBox.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeComboBox.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeFileValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeFileValueCellEditor.java index 704bfc243..964a065a4 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeFileValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeFileValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeOrderingCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeOrderingCellEditor.java index 5fd49e6ab..90a571a3b 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeOrderingCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeOrderingCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeValueCellEditor.java index eb7632e1c..7ceb3a821 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributeValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributesValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributesValueCellEditor.java index a6e3c6da8..966f18704 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributesValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/AttributesValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ColorValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ColorValueCellEditor.java index e31b7f056..85709f808 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ColorValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ColorValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ConfigurableValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ConfigurableValueCellEditor.java index a40c171d9..cd4c52d5b 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ConfigurableValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ConfigurableValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ConfigurationWizardValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ConfigurationWizardValueCellEditor.java index 4570515e4..76702d7f6 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ConfigurationWizardValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ConfigurationWizardValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/CronExpressionCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/CronExpressionCellEditor.java index adb78ffe2..5248c49e5 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/CronExpressionCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/CronExpressionCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/DateFormatValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/DateFormatValueCellEditor.java index eb35b4d51..f1cdeb205 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/DateFormatValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/DateFormatValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/DateValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/DateValueCellEditor.java index bdf18ca7d..a7e9b5b1d 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/DateValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/DateValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/DefaultPropertyValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/DefaultPropertyValueCellEditor.java index fff95d68b..cc6edfcb5 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/DefaultPropertyValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/DefaultPropertyValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/EnumerationValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/EnumerationValueCellEditor.java index 12840df25..1256b0a95 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/EnumerationValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/EnumerationValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ExpressionValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ExpressionValueCellEditor.java index 1f0385dfb..5d7373648 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ExpressionValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ExpressionValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/FileValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/FileValueCellEditor.java index 2ed1df154..67cfda11c 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/FileValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/FileValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/FilterValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/FilterValueCellEditor.java index 526676202..c5e2c028d 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/FilterValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/FilterValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/InnerOperatorValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/InnerOperatorValueCellEditor.java index 044f28948..ea88aa954 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/InnerOperatorValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/InnerOperatorValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/LinkButtonValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/LinkButtonValueCellEditor.java index d37814fd0..da3d7f72f 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/LinkButtonValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/LinkButtonValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ListValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ListValueCellEditor.java index 8b0c74d04..403960c79 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ListValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ListValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/MatrixValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/MatrixValueCellEditor.java index 3d982330d..ea6635691 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/MatrixValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/MatrixValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/OAuthDialog.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/OAuthDialog.java index 3f7485242..a3817ee68 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/OAuthDialog.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/OAuthDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/OAuthValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/OAuthValueCellEditor.java index f6c38948c..d7dd331d3 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/OAuthValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/OAuthValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/OperatorValueValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/OperatorValueValueCellEditor.java index 9e887bdbd..c6f5f1b0c 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/OperatorValueValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/OperatorValueValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ParameterTupelCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ParameterTupelCellEditor.java index f77432537..13d983b9e 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ParameterTupelCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ParameterTupelCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/PreviewValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/PreviewValueCellEditor.java index 8e5cb58d7..81cdf236e 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/PreviewValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/PreviewValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ProcessLocationValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ProcessLocationValueCellEditor.java index 38cf722c0..d4b34cdf4 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/ProcessLocationValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/ProcessLocationValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/PropertyValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/PropertyValueCellEditor.java index e26a9f597..eb59617ee 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/PropertyValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/PropertyValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/RegexpValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/RegexpValueCellEditor.java index 6abac70ad..758311650 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/RegexpValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/RegexpValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/RemoteFileValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/RemoteFileValueCellEditor.java index bc3370ddd..16a3463d9 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/RemoteFileValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/RemoteFileValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/RepositoryLocationValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/RepositoryLocationValueCellEditor.java index ef7495104..2452fc21d 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/RepositoryLocationValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/RepositoryLocationValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/SimpleFileValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/SimpleFileValueCellEditor.java index 8b4e09fb8..0e9e25e83 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/SimpleFileValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/SimpleFileValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/SimpleSuggestionBoxValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/SimpleSuggestionBoxValueCellEditor.java index ecca6a109..b13b67b3b 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/SimpleSuggestionBoxValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/SimpleSuggestionBoxValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/celleditors/value/TextValueCellEditor.java b/src/main/java/com/rapidminer/gui/properties/celleditors/value/TextValueCellEditor.java index 2e9878d34..096c1942f 100644 --- a/src/main/java/com/rapidminer/gui/properties/celleditors/value/TextValueCellEditor.java +++ b/src/main/java/com/rapidminer/gui/properties/celleditors/value/TextValueCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/TablePanel.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/TablePanel.java index 9a9457fcd..7f036744a 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/TablePanel.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/TablePanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeCheckBoxImpl.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeCheckBoxImpl.java index 4040dab91..968cfe284 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeCheckBoxImpl.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeCheckBoxImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeComboBoxImpl.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeComboBoxImpl.java index 6975cfdf1..09acc6514 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeComboBoxImpl.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeComboBoxImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeDateImpl.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeDateImpl.java index 4b170bf5e..f76f8a930 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeDateImpl.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeDateImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeImplHelper.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeImplHelper.java index 216d1363b..3cc8b26cb 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeImplHelper.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeImplHelper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeRegexImpl.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeRegexImpl.java index 768c85d59..e495cb958 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeRegexImpl.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeRegexImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeTextFieldDefaultImpl.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeTextFieldDefaultImpl.java index a8e4f9821..7d865192d 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeTextFieldDefaultImpl.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/implementations/CellTypeTextFieldDefaultImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellType.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellType.java index 13e673d94..0b1061c20 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellType.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellType.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeCheckBox.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeCheckBox.java index d7fae1cfb..d4fd8bf6e 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeCheckBox.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeCheckBox.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeComboBox.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeComboBox.java index 8c6f3ea56..ff3213286 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeComboBox.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeComboBox.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeDate.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeDate.java index f21ae0c59..826c288e2 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeDate.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeDate.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeDateTime.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeDateTime.java index 0ece34585..8f7f2cff5 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeDateTime.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeDateTime.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeLabel.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeLabel.java index 909f37104..75bd30518 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeLabel.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeLabel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeRegex.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeRegex.java index 5959dd320..8ce669678 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeRegex.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeRegex.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldDefault.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldDefault.java index 945ed3e09..7d5611f17 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldDefault.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldDefault.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldInteger.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldInteger.java index 6de395df9..3295edad4 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldInteger.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldInteger.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldNumerical.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldNumerical.java index 33001d2d4..fa552cabd 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldNumerical.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldNumerical.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldTime.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldTime.java index 730fb1826..cdbb438ac 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldTime.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/cells/interfaces/CellTypeTextFieldTime.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/properties/tablepanel/model/TablePanelModel.java b/src/main/java/com/rapidminer/gui/properties/tablepanel/model/TablePanelModel.java index 201f5f91e..8621264cd 100644 --- a/src/main/java/com/rapidminer/gui/properties/tablepanel/model/TablePanelModel.java +++ b/src/main/java/com/rapidminer/gui/properties/tablepanel/model/TablePanelModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/AbstractDataTablePlotterRenderer.java b/src/main/java/com/rapidminer/gui/renderer/AbstractDataTablePlotterRenderer.java index 68eba506f..44b1cdda9 100644 --- a/src/main/java/com/rapidminer/gui/renderer/AbstractDataTablePlotterRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/AbstractDataTablePlotterRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/AbstractDataTableTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/AbstractDataTableTableRenderer.java index 5d6d85826..104c016de 100644 --- a/src/main/java/com/rapidminer/gui/renderer/AbstractDataTableTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/AbstractDataTableTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/AbstractGraphRenderer.java b/src/main/java/com/rapidminer/gui/renderer/AbstractGraphRenderer.java index 721e8c1ed..8ba547de5 100644 --- a/src/main/java/com/rapidminer/gui/renderer/AbstractGraphRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/AbstractGraphRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/AbstractRenderer.java b/src/main/java/com/rapidminer/gui/renderer/AbstractRenderer.java index a8244dc72..747d410b1 100644 --- a/src/main/java/com/rapidminer/gui/renderer/AbstractRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/AbstractRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/AbstractTableModelTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/AbstractTableModelTableRenderer.java index a7989f861..7e51bb2ba 100644 --- a/src/main/java/com/rapidminer/gui/renderer/AbstractTableModelTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/AbstractTableModelTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/AnnotationsRenderer.java b/src/main/java/com/rapidminer/gui/renderer/AnnotationsRenderer.java index dd19320e1..0947eb4f3 100644 --- a/src/main/java/com/rapidminer/gui/renderer/AnnotationsRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/AnnotationsRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/AverageVectorRenderer.java b/src/main/java/com/rapidminer/gui/renderer/AverageVectorRenderer.java index 9d95b69a9..5dd8d015b 100644 --- a/src/main/java/com/rapidminer/gui/renderer/AverageVectorRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/AverageVectorRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/CollectionRenderer.java b/src/main/java/com/rapidminer/gui/renderer/CollectionRenderer.java index f09d14612..815eb5377 100644 --- a/src/main/java/com/rapidminer/gui/renderer/CollectionRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/CollectionRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/DefaultComponentRenderable.java b/src/main/java/com/rapidminer/gui/renderer/DefaultComponentRenderable.java index 00b99ca72..05cb8fafd 100644 --- a/src/main/java/com/rapidminer/gui/renderer/DefaultComponentRenderable.java +++ b/src/main/java/com/rapidminer/gui/renderer/DefaultComponentRenderable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/DefaultComponentRenderer.java b/src/main/java/com/rapidminer/gui/renderer/DefaultComponentRenderer.java index 0e8009e0f..aaa5c7a48 100644 --- a/src/main/java/com/rapidminer/gui/renderer/DefaultComponentRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/DefaultComponentRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/DefaultReadable.java b/src/main/java/com/rapidminer/gui/renderer/DefaultReadable.java index 8505a957e..c2dc8f027 100644 --- a/src/main/java/com/rapidminer/gui/renderer/DefaultReadable.java +++ b/src/main/java/com/rapidminer/gui/renderer/DefaultReadable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/DefaultTextRenderer.java b/src/main/java/com/rapidminer/gui/renderer/DefaultTextRenderer.java index f688221d8..edda1150b 100644 --- a/src/main/java/com/rapidminer/gui/renderer/DefaultTextRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/DefaultTextRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/NonGraphicalRenderer.java b/src/main/java/com/rapidminer/gui/renderer/NonGraphicalRenderer.java index 7da0d4b17..857e07de6 100644 --- a/src/main/java/com/rapidminer/gui/renderer/NonGraphicalRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/NonGraphicalRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/Renderer.java b/src/main/java/com/rapidminer/gui/renderer/Renderer.java index 01456ff5d..f8ded1733 100644 --- a/src/main/java/com/rapidminer/gui/renderer/Renderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/Renderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/RendererService.java b/src/main/java/com/rapidminer/gui/renderer/RendererService.java index a0ee46cf2..97af63955 100644 --- a/src/main/java/com/rapidminer/gui/renderer/RendererService.java +++ b/src/main/java/com/rapidminer/gui/renderer/RendererService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -30,10 +30,8 @@ import java.util.Set; import java.util.TreeSet; import java.util.logging.Level; - import javax.swing.Icon; import javax.swing.ImageIcon; -import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -41,13 +39,16 @@ import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import com.rapidminer.gui.tools.IconSize; import com.rapidminer.gui.tools.SwingTools; +import com.rapidminer.io.process.XMLTools; import com.rapidminer.operator.IOObject; import com.rapidminer.tools.DominatingClassFinder; import com.rapidminer.tools.I18N; import com.rapidminer.tools.LogService; import com.rapidminer.tools.Tools; import com.rapidminer.tools.WebServiceTools; +import com.rapidminer.tools.XMLParserException; /** @@ -60,7 +61,7 @@ */ public class RendererService { - /** Used in {@link RendererService#class2IconMap}. */ + /** Used in the icon maps */ private static class IconData { private final String iconName; @@ -80,7 +81,9 @@ public String getIconName() { } } - private static final IconData ICON_DEFAULT = new IconData("data.png", SwingTools.createIcon("16/data.png")); + private static final IconData ICON_DEFAULT_16 = new IconData("data.png", SwingTools.createIcon("16/data.png")); + private static final IconData ICON_DEFAULT_24 = new IconData("data.png", SwingTools.createIcon("24/data.png")); + private static final IconData ICON_DEFAULT_48 = new IconData("data.png", SwingTools.createIcon("48/data.png")); private static Set objectNames = new TreeSet<>(); @@ -102,7 +105,9 @@ public String getIconName() { private static Map, String> class2NameMap = new HashMap<>(); - private static Map, IconData> class2IconMap = new HashMap<>(); + private static Map, IconData> class2IconMap16x16 = new HashMap<>(); + private static Map, IconData> class2IconMap24x24 = new HashMap<>(); + private static Map, IconData> class2IconMap48x48 = new HashMap<>(); private static boolean isInitialized = false; @@ -150,7 +155,7 @@ public static void init(String rendererFileName, InputStream in, ClassLoader cla LogService.getRoot().log(Level.CONFIG, "com.rapidminer.gui.renderer.RendererService.loading_renderers", rendererFileName); try { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in); + Document document = XMLTools.createDocumentBuilder().parse(in); Element ioObjectsElement = document.getDocumentElement(); if (ioObjectsElement.getTagName().equals("ioobjects")) { NodeList ioObjectNodes = ioObjectsElement.getElementsByTagName("ioobject"); @@ -191,17 +196,17 @@ public static void init(String rendererFileName, InputStream in, ClassLoader cla LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.renderer.RendererService.initializing_io_object_description_tag_error"); } - } catch (IOException e) { + } catch (XMLParserException e) { LogService.getRoot().log( Level.WARNING, I18N.getMessage(LogService.getRoot().getResourceBundle(), - "com.rapidminer.gui.renderer.RendererService.initializing_io_object_description_parsing_error", - e), e); - } catch (javax.xml.parsers.ParserConfigurationException e) { + "com.rapidminer.gui.renderer.RendererService.initializing_io_object_description_error", e), e); + } catch (IOException e) { LogService.getRoot().log( Level.WARNING, I18N.getMessage(LogService.getRoot().getResourceBundle(), - "com.rapidminer.gui.renderer.RendererService.initializing_io_object_description_error", e), e); + "com.rapidminer.gui.renderer.RendererService.initializing_io_object_description_parsing_error", + e), e); } catch (SAXException e) { LogService.getRoot().log( Level.WARNING, @@ -265,11 +270,22 @@ public static void registerRenderers(String reportableName, String className, bo reportableMap.add(reportableName); } - // try to create icon + // try to create icons if (iconName != null && !iconName.isEmpty()) { + // 16x16 ImageIcon icon = SwingTools.createIcon("16/" + iconName); if (icon != null) { - class2IconMap.put(clazz, new IconData(iconName, icon)); + class2IconMap16x16.put(clazz, new IconData(iconName, icon)); + } + // 24x24 + icon = SwingTools.createIcon("24/" + iconName); + if (icon != null) { + class2IconMap24x24.put(clazz, new IconData(iconName, icon)); + } + // 48x48 + icon = SwingTools.createIcon("48/" + iconName); + if (icon != null) { + class2IconMap48x48.put(clazz, new IconData(iconName, icon)); } } @@ -364,35 +380,66 @@ public static Renderer getRenderer(String reportableName, String rendererName) { /** * This returns the icon registered for the given class or a default icon, if nothing has been - * registered. + * registered. Returns size {@link IconSize#SMALL}. */ public static Icon getIcon(Class objectClass) { - return getIconData(objectClass).getIcon(); + return getIconData(objectClass, IconSize.SMALL).getIcon(); + } + + /** + * This returns the icon registered for the given class or a default icon, if nothing has been + * registered. Returns the specified {@link IconSize}. + * + * @since 8.1 + */ + public static Icon getIcon(Class objectClass, IconSize iconSize) { + return getIconData(objectClass, iconSize).getIcon(); } /** * This returns the icon name registered for the given class or a default icon, if nothing has - * been registered. + * been registered. Returns size {@link IconSize#SMALL}. */ public static String getIconName(Class objectClass) { - return getIconData(objectClass).getIconName(); + return getIconData(objectClass, IconSize.SMALL).getIconName(); } - private static IconData getIconData(Class objectClass) { - if (objectClass == null) { - return ICON_DEFAULT; + /** + * This returns the icon name registered for the given class or a default icon, if nothing has + * been registered. Returns the specified {@link IconSize}. + * + * @since 8.1 + */ + public static String getIconName(Class objectClass, IconSize iconSize) { + return getIconData(objectClass, iconSize).getIconName(); + } + + private static IconData getIconData(Class objectClass, IconSize iconSize) { + IconData icon = null; + Map, IconData> iconMap; + IconData defaultIcon; + switch (iconSize) { + case HUGE: + iconMap = class2IconMap48x48; + defaultIcon = ICON_DEFAULT_48; + break; + case LARGE: + iconMap = class2IconMap24x24; + defaultIcon = ICON_DEFAULT_24; + break; + case SMALL: + default: + iconMap = class2IconMap16x16; + defaultIcon = ICON_DEFAULT_16; + break; } - IconData icon = class2IconMap.get(objectClass); - if (icon == null) { - for (Entry, IconData> renderableClassEntry : class2IconMap.entrySet()) { - if (renderableClassEntry.getKey().isAssignableFrom(objectClass)) { - class2IconMap.put(objectClass, renderableClassEntry.getValue()); - return renderableClassEntry.getValue(); - } + if (objectClass != null) { + icon = iconMap.get(objectClass); + if (icon == null) { + icon = updateIconData(objectClass, iconMap); } - return ICON_DEFAULT; } - return icon; + return icon != null ? icon : defaultIcon; } /** @@ -425,4 +472,24 @@ public static Renderer createRenderer(IOObject ioobject, String rendererName) { public static boolean isInitialized() { return isInitialized; } + + /** + * Try to find the icon of a superclass and set it as the new type icon. + * + * @return the icon or {@code null} + */ + private static IconData updateIconData(Class objectClass, Map, IconData> class2IconMap) { + IconData icon = null; + Map, IconData> clonedMap; + synchronized (class2IconMap) { + clonedMap = new HashMap<>(class2IconMap); + } + for (Entry, IconData> renderableClassEntry : clonedMap.entrySet()) { + if (renderableClassEntry.getKey().isAssignableFrom(objectClass)) { + class2IconMap.put(objectClass, renderableClassEntry.getValue()); + icon = renderableClassEntry.getValue(); + } + } + return icon; + } } diff --git a/src/main/java/com/rapidminer/gui/renderer/associations/GSPRenderer.java b/src/main/java/com/rapidminer/gui/renderer/associations/GSPRenderer.java index 7c182d94d..5356d14ed 100644 --- a/src/main/java/com/rapidminer/gui/renderer/associations/GSPRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/associations/GSPRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelCentroidPlotRenderer.java b/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelCentroidPlotRenderer.java index f2d922374..b94ac3781 100644 --- a/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelCentroidPlotRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelCentroidPlotRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelCentroidTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelCentroidTableRenderer.java index 0c02a0b86..0163916df 100644 --- a/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelCentroidTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelCentroidTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelDendogrammRenderer.java b/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelDendogrammRenderer.java index 2e747105e..0ecd0035d 100644 --- a/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelDendogrammRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelDendogrammRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelFolderRenderer.java b/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelFolderRenderer.java index 78d4d187b..283be04b7 100644 --- a/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelFolderRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelFolderRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelGraphRenderer.java b/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelGraphRenderer.java index 8aa5259f3..364f39ada 100644 --- a/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelGraphRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/cluster/ClusterModelGraphRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetDataRenderer.java b/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetDataRenderer.java index 1978408a7..205ec8b0e 100644 --- a/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetDataRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetDataRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetMetaDataRenderer.java b/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetMetaDataRenderer.java index cd74f1ba8..ffb8b9cc9 100644 --- a/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetMetaDataRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetMetaDataRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetPlotRenderer.java b/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetPlotRenderer.java index 77fc528ef..02f21ca0f 100644 --- a/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetPlotRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/data/ExampleSetPlotRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/itemsets/AssociationRulesGraphRenderer.java b/src/main/java/com/rapidminer/gui/renderer/itemsets/AssociationRulesGraphRenderer.java index cf7feb308..b267a38fe 100644 --- a/src/main/java/com/rapidminer/gui/renderer/itemsets/AssociationRulesGraphRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/itemsets/AssociationRulesGraphRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/itemsets/AssociationRulesTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/itemsets/AssociationRulesTableRenderer.java index 25370d733..e08a8966f 100644 --- a/src/main/java/com/rapidminer/gui/renderer/itemsets/AssociationRulesTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/itemsets/AssociationRulesTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/itemsets/FrequentItemSetsTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/itemsets/FrequentItemSetsTableRenderer.java index 5c7e5c6af..e12e6caf8 100644 --- a/src/main/java/com/rapidminer/gui/renderer/itemsets/FrequentItemSetsTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/itemsets/FrequentItemSetsTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixPairwiseRenderer.java b/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixPairwiseRenderer.java index 0b1de3b55..7574712b8 100644 --- a/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixPairwiseRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixPairwiseRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixPlotRenderer.java b/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixPlotRenderer.java index 257242f5a..476d97fb6 100644 --- a/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixPlotRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixPlotRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixTableRenderer.java index 449f4636c..9d5d84a6f 100644 --- a/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/math/NumericalMatrixTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/math/RainflowMatrixPlotRenderer.java b/src/main/java/com/rapidminer/gui/renderer/math/RainflowMatrixPlotRenderer.java index 6d5f5c113..c38a28fb0 100644 --- a/src/main/java/com/rapidminer/gui/renderer/math/RainflowMatrixPlotRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/math/RainflowMatrixPlotRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/math/RainflowMatrixTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/math/RainflowMatrixTableRenderer.java index 43628db1f..51e5c1310 100644 --- a/src/main/java/com/rapidminer/gui/renderer/math/RainflowMatrixTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/math/RainflowMatrixTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/DelegationModelRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/DelegationModelRenderer.java index ebcbf9844..15b93b10f 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/DelegationModelRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/DelegationModelRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/DistributionModelPlotRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/DistributionModelPlotRenderer.java index ddd707717..d1da4063b 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/DistributionModelPlotRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/DistributionModelPlotRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/DistributionModelTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/DistributionModelTableRenderer.java index de68b2784..c402c4ce1 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/DistributionModelTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/DistributionModelTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelEigenvalueRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelEigenvalueRenderer.java index 86e3a8cea..8c3546727 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelEigenvalueRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelEigenvalueRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelEigenvectorRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelEigenvectorRenderer.java index 87771858d..c4b68a822 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelEigenvectorRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelEigenvectorRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelVariancePlotRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelVariancePlotRenderer.java index b424a5527..30ead276d 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelVariancePlotRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/EigenvectorModelVariancePlotRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/HyperModelWeightsRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/HyperModelWeightsRenderer.java index 8fb22b845..345193f19 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/HyperModelWeightsRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/HyperModelWeightsRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/HyperplaneModelRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/HyperplaneModelRenderer.java index 510faac75..e5fe9d21f 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/HyperplaneModelRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/HyperplaneModelRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/ImprovedNeuralNetModelRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/ImprovedNeuralNetModelRenderer.java index 1aeb1faf8..5871f0a3e 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/ImprovedNeuralNetModelRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/ImprovedNeuralNetModelRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/KernelModelPlotRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/KernelModelPlotRenderer.java index 2a012015b..3596a6647 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/KernelModelPlotRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/KernelModelPlotRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/KernelModelSupportVectorRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/KernelModelSupportVectorRenderer.java index 38514f178..4d837eee4 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/KernelModelSupportVectorRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/KernelModelSupportVectorRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/KernelModelWeightsRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/KernelModelWeightsRenderer.java index 2eeccde52..a397785af 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/KernelModelWeightsRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/KernelModelWeightsRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/LinearRegressionModelTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/LinearRegressionModelTableRenderer.java index eaa373bb3..ff1a9385e 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/LinearRegressionModelTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/LinearRegressionModelTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/LocalPolynomialRegressionModelPlotRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/LocalPolynomialRegressionModelPlotRenderer.java index edad4df98..963b16ca4 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/LocalPolynomialRegressionModelPlotRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/LocalPolynomialRegressionModelPlotRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/LocalPolynomialRegressionModelTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/LocalPolynomialRegressionModelTableRenderer.java index 1f2ff841e..a9a5d84c4 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/LocalPolynomialRegressionModelTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/LocalPolynomialRegressionModelTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/MetaModelRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/MetaModelRenderer.java index 8a9b92df7..727c0918f 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/MetaModelRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/MetaModelRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/RuleSetRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/RuleSetRenderer.java index 59890da27..825943310 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/RuleSetRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/RuleSetRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/SVDModelCumulativePlotRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/SVDModelCumulativePlotRenderer.java index 29407cdc9..f9950f8a7 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/SVDModelCumulativePlotRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/SVDModelCumulativePlotRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/SVDModelValueRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/SVDModelValueRenderer.java index 918b8c0c9..b27f8fe58 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/SVDModelValueRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/SVDModelValueRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/SVDModelVectorRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/SVDModelVectorRenderer.java index 9df64da27..068f4a7a8 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/SVDModelVectorRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/SVDModelVectorRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/models/TreeModelGraphRenderer.java b/src/main/java/com/rapidminer/gui/renderer/models/TreeModelGraphRenderer.java index ec3bc4cb7..e647ef29b 100644 --- a/src/main/java/com/rapidminer/gui/renderer/models/TreeModelGraphRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/models/TreeModelGraphRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/performance/AnovaCalculatorViewerRenderer.java b/src/main/java/com/rapidminer/gui/renderer/performance/AnovaCalculatorViewerRenderer.java index cbf72fe5e..84114fda9 100644 --- a/src/main/java/com/rapidminer/gui/renderer/performance/AnovaCalculatorViewerRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/performance/AnovaCalculatorViewerRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/performance/AreaUnderCurveRenderer.java b/src/main/java/com/rapidminer/gui/renderer/performance/AreaUnderCurveRenderer.java index 150140e5b..2817d924e 100644 --- a/src/main/java/com/rapidminer/gui/renderer/performance/AreaUnderCurveRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/performance/AreaUnderCurveRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/performance/BinaryClassificationPerformanceRenderer.java b/src/main/java/com/rapidminer/gui/renderer/performance/BinaryClassificationPerformanceRenderer.java index 4cb06b2ef..3c0521279 100644 --- a/src/main/java/com/rapidminer/gui/renderer/performance/BinaryClassificationPerformanceRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/performance/BinaryClassificationPerformanceRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/performance/MultiClassificationPerformanceRenderer.java b/src/main/java/com/rapidminer/gui/renderer/performance/MultiClassificationPerformanceRenderer.java index 0a7ca87c4..425e0f54a 100644 --- a/src/main/java/com/rapidminer/gui/renderer/performance/MultiClassificationPerformanceRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/performance/MultiClassificationPerformanceRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/performance/PerformanceVectorRenderer.java b/src/main/java/com/rapidminer/gui/renderer/performance/PerformanceVectorRenderer.java index 30eef9e58..9ca5632fd 100644 --- a/src/main/java/com/rapidminer/gui/renderer/performance/PerformanceVectorRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/performance/PerformanceVectorRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/performance/ROCComparisonRenderer.java b/src/main/java/com/rapidminer/gui/renderer/performance/ROCComparisonRenderer.java index 46d784a2e..fe35f7ed8 100644 --- a/src/main/java/com/rapidminer/gui/renderer/performance/ROCComparisonRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/performance/ROCComparisonRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/performance/TTestSignificanceTestRenderer.java b/src/main/java/com/rapidminer/gui/renderer/performance/TTestSignificanceTestRenderer.java index 2d3a94a3d..60aa36693 100644 --- a/src/main/java/com/rapidminer/gui/renderer/performance/TTestSignificanceTestRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/performance/TTestSignificanceTestRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/performance/WeightedMultiClassPerformanceRenderer.java b/src/main/java/com/rapidminer/gui/renderer/performance/WeightedMultiClassPerformanceRenderer.java index 75b96a967..07b59f0dd 100644 --- a/src/main/java/com/rapidminer/gui/renderer/performance/WeightedMultiClassPerformanceRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/performance/WeightedMultiClassPerformanceRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityGraphRenderer.java b/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityGraphRenderer.java index 74986d58b..08d7d4555 100644 --- a/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityGraphRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityGraphRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityHistogramRenderer.java b/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityHistogramRenderer.java index 475db83cd..ad503a781 100644 --- a/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityHistogramRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityHistogramRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityKDistanceRenderer.java b/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityKDistanceRenderer.java index 944ceff9d..1e526080e 100644 --- a/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityKDistanceRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityKDistanceRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityTableRenderer.java index 0107a46b9..213d744c0 100644 --- a/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/similarity/SimilarityTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/visualization/AnovaMatrixRenderer.java b/src/main/java/com/rapidminer/gui/renderer/visualization/AnovaMatrixRenderer.java index e7bb7da82..d1145f6ca 100644 --- a/src/main/java/com/rapidminer/gui/renderer/visualization/AnovaMatrixRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/visualization/AnovaMatrixRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/visualization/LiftChartRenderer.java b/src/main/java/com/rapidminer/gui/renderer/visualization/LiftChartRenderer.java index 581a027b3..0e8746c79 100644 --- a/src/main/java/com/rapidminer/gui/renderer/visualization/LiftChartRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/visualization/LiftChartRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/visualization/SOMModelVisualizationRenderer.java b/src/main/java/com/rapidminer/gui/renderer/visualization/SOMModelVisualizationRenderer.java index 7582be336..498b57fcd 100644 --- a/src/main/java/com/rapidminer/gui/renderer/visualization/SOMModelVisualizationRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/visualization/SOMModelVisualizationRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/visualization/TransitionGraphRenderer.java b/src/main/java/com/rapidminer/gui/renderer/visualization/TransitionGraphRenderer.java index 89734b341..f5386a628 100644 --- a/src/main/java/com/rapidminer/gui/renderer/visualization/TransitionGraphRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/visualization/TransitionGraphRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/weights/AttributeWeightsPlotRenderer.java b/src/main/java/com/rapidminer/gui/renderer/weights/AttributeWeightsPlotRenderer.java index f787f026e..40da39626 100644 --- a/src/main/java/com/rapidminer/gui/renderer/weights/AttributeWeightsPlotRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/weights/AttributeWeightsPlotRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/renderer/weights/AttributeWeightsTableRenderer.java b/src/main/java/com/rapidminer/gui/renderer/weights/AttributeWeightsTableRenderer.java index 68e9940d2..4eb80832e 100644 --- a/src/main/java/com/rapidminer/gui/renderer/weights/AttributeWeightsTableRenderer.java +++ b/src/main/java/com/rapidminer/gui/renderer/weights/AttributeWeightsTableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/safemode/SafeMode.java b/src/main/java/com/rapidminer/gui/safemode/SafeMode.java index 28d6ac2b3..05ed2a191 100644 --- a/src/main/java/com/rapidminer/gui/safemode/SafeMode.java +++ b/src/main/java/com/rapidminer/gui/safemode/SafeMode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/safemode/SafeModeDialog.java b/src/main/java/com/rapidminer/gui/safemode/SafeModeDialog.java index c83d751bd..092eef512 100644 --- a/src/main/java/com/rapidminer/gui/safemode/SafeModeDialog.java +++ b/src/main/java/com/rapidminer/gui/safemode/SafeModeDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/search/GlobalSearchCategoryPanel.java b/src/main/java/com/rapidminer/gui/search/GlobalSearchCategoryPanel.java new file mode 100644 index 000000000..41e0de94e --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/GlobalSearchCategoryPanel.java @@ -0,0 +1,348 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DragGestureListener; +import java.awt.dnd.DragSource; +import java.awt.event.ActionEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.List; +import java.util.logging.Level; +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.border.Border; +import javax.swing.event.EventListenerList; + +import com.rapidminer.gui.look.Colors; +import com.rapidminer.gui.search.event.GlobalSearchInteractionEvent; +import com.rapidminer.gui.search.event.GlobalSearchInteractionEvent.InteractionEvent; +import com.rapidminer.gui.search.event.GlobalSearchInteractionListener; +import com.rapidminer.gui.search.model.GlobalSearchRow; +import com.rapidminer.gui.tools.ResourceAction; +import com.rapidminer.gui.tools.components.LinkLocalButton; +import com.rapidminer.search.GlobalSearchCategory; +import com.rapidminer.search.GlobalSearchResult; +import com.rapidminer.search.GlobalSearchUtilities; +import com.rapidminer.tools.LogService; +import com.rapidminer.tools.Tools; +import com.rapidminer.tools.usagestats.ActionStatisticsCollector; + + +/** + * Panel visualizing a single {@link GlobalSearchCategory}. + * + * @author Marco Boeck + * @since 8.1 + */ +class GlobalSearchCategoryPanel extends JPanel { + + + private static final Color BORDER_COLOR = Colors.BUTTON_BORDER_DISABLED; + private static final Border TOP_BORDER = BorderFactory.createMatteBorder(1, 0, 0, 0, BORDER_COLOR); + private static final Border DIVIDER_BORDER = BorderFactory.createMatteBorder(0, 1, 0, 0, BORDER_COLOR); + private static final Border CATEGORY_LABEL_EMPTY_BORDER = BorderFactory.createEmptyBorder(10, 10, 10, 10); + private static final Border CATEGORY_COMPONENT_EMPTY_BORDER = BorderFactory.createEmptyBorder(4, 5, 4, 0); + private static final Dimension I18N_NAME_SIZE = new Dimension(100, 30); + + /** event listener for this panel */ + private final EventListenerList eventListener; + + private String categoryId; + private JPanel contentPanel; + + private final transient GlobalSearchController controller; + + + /** + * Create the panel displaying results for a global search category. + * + * @param category + * the category for which this panel is + * @param controller + * the controller instance for UI manipulation + * @throws IllegalArgumentException + * if arguments are {@code null} or invalid; if no GUI provider is registered for the given category + */ + protected GlobalSearchCategoryPanel(final GlobalSearchCategory category, final GlobalSearchController controller) { + if (category == null || category.getCategoryId() == null) { + throw new IllegalArgumentException("category and its ID must not be null!"); + } + this.categoryId = category.getCategoryId(); + GlobalSearchableGUIProvider provider = GlobalSearchGUIRegistry.INSTANCE.getGUIProviderForSearchCategoryById(categoryId); + if (provider == null) { + throw new IllegalArgumentException("GlobalSearchableGUIProvider must not be null for category " + categoryId + "!"); + } + + this.controller = controller; + this.eventListener = new EventListenerList(); + + initGUI(provider); + } + + /** + * Override to help debugging. + */ + @Override + public String toString() { + return "GSCatPanel: " + categoryId + " - #children: " + contentPanel.getComponentCount(); + } + + /** + * Adds a {@link GlobalSearchInteractionListener} which will be informed of all user interactions with {@link GlobalSearchRow}s. + * + * @param listener + * the listener instance to add + */ + protected void registerEventListener(final GlobalSearchInteractionListener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener must not be null!"); + } + eventListener.add(GlobalSearchInteractionListener.class, listener); + } + + /** + * Removes the {@link GlobalSearchInteractionListener} from this model. + * + * @param listener + * the listener instance to remove + */ + protected void removeEventListener(final GlobalSearchInteractionListener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener must not be null!"); + } + eventListener.remove(GlobalSearchInteractionListener.class, listener); + } + + /** + * Sets the given rows as the already displayed results. Overwrites potentially displayed results. + * + * @param rows + * the rows to display + * @param result + * the search result instance + */ + protected void setSearchRows(final List rows, final GlobalSearchResult result) { + contentPanel.removeAll(); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weightx = 1.0d; + gbc.fill = GridBagConstraints.HORIZONTAL; + gbc.anchor = GridBagConstraints.WEST; + + for (GlobalSearchRow row : rows) { + gbc.gridy += 1; + contentPanel.add(createUI(row), gbc); + } + + long deltaDisplayedResultsVsMaxResults = result.getPotentialNumberOfResults() - rows.size(); + if (deltaDisplayedResultsVsMaxResults > 0) { + gbc.gridy += 1; + + String remainingNumber = Tools.formatIntegerIfPossible(deltaDisplayedResultsVsMaxResults, 0, true); + LinkLocalButton loadMoreButton = new LinkLocalButton(new ResourceAction("global_search.load_more", remainingNumber) { + + @Override + public void loggedActionPerformed(ActionEvent e) { + controller.loadMoreRows(result, categoryId); + } + }); + contentPanel.add(loadMoreButton, gbc); + } + + // fill at bottom so components are at top + if (!rows.isEmpty()) { + gbc.gridy += 1; + gbc.weighty = 1.0d; + gbc.fill = GridBagConstraints.VERTICAL; + contentPanel.add(new JLabel(), gbc); + } + } + + /** + * Returns if any search results are displayed in this category panel or if a search is pending. + * + * @return {@code true} if there are currently search results displayed or it is pending; {@code false} otherwise + */ + protected boolean hasResults() { + return contentPanel.getComponentCount() > 0; + } + + /** + * Init the GUI. + * + * @param provider + * the provider instance, must not be {@code null} + */ + private void initGUI(final GlobalSearchableGUIProvider provider) { + setLayout(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + setOpaque(false); + setBorder(TOP_BORDER); + + JLabel i18nName = new JLabel(); + i18nName.setBackground(Colors.WINDOW_BACKGROUND); + i18nName.setForeground(Color.GRAY); + i18nName.setOpaque(true); + i18nName.setVerticalAlignment(SwingConstants.TOP); + i18nName.setHorizontalAlignment(SwingConstants.LEFT); + i18nName.setFont(i18nName.getFont().deriveFont(Font.BOLD)); + i18nName.setText(provider.getI18nNameForSearchable()); + i18nName.setMinimumSize(I18N_NAME_SIZE); + i18nName.setPreferredSize(I18N_NAME_SIZE); + i18nName.setMaximumSize(I18N_NAME_SIZE); + i18nName.setBorder(CATEGORY_LABEL_EMPTY_BORDER); + + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weighty = 1.0d; + gbc.fill = GridBagConstraints.VERTICAL; + add(i18nName, gbc); + + contentPanel = new JPanel(); + contentPanel.setLayout(new GridBagLayout()); + contentPanel.setBorder(DIVIDER_BORDER); + contentPanel.setBackground(Colors.WHITE); + + gbc.gridx = 1; + gbc.weightx = 1.0d; + gbc.weighty = 1.0d; + gbc.fill = GridBagConstraints.BOTH; + add(contentPanel, gbc); + } + + /** + * Creates the ui component for the given document. If the document cannot be mapped to any registered {@link + * GlobalSearchableGUIProvider}, it will be silently skipped and this returns {@code null}. + * + * @param row + * the search row instance for which to create the UI + * @return the component, never {@code null} + */ + private JComponent createUI(final GlobalSearchRow row) { + final JPanel wrapperPanel = new JPanel(); + wrapperPanel.setOpaque(false); + wrapperPanel.setBackground(Colors.TEXT_HIGHLIGHT_BACKGROUND); + wrapperPanel.setLayout(new BorderLayout()); + + final GlobalSearchableGUIProvider provider = GlobalSearchGUIRegistry.INSTANCE.getGUIProviderForSearchCategoryById(categoryId); + JComponent component = provider != null ? provider.getGUIListComponentForDocument(row.getDoc(), row.getBestFragments()) : null; + if (provider == null || component == null) { + LogService.getRoot().log(Level.SEVERE, "com.rapidminer.gui.search.globalsearchdialog.no_gui_component", categoryId); + // to avoid an empty category, provide a very basic UI that only shows the name of a row + return new JLabel(row.getDoc().get(GlobalSearchUtilities.FIELD_NAME)); + } + if (component.getPreferredSize().getHeight() > GlobalSearchGUIUtilities.MAX_HEIGHT) { + LogService.getRoot().log(Level.SEVERE, "com.rapidminer.gui.search.globalsearchdialog.gui_component_too_high", categoryId); + // component does not obey height limit of 40px according to JavaDoc. Provide a very basic UI that only shows the name of a row + component = new JLabel(row.getDoc().get(GlobalSearchUtilities.FIELD_NAME)); + } + if (component.isOpaque()) { + LogService.getRoot().log(Level.SEVERE, "com.rapidminer.gui.search.globalsearchdialog.gui_component_opaque", categoryId); + // component is opaque which is also forbidden according to JavaDoc. Provide a very basic UI that only shows the name of a row + component = new JLabel(row.getDoc().get(GlobalSearchUtilities.FIELD_NAME)); + } + component.setBorder(CATEGORY_COMPONENT_EMPTY_BORDER); + wrapperPanel.add(component, BorderLayout.CENTER); + + // add mouse listener for hovering and activation + MouseListener activationMouseListener = new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton(e) || e.getClickCount() != 2) { + return; + } + + GlobalSearchableGUIProvider.Veto providerVeto = new GlobalSearchableGUIProvider.Veto(); + provider.searchResultTriggered(row.getDoc(), providerVeto); + // only fire interaction if provider did not veto it + if (!providerVeto.isVeto()) { + ActionStatisticsCollector.getInstance().logGlobalSearchAction(controller.getLastQuery(), categoryId, row.getDoc().getField(GlobalSearchUtilities.FIELD_NAME).stringValue()); + + fireInteraction(InteractionEvent.RESULT_ACTIVATED, row); + + wrapperPanel.setOpaque(false); + wrapperPanel.repaint(); + } + } + + @Override + public void mouseEntered(MouseEvent e) { + wrapperPanel.setOpaque(true); + wrapperPanel.repaint(); + + provider.searchResultBrowsed(row.getDoc()); + fireInteraction(InteractionEvent.RESULT_BROWSED, row); + } + + @Override + public void mouseExited(MouseEvent e) { + wrapperPanel.setOpaque(false); + wrapperPanel.repaint(); + } + }; + component.addMouseListener(activationMouseListener); + component.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + + // add drag&drop support if applicable + if (provider.isDragAndDropSupported(row.getDoc())) { + DragGestureListener dragSupport = provider.getDragAndDropSupport(row.getDoc()); + if (dragSupport != null) { + DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer(component, DnDConstants.ACTION_MOVE, dragSupport); + } else { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.search.globalsearchdialog.missing_drag_support", categoryId); + } + } + + + return wrapperPanel; + } + + /** + * Fires the given {@link InteractionEvent}. + * + * @param type + * the type of the event + * @param row + * the row with which the interaction happened + */ + private void fireInteraction(final InteractionEvent type, final GlobalSearchRow row) { + // Notify the listeners + for (GlobalSearchInteractionListener listener : eventListener.getListeners(GlobalSearchInteractionListener.class)) { + GlobalSearchInteractionEvent e = new GlobalSearchInteractionEvent(type, row); + listener.interaction(e); + } + } + +} diff --git a/src/main/java/com/rapidminer/gui/search/GlobalSearchController.java b/src/main/java/com/rapidminer/gui/search/GlobalSearchController.java new file mode 100644 index 000000000..963d47a74 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/GlobalSearchController.java @@ -0,0 +1,259 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicInteger; +import javax.swing.SwingWorker; +import javax.swing.Timer; + +import org.apache.lucene.queryparser.classic.ParseException; +import org.apache.lucene.search.ScoreDoc; + +import com.rapidminer.gui.search.model.GlobalSearchModel; +import com.rapidminer.search.GlobalSearchCategory; +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchResult; +import com.rapidminer.search.GlobalSearchResultBuilder; +import com.rapidminer.tools.I18N; +import com.rapidminer.tools.usagestats.ActionStatisticsCollector; + + +/** + * Controller for the {@link GlobalSearchDialog} and {@link GlobalSearchPanel}. + * + * @author Marco Boeck + * @since 8.1 + */ +final class GlobalSearchController { + + /** number of search results that are displayed by default per category if all categories are searched */ + private static final int NUMBER_OF_RESULTS_ALL_CATS = 3; + + /** number of search results that are displayed by default if only a single category is searched */ + private static final int NUMBER_OF_RESULTS_SINGLE_CAT = 10; + + private final GlobalSearchModel model; + private final GlobalSearchPanel searchPanel; + + private String lastQuery; + private String lastCategoryFilter; + + /** counts the number of global searches. Always incrementing when a new search is triggered */ + private final AtomicInteger searchCounter; + + + /** + * Creates a new controller instance for the given panel and model instances. + * + * @param searchPanel + * the search panel instance + * @param model + * the model instance + */ + GlobalSearchController(final GlobalSearchPanel searchPanel, final GlobalSearchModel model) { + this.model = model; + this.searchPanel = searchPanel; + if (model == null) { + throw new IllegalArgumentException("model must not be null!"); + } + + this.searchCounter = new AtomicInteger(0); + } + + /** + * Handles loading more results (if there are any) in a {@link SwingWorker}. + * + * @param previousResult + * the results of the already found results for this category + * @param categoryId + * the category to append to + */ + protected void loadMoreRows(final GlobalSearchResult previousResult, final String categoryId) { + // if user already clicked load more rows, don't do anything + if (model.isPending(categoryId)) { + return; + } + + searchOrAppendForCategory(previousResult.getLastResult(), lastQuery, categoryId, lastCategoryFilter != null ? NUMBER_OF_RESULTS_SINGLE_CAT : NUMBER_OF_RESULTS_ALL_CATS); + } + + + /** + * Handles searching in a {@link SwingWorker}. + * + * @param query + * the search query entered by the user + * @param categoryFilter + * the category filter or {@code null} if all categories are to be searched + */ + protected void handleSearch(final String query, final String categoryFilter) { + if (query == null || query.trim().isEmpty()) { + searchPanel.hideComponents(); + searchPanel.requestFocusInWindow(); + return; + } + // should not happen unless Global Search initialization failed completely + if (GlobalSearchRegistry.INSTANCE.getAllSearchCategories().isEmpty()) { + model.setError(I18N.getGUIMessage("gui.dialog.global_search.no_categories.label")); + return; + } + + lastQuery = query; + lastCategoryFilter = categoryFilter; + + // count new search + searchCounter.incrementAndGet(); + + if (categoryFilter != null) { + searchOrAppendForCategory(null, query, categoryFilter, NUMBER_OF_RESULTS_SINGLE_CAT); + } else { + // no filter, search all -> one search per category for easy grouping and concurrency + for (GlobalSearchCategory category : GlobalSearchRegistry.INSTANCE.getAllSearchCategories()) { + searchOrAppendForCategory(null, query, category.getCategoryId(), NUMBER_OF_RESULTS_ALL_CATS); + } + } + } + + /** + * Toggles the search "All Studio" category button in the GlobalSearchPanel as if the user clicked it. + */ + protected void searchAllCategories() { + searchPanel.searchAll(); + } + + /** + * Gets the last category filter. + * + * @return the category id or {@code null} if "All Studio" was last searched + */ + protected String getLastCategoryFilter() { + return lastCategoryFilter; + } + + /** + * Get the model backing the Global Search UI. + * + * @return the model, never {@code null} + */ + protected GlobalSearchModel getModel() { + return model; + } + + /** + * Searches in the given category or appends new search results to the given category. + * + * @param offset + * appends results found after this one. If {@code null}, it's treated as a new search + * @param query + * the query to search for + * @param categoryId + * the category in which to search + * @param resultNumberLimit + * the number of results per search + */ + private void searchOrAppendForCategory(final ScoreDoc offset, final String query, final String categoryId, int resultNumberLimit) { + final int searchCountSnapshot = searchCounter.get(); + SwingWorker worker = new SwingWorker() { + + private Timer updateTimer; + + @Override + protected GlobalSearchResult doInBackground() throws Exception { + model.setPending(categoryId, true); + GlobalSearchResultBuilder builder = new GlobalSearchResultBuilder(query.trim()).setMaxNumberOfResults(resultNumberLimit).setHighlightResult(true); + builder.setSearchCategories(GlobalSearchRegistry.INSTANCE.getSearchCategoryById(categoryId)).setSearchOffset(offset).setSimpleMode(true); + return builder.runSearch(); + } + + @Override + protected void done() { + // if another search has been started before this one could return its result, discard these results + if (searchCounter.get() > searchCountSnapshot) { + return; + } + + try { + model.setPending(categoryId, false); + GlobalSearchResult result = get(); + // no error when grabbing result? Good, search worked, reset error on model and provide results to it + model.setError(null); + + if(updateTimer != null) { + updateTimer.stop(); + } + updateTimer = new Timer(1000, e -> logSearch(result)); + updateTimer.setRepeats(false); + updateTimer.start(); + + if (offset != null) { + model.appendResultForCategory(categoryId, result); + } else { + model.setResultForCategory(categoryId, result); + } + } catch (ExecutionException e) { + handleSearchError(e); + } catch (InterruptedException e) { + // don't care, but don't silently swallow it anyway + Thread.currentThread().interrupt(); + } + } + + /** + * Log the given result to the usage statistics. + * + * @param result from a search in the global search framework + */ + private void logSearch(GlobalSearchResult result) { + if(result != null) { + String searchTerm = lastQuery; + long numResults = result.getPotentialNumberOfResults(); + ActionStatisticsCollector.getInstance().logGlobalSearch(ActionStatisticsCollector.VALUE_TIMEOUT, searchTerm, categoryId, numResults); + } + } + }; + worker.execute(); + } + + /** + * Handles the error when a {@link SwingWorker} fails while searching. + * + * @param e + * the exception of the SwingWorker + */ + private void handleSearchError(ExecutionException e) { + String message = null; + Throwable cause = e.getCause(); + if (cause instanceof ParseException) { + message = cause.getMessage() != null ? cause.getMessage() : cause.toString(); + } else if (cause == null ){ + message = e.getMessage(); + } + + model.clearAllCategories(); + model.setError(message); + } + + /** + * @return the latest executed search query + */ + public String getLastQuery() { + return lastQuery; + } +} diff --git a/src/main/java/com/rapidminer/gui/search/GlobalSearchDialog.java b/src/main/java/com/rapidminer/gui/search/GlobalSearchDialog.java new file mode 100644 index 000000000..89e8694df --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/GlobalSearchDialog.java @@ -0,0 +1,515 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search; + +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.WindowEvent; +import java.awt.event.WindowFocusListener; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.ScrollPaneConstants; +import javax.swing.SwingConstants; +import javax.swing.border.Border; + +import com.rapidminer.gui.look.Colors; +import com.rapidminer.gui.search.event.GlobalSearchCategoryEvent; +import com.rapidminer.gui.search.event.GlobalSearchEventListener; +import com.rapidminer.gui.search.event.GlobalSearchInteractionListener; +import com.rapidminer.gui.search.event.GlobalSearchModelEvent; +import com.rapidminer.gui.search.model.GlobalSearchModel; +import com.rapidminer.gui.tools.ExtendedJScrollPane; +import com.rapidminer.gui.tools.ResourceAction; +import com.rapidminer.gui.tools.SwingTools; +import com.rapidminer.gui.tools.components.ExtendedCardLayout; +import com.rapidminer.gui.tools.components.LinkLocalButton; +import com.rapidminer.search.GlobalSearchCategory; +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchResult; +import com.rapidminer.search.event.GlobalSearchRegistryEvent; +import com.rapidminer.tools.I18N; +import com.rapidminer.tools.LogService; + + +/** + * Dialog that visualizes the Global Search results. + * + * @author Marco Boeck + * @since 8.1 + */ +public class GlobalSearchDialog extends JDialog { + + private static final ImageIcon INFORMATION_ICON = SwingTools.createIcon("24/information.png"); + + private static final Color ERROR_TEXT_COLOR = new Color(255, 63, 58); + private static final Color TOP_BORDER_COLOR = Colors.BUTTON_BORDER_DISABLED; + private static final Color SIDE_BORDER_COLOR = Colors.PANEL_BORDER; + private static final Border TOP_BORDER = BorderFactory.createMatteBorder(1, 0, 0, 0, TOP_BORDER_COLOR); + private static final Border SIDE_BORDER = BorderFactory.createMatteBorder(0, 1, 1, 1, SIDE_BORDER_COLOR); + private static final Border MAIN_EMPTY_BORDER = BorderFactory.createEmptyBorder(0, 0, 0, 2); + private static final String NO_ERROR_MESSAGE = " "; + private static final int FILLER_GRID_Y = 10_000; + private static final float FONT_SIZE_NO_RESULTS = 15f; + + private static final Object CATEGORY_COMPONENT_LOCK = new Object(); + + private static final String CARD_ERROR = "card_error"; + private static final String CARD_NO_RESULTS_GLOBALLY = "card_no_results_all"; + private static final String CARD_NO_RESULTS_IN_CATEGORY = "card_no_results_category"; + private static final String CARD_RESULTS = "card_results"; + + + private final transient GlobalSearchModel model; + private final transient GlobalSearchController controller; + + private JPanel rootPanel; + private CardLayout layout; + + private JTextArea errorText; + private JPanel mainPanel; + + private GridBagConstraints mainPanelGbc; + + private Map categoryComponentMap; + private transient GlobalSearchInteractionListener interactionListener; + + + /** + * Creates a new dialog displaying the contents of the given {@link GlobalSearchModel}. + * + * @param owner + * the frame owner for the dialog + * @param controller + * the controller instance from which the model will be used + */ + public GlobalSearchDialog(final Window owner, final GlobalSearchController controller) { + super(owner, I18N.getMessage(I18N.getGUIBundle(), "gui.dialog.global_search.title"), ModalityType.MODELESS); + + this.controller = controller; + this.model = this.controller.getModel(); + this.categoryComponentMap = new LinkedHashMap<>(); + + // add listener for model changes + model.registerEventListener(new GlobalSearchEventListener() { + + @Override + public void modelChanged(final GlobalSearchModelEvent e) { + SwingTools.invokeLater(() -> { + + handleModelChanged(e); + + pack(); + }); + } + + @Override + public void categoryChanged(final String categoryId, final GlobalSearchCategoryEvent e, final GlobalSearchResult result) { + SwingTools.invokeLater(() -> { + + if (handleCategoryChanged(categoryId, e, result)) { + return; + } + + pack(); + }); + } + }); + + // update UI based on registration/un-registration events + GlobalSearchRegistry.INSTANCE.addEventListener((e, category) -> { + if (e.getEventType() == GlobalSearchRegistryEvent.RegistrationEvent.SEARCH_CATEGORY_REGISTERED) { + addGUIForCategory(category); + } else if (e.getEventType() == GlobalSearchRegistryEvent.RegistrationEvent.SEARCH_CATEGORY_UNREGISTERED) { + removeGUIForCategory(category); + } + }); + + // hide dialog if user clicked on other UI element outside this dialog + addWindowFocusListener(new WindowFocusListener() { + @Override + public void windowGainedFocus(WindowEvent e) { + // ignore + } + + @Override + public void windowLostFocus(WindowEvent e) { + GlobalSearchDialog.this.setVisible(false); + } + }); + + // hide this dialog if user activated search result + interactionListener = e -> { + switch (e.getEventType()) { + case RESULT_BROWSED: + // ignore + break; + case RESULT_ACTIVATED: + GlobalSearchDialog.this.setVisible(false); + break; + default: + // do nothing + } + }; + + + initGUI(); + } + + /** + * Set up the GUI. + */ + private void initGUI() { + setLocationRelativeTo(getOwner()); + setUndecorated(true); + + layout = new ExtendedCardLayout(); + rootPanel = new JPanel(); + rootPanel.setBackground(Colors.WINDOW_BACKGROUND); + rootPanel.setLayout(layout); + getRootPane().setBorder(SIDE_BORDER); + + setupErrorGUI(); + setupNoResultGloballyGUI(); + setupNoResultCategoryGUI(); + setupResultsGUI(); + + setLayout(new BorderLayout()); + JScrollPane scrollPane = new ExtendedJScrollPane(rootPanel); + // no border and never a horizontal scrollbar. This will cut off a tiny portion of the UI but fuck horizontal scrollbars + scrollPane.setBorder(null); + scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + + // if scrolled down, we need a border at top, otherwise there is no border between search panel and dialog + scrollPane.getVerticalScrollBar().addAdjustmentListener(e -> { + if (e.getValueIsAdjusting()) { + return; + } + + if (scrollPane.getVerticalScrollBar().getValue() > scrollPane.getVerticalScrollBar().getMinimum()) { + scrollPane.setBorder(TOP_BORDER); + } else { + scrollPane.setBorder(null); + } + }); + add(scrollPane, BorderLayout.CENTER); + } + + /** + * Handles a model changed event for the Global Search model. + * + * @param e + * the event + */ + private void handleModelChanged(final GlobalSearchModelEvent e) { + switch (e.getEventType()) { + case ERROR_STATUS_CHANGED: + String error = model.getError(); + if (error != null) { + errorText.setText(error); + layout.show(rootPanel, CARD_ERROR); + } else { + errorText.setText(NO_ERROR_MESSAGE); + layout.show(rootPanel, CARD_RESULTS); + } + break; + case ALL_CATEGORIES_REMOVED: + synchronized (CATEGORY_COMPONENT_LOCK) { + // make all components invisible + for (Map.Entry entry : categoryComponentMap.entrySet()) { + if (entry.getValue() != null) { + entry.getValue().setVisible(false); + } + } + + } + break; + default: + // do nothing + } + } + + /** + * Handles a model changed event for the Global Search model. + * + * @param categoryId + * the category for which the event was fired + * @param e + * the event + * @param result + * the search result + * @return {@code true} if caller should return after this call; {@code false} otherwise + */ + private boolean handleCategoryChanged(final String categoryId, final GlobalSearchCategoryEvent e, final GlobalSearchResult result) { + GlobalSearchCategoryPanel gsPanel; + // avoid ConcurrentModificationException if a category is registered while we iterate + synchronized (CATEGORY_COMPONENT_LOCK) { + gsPanel = categoryComponentMap.get(categoryId); + } + + if (gsPanel == null) { + // try to build UI for next search, it should be registered by now + boolean success = addGUIForCategory(GlobalSearchRegistry.INSTANCE.getSearchCategoryById(categoryId)); + if (success) { + // we built the UI now, so handle this event again + return handleCategoryChanged(categoryId, e, result); + } else { + // display no results if we still cannot create UI + if (model.getActiveCategories().isEmpty() && !model.isAnyCategoryPending()) { + displayNoResults(); + } + return false; + } + } + + switch (e.getEventType()) { + case CATEGORY_PENDING_STATUS_CHANGED: + // if something is set to pending, we don't care here. If no longer pending, the rest of the method is relevant though + if (model.isPending(categoryId)) { + return true; + } + break; + case CATEGORY_ROWS_CHANGED: + case CATEGORY_ROWS_APPENDED: + gsPanel.setSearchRows(model.getRowsForCategory(categoryId), result); + break; + default: + // do nothing + } + + if (model.getActiveCategories().isEmpty() && !model.isAnyCategoryPending()) { + // if no search results whatsoever have been found, display special "no results" page + displayNoResults(); + } else { + // either show or hide the category panels depending on whether they have results or not + gsPanel.setVisible(gsPanel.hasResults()); + layout.show(rootPanel, CARD_RESULTS); + } + return false; + } + + /** + * Sets up the GUI card responsible for displaying the actual search results to the user. + */ + private void setupResultsGUI() { + mainPanel = new JPanel(); + mainPanel.setLayout(new GridBagLayout()); + mainPanel.setBorder(MAIN_EMPTY_BORDER); + + mainPanelGbc = new GridBagConstraints(); + mainPanelGbc.gridx = 0; + mainPanelGbc.gridy = 0; + mainPanelGbc.weightx = 1.0d; + mainPanelGbc.fill = GridBagConstraints.HORIZONTAL; + mainPanelGbc.anchor = GridBagConstraints.NORTH; + + // add category panels now + List categories = GlobalSearchGUIUtilities.INSTANCE.sortCategories(GlobalSearchRegistry.INSTANCE.getAllSearchCategories()); + for (GlobalSearchCategory category : categories) { + addGUIForCategory(category); + } + + // filler at bottom so they are sitting nicely at the top + int previousGridY = mainPanelGbc.gridy; + mainPanelGbc.gridy = FILLER_GRID_Y; + mainPanelGbc.weighty = 1.0d; + mainPanelGbc.fill = GridBagConstraints.BOTH; + mainPanel.add(new JLabel(), mainPanelGbc); + + // reset layout so later additions are above the filler + mainPanelGbc.gridy = previousGridY; + mainPanelGbc.weighty = 0.0d; + mainPanelGbc.fill = GridBagConstraints.NONE; + + rootPanel.add(mainPanel, CARD_RESULTS); + } + + /** + * Sets up the GUI card responsible for displaying no result information on a specific category search to the user. + */ + private void setupNoResultCategoryGUI() { + JPanel noResultPanel = new JPanel(); + noResultPanel.setLayout(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + + noResultPanel.setOpaque(false); + noResultPanel.setBorder(TOP_BORDER); + + // no results label + JLabel noResults = new JLabel(I18N.getGUIMessage("gui.dialog.global_search.no_results.label")); + noResults.setIcon(INFORMATION_ICON); + noResults.setFont(noResults.getFont().deriveFont(FONT_SIZE_NO_RESULTS)); + noResults.setHorizontalAlignment(SwingConstants.LEFT); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weightx = 0.0d; + gbc.weighty = 1.0d; + gbc.fill = GridBagConstraints.VERTICAL; + gbc.anchor = GridBagConstraints.WEST; + gbc.insets = new Insets(3, 10, 3, 0); + noResultPanel.add(noResults, gbc); + + // filler in middle + gbc.gridx += 1; + gbc.weightx = 1.0d; + gbc.weighty = 1.0d; + gbc.fill = GridBagConstraints.BOTH; + gbc.insets = new Insets(0, 0, 0, 0); + noResultPanel.add(new JLabel(), gbc); + + // "Try searching everywhere" button + LinkLocalButton searchAllButton = new LinkLocalButton(new ResourceAction("global_search.search_all_instead") { + + @Override + public void loggedActionPerformed(ActionEvent e) { + controller.searchAllCategories(); + } + }); + gbc.gridx += 1; + gbc.gridy = 0; + gbc.weightx = 1.0d; + gbc.fill = GridBagConstraints.VERTICAL; + gbc.insets = new Insets(3, 0, 3, 5); + gbc.anchor = GridBagConstraints.EAST; + noResultPanel.add(searchAllButton, gbc); + + rootPanel.add(noResultPanel, CARD_NO_RESULTS_IN_CATEGORY); + } + + /** + * Sets up the GUI card responsible for displaying no result information on an "All Studio" search to the user. + */ + private void setupNoResultGloballyGUI() { + JPanel noResultPanel = new JPanel(); + noResultPanel.setLayout(new GridBagLayout()); + GridBagConstraints gbc = new GridBagConstraints(); + + noResultPanel.setOpaque(false); + noResultPanel.setBorder(TOP_BORDER); + + // no results label + JLabel noResults = new JLabel(I18N.getGUIMessage("gui.dialog.global_search.no_results.label")); + noResults.setIcon(INFORMATION_ICON); + noResults.setFont(noResults.getFont().deriveFont(FONT_SIZE_NO_RESULTS)); + noResults.setHorizontalAlignment(SwingConstants.LEFT); + gbc.weightx = 1.0d; + gbc.weighty = 1.0d; + gbc.fill = GridBagConstraints.BOTH; + gbc.insets = new Insets(3, 10, 3, 10); + noResultPanel.add(noResults, gbc); + + rootPanel.add(noResultPanel, CARD_NO_RESULTS_GLOBALLY); + } + + /** + * Sets up the GUI card responsible for displaying error information to the user. + */ + private void setupErrorGUI() { + JPanel errorPanel = new JPanel(); + errorPanel.setLayout(new GridBagLayout()); + errorPanel.setOpaque(false); + errorPanel.setBorder(TOP_BORDER); + + errorText = new JTextArea(); + errorText.setLineWrap(true); + errorText.setWrapStyleWord(true); + errorText.setForeground(ERROR_TEXT_COLOR); + errorText.setBackground(Colors.WINDOW_BACKGROUND); + errorText.setEditable(false); + errorText.setBorder(null); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.weightx = 1.0d; + gbc.weighty = 1.0d; + gbc.fill = GridBagConstraints.BOTH; + gbc.insets = new Insets(5, 5, 5, 5); + errorPanel.add(errorText, gbc); + + rootPanel.add(errorPanel, CARD_ERROR); + } + + /** + * Display the appropriate "No Results" card. + */ + private void displayNoResults() { + if (controller.getLastCategoryFilter() != null) { + layout.show(rootPanel, CARD_NO_RESULTS_IN_CATEGORY); + } else { + layout.show(rootPanel, CARD_NO_RESULTS_GLOBALLY); + } + } + + /** + * Creates the UI for the given category. Call when a category has been registered to the {@link GlobalSearchRegistry}. + * + * @param category + * the category for which the UI should be added + * @return {@code true} if the UI was successfully added; {@code false} otherwise + */ + private boolean addGUIForCategory(final GlobalSearchCategory category) { + String categoryId = category.getCategoryId(); + try { + GlobalSearchCategoryPanel catPanel = new GlobalSearchCategoryPanel(category, controller); + // close dialog if user clicked on a search result + catPanel.registerEventListener(interactionListener); + catPanel.setVisible(false); + + mainPanelGbc.gridy += 1; + mainPanel.add(catPanel, mainPanelGbc); + synchronized (CATEGORY_COMPONENT_LOCK) { + categoryComponentMap.put(categoryId, catPanel); + } + return true; + } catch (IllegalArgumentException e) { + LogService.getRoot().log(Level.SEVERE, "com.rapidminer.gui.search.globalsearchdialog.no_gui_provider", categoryId); + return false; + } + } + + /** + * Removes the UI for the given category. Call when a category has been unregistered from the {@link GlobalSearchRegistry}. + * + * @param category + * the category for which the UI should be removed + */ + private void removeGUIForCategory(final GlobalSearchCategory category) { + synchronized (CATEGORY_COMPONENT_LOCK) { + GlobalSearchCategoryPanel removed = categoryComponentMap.remove(category.getCategoryId()); + if (removed != null) { + removed.removeEventListener(interactionListener); + mainPanel.remove(removed); + } + } + } + +} diff --git a/src/main/java/com/rapidminer/gui/search/GlobalSearchGUIRegistry.java b/src/main/java/com/rapidminer/gui/search/GlobalSearchGUIRegistry.java new file mode 100644 index 000000000..42eb23774 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/GlobalSearchGUIRegistry.java @@ -0,0 +1,116 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; + +import com.rapidminer.search.GlobalSearchCategory; +import com.rapidminer.search.GlobalSearchResult; +import com.rapidminer.tools.LogService; + + +/** + * Register {@link GlobalSearchableGUIProvider} visualization providers here. After being registered here they will be used to + * visualize search results for the respective {@link GlobalSearchCategory}. You can call {@link + * #registerSearchVisualizationProvider(GlobalSearchCategory, GlobalSearchableGUIProvider)} to register them. + *

+ * Do so when #initFinalChecks() is called for plugins, because afterwards the UI for the Global Search will be initialized. + *

+ * + *

+ * If you unregistered the searchable already, you can also unregister the GUI provider by calling {@link #unregisterSearchVisualizationProvider(GlobalSearchCategory)}. + *

+ * + * @author Marco Boeck + * @since 8.1 + */ +public enum GlobalSearchGUIRegistry { + + INSTANCE; + + private final Map map = new ConcurrentHashMap<>(); + + + /** + * Registers the given {@link GlobalSearchableGUIProvider}. These are used to visualize {@link + * GlobalSearchResult}s. + * + * @param searchCategory + * The searchable instance + * @param guiProvider + * the gui provider instance + * @throws IllegalStateException + * if registering a guiProvider for a searchable that is already registered + */ + public void registerSearchVisualizationProvider(final GlobalSearchCategory searchCategory, final GlobalSearchableGUIProvider guiProvider) { + if (searchCategory == null) { + throw new IllegalArgumentException("searchCategory must not be null!"); + } + if (guiProvider == null) { + throw new IllegalArgumentException("guiProvider must not be null!"); + } + String categoryId = searchCategory.getCategoryId(); + if (categoryId == null || categoryId.trim().isEmpty()) { + throw new IllegalArgumentException("categoryId must not be null or empty!"); + } + if (map.get(categoryId) != null) { + throw new IllegalStateException("searchable " + categoryId + " already registered!"); + } + + map.put(categoryId, guiProvider); + LogService.getRoot().log(Level.INFO, "com.rapidminer.gui.search.GlobalSearchGUIRegistry.provider_added", categoryId); + } + + /** + * Removes the given {@link GlobalSearchableGUIProvider}. + * + * @param searchCategory + * The searchable instance + * @throws IllegalStateException + * if registering a guiProvider for a searchable that is already registered + */ + public void unregisterSearchVisualizationProvider(final GlobalSearchCategory searchCategory) { + if (searchCategory == null) { + throw new IllegalArgumentException("searchCategory must not be null!"); + } + String categoryId = searchCategory.getCategoryId(); + if (categoryId == null || categoryId.trim().isEmpty()) { + throw new IllegalArgumentException("categoryId must not be null or empty!"); + } + + GlobalSearchableGUIProvider removedProvider = map.remove(categoryId); + if (removedProvider != null) { + LogService.getRoot().log(Level.INFO, "com.rapidminer.gui.search.GlobalSearchGUIRegistry.provider_removed", categoryId); + } + } + + /** + * Returns the searchable gui provider for the given id. If the categoryId is unknown, returns {@code null}! + * + * @param categoryId + * the category id for which the registered searchable gui provider should be returned + * @return the category or {@code null} if it is not registered + */ + public GlobalSearchableGUIProvider getGUIProviderForSearchCategoryById(final String categoryId) { + return map.get(categoryId); + } + +} diff --git a/src/main/java/com/rapidminer/gui/search/GlobalSearchGUIUtilities.java b/src/main/java/com/rapidminer/gui/search/GlobalSearchGUIUtilities.java new file mode 100644 index 000000000..48f139dac --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/GlobalSearchGUIUtilities.java @@ -0,0 +1,148 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search; + + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +import org.jsoup.Jsoup; + +import com.rapidminer.search.GlobalSearchCategory; +import com.rapidminer.search.GlobalSearchRegistry; + + +/** + * Utility class for using Global Search GUI features. + * + * @author Marco Boeck + * @since 8.1 + */ +public enum GlobalSearchGUIUtilities { + + INSTANCE; + + + /** the max height of a GUI component that the Global Search GUI will accept */ + public static final int MAX_HEIGHT = 50; + + + private static final String CATEGORY_ID_ACTIONS = "actions"; + private static final String CATEGORY_ID_OPERATOR = "operator"; + private static final String CATEGORY_ID_REPOSITORY = "repository"; + private static final String CATEGORY_ID_MARKETPLACE = "marketplace"; + private static final List PREDEFINED_CATEGORY_ORDER; + + static { + // we need this to ensure our own searchables have a well-defined order in the UI + PREDEFINED_CATEGORY_ORDER = new ArrayList<>(4); + PREDEFINED_CATEGORY_ORDER.add(CATEGORY_ID_ACTIONS); + PREDEFINED_CATEGORY_ORDER.add(CATEGORY_ID_OPERATOR); + PREDEFINED_CATEGORY_ORDER.add(CATEGORY_ID_MARKETPLACE); + PREDEFINED_CATEGORY_ORDER.add(CATEGORY_ID_REPOSITORY); + } + + private static final String HTML_TAG_OPEN = ""; + private static final String HTML_TAG_CLOSE = ""; + + + /** + * Adds highlights to strings for search result hits. + * + * @param text + * the original text where highlights should be added + * @param bestFragments + * the best fragments as provided by {@link GlobalSearchableGUIProvider#getGUIListComponentForDocument}. If {@code null}, only HTML tags are added. + * @return the HTML-styled string + */ + public String createHTMLHighlightFromString(final String text, final String[] bestFragments) { + if (text == null || text.trim().isEmpty()) { + throw new IllegalArgumentException("text must not be null or empty!"); + } + + StringBuilder sb = new StringBuilder(); + sb.append(HTML_TAG_OPEN); + if (bestFragments != null && bestFragments.length > 0) { + for (String bestFragment : bestFragments) { + if (bestFragment == null) { + continue; + } + // best fragment may only be a part of the original content. So replace original substring match with highlighted fragment + sb.append(text.replace(createTextFromHTML(bestFragment), bestFragment)); + } + } else { + sb.append(text); + } + sb.append(HTML_TAG_CLOSE); + + return sb.toString(); + } + + /** + * Converts HTML to plain text. Does not care if HTML is well formatted at all. + * + * @param html + * the html to convert to plain text + * @return the plain text, never {@code null} + */ + public String createTextFromHTML(final String html) { + if (html == null) { + throw new IllegalArgumentException("html must not be null!"); + } + if (html.trim().isEmpty()) { + return html; + } + + return Jsoup.parse(html).text(); + } + + /** + * Sorts the search categories in a sort of predefined order - first our own categories, then user provided ones. + * + * @param categories + * the input categories list + * @return the sorted list + */ + public List sortCategories(final List categories) { + if (categories == null) { + throw new IllegalArgumentException("categories must not be null!"); + } + + List clone = new ArrayList<>(categories.size()); + for (String predefinedCategory : PREDEFINED_CATEGORY_ORDER) { + GlobalSearchCategory cat = GlobalSearchRegistry.INSTANCE.getSearchCategoryById(predefinedCategory); + if (cat != null) { + clone.add(cat); + // remove predefined cats from given list + categories.remove(cat); + } + } + + // sort remaining categories by id + if (!categories.isEmpty()) { + categories.sort(Comparator.comparing(GlobalSearchCategory::getCategoryId)); + } + + // now add them as well + clone.addAll(categories); + + return clone; + } +} diff --git a/src/main/java/com/rapidminer/gui/search/GlobalSearchPanel.java b/src/main/java/com/rapidminer/gui/search/GlobalSearchPanel.java new file mode 100644 index 000000000..0a4e42c79 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/GlobalSearchPanel.java @@ -0,0 +1,541 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search; + +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.event.ActionEvent; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.List; +import javax.swing.ActionMap; +import javax.swing.ButtonGroup; +import javax.swing.ImageIcon; +import javax.swing.InputMap; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JRadioButtonMenuItem; +import javax.swing.KeyStroke; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; + +import com.rapidminer.gui.ApplicationFrame; +import com.rapidminer.gui.look.Colors; +import com.rapidminer.gui.look.RapidLookTools; +import com.rapidminer.gui.properties.PropertyPanel; +import com.rapidminer.gui.search.event.GlobalSearchCategoryEvent; +import com.rapidminer.gui.search.event.GlobalSearchEventListener; +import com.rapidminer.gui.search.event.GlobalSearchModelEvent; +import com.rapidminer.gui.search.model.GlobalSearchModel; +import com.rapidminer.gui.tools.FilterTextField; +import com.rapidminer.gui.tools.ResourceAction; +import com.rapidminer.gui.tools.ResourceActionAdapter; +import com.rapidminer.gui.tools.SelectionNavigationListener; +import com.rapidminer.gui.tools.SwingTools; +import com.rapidminer.gui.tools.TextFieldWithAction; +import com.rapidminer.gui.tools.components.DropDownPopupButton; +import com.rapidminer.gui.tools.components.composite.CompositeButton; +import com.rapidminer.search.GlobalSearchCategory; +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchResult; +import com.rapidminer.tools.I18N; +import com.rapidminer.tools.usagestats.ActionStatisticsCollector; + + +/** + * Panel that visualizes the Global Search feature and results. + * + * @author Marco Boeck + * @since 8.1 + */ +public final class GlobalSearchPanel extends JPanel { + + private static GlobalSearchPanel instance; + + private static final Object SINGLETON_LOCK = new Object(); + + private static final ImageIcon CLEAR_FILTER_HOVERED_ICON = SwingTools.createIcon("16/x-mark_orange.png"); + private static final ImageIcon DEFAULT_FILTER_ICON = SwingTools.createIcon("16/magnifying_glass.png"); + private static final ImageIcon LOADING_ICON = SwingTools.createIcon("16/loading.gif"); + + private static final String CLOSE_FULL_SEARCH_DIALOG = "closeGlobalSearchDialog"; + + /** max height in pixel the result dialog can be. If it needs to be larger, it will use a scrollpane */ + private static final int MAX_RESULT_DIALOG_HEIGHT = 820; + private static final int SEARCH_FIELD_WIDTH = 205; + private static final int FILTER_BUTTON_WIDTH = 90; + private static final int SEARCH_BUTTON_WIDTH = 90; + private static final int MAX_CATEGORY_I18N_LENGTH = 11; + + public static final int PREFERRED_WIDTH = SEARCH_FIELD_WIDTH + FILTER_BUTTON_WIDTH + SEARCH_BUTTON_WIDTH; + + + private FilterTextField searchField; + private TextFieldWithAction searchActionField; + + private DropDownPopupButton filterButton; + private JButton searchButton; + private JPopupMenu filterMenu; + private JRadioButtonMenuItem allCategoriesButton; + + private GlobalSearchDialog resultDialog; + private transient GlobalSearchModel model; + private transient GlobalSearchController controller; + + private final ResourceAction clearFilterAction = new ResourceAction(true, "clear_filter") { + + @Override + public void actionPerformed(final ActionEvent e) { + searchField.clearFilter(); + searchField.requestFocusInWindow(); + } + }; + + /** if not {@code null}, determines in which category the Global Search searches for results. If {@code null}, all categories are searched */ + private String categoryFilter = null; + + /** + * Should only be created by {@link #getInstance()} ()}. + */ + private GlobalSearchPanel() { + // result display + model = new GlobalSearchModel(); + controller = new GlobalSearchController(this, model); + model.registerEventListener(new GlobalSearchEventListener() { + + @Override + public void modelChanged(GlobalSearchModelEvent e) { + switch (e.getEventType()) { + case ALL_CATEGORIES_REMOVED: + hideComponents(); + break; + case ERROR_STATUS_CHANGED: + // if error was reset but there are still pending searches, don't open dialog + if (model.hasError()) { + showResults(); + } + break; + default: + // do nothing + } + } + + @Override + public void categoryChanged(String categoryId, GlobalSearchCategoryEvent e, GlobalSearchResult result) { + switch (e.getEventType()) { + case CATEGORY_PENDING_STATUS_CHANGED: + setPending(model.isAnyCategoryPending()); + // there was an error and now a new search has been started. Close dialog that displayed error and wait for new results + if (model.hasError()) { + hideComponents(); + } + break; + case CATEGORY_ROWS_CHANGED: + case CATEGORY_ROWS_APPENDED: + // first search will fire for empty result as well for each category + // only show dialog if results are there or no more pending categories exist + if (model.hasCategoryResults(categoryId) || !model.isAnyCategoryPending()) { + showResults(); + } + break; + default: + // do nothing + } + } + }); + + initGUI(); + } + + @Override + public boolean requestFocusInWindow() { + if (!searchField.isFocusOwner()) { + return searchField.requestFocusInWindow(); + } else { + searchField.selectAll(); + return true; + } + } + + /** + * Sets the text of the Global Search field. Will trigger a new search. + * + * @param searchTerm + * the term to search. Can be {@code null} to reset the search + */ + public void setSearchTerm(String searchTerm) { + searchField.setText(searchTerm); + } + + /** + * Initializes the Global Search result visualization. Has no effect if it already is visualized. + */ + public void initializeSearchResultVisualization() { + synchronized (SINGLETON_LOCK) { + if (resultDialog == null) { + resultDialog = new GlobalSearchDialog(ApplicationFrame.getApplicationFrame(), controller) { + + @Override + public Dimension getPreferredSize() { + // make sure width is same as this panel + int width = searchActionField.getWidth() + filterButton.getWidth() + searchButton.getWidth(); + Dimension prefSize = super.getPreferredSize(); + prefSize.width = width; + + // make sure height does not exceed certain amount + prefSize.height = Math.min(prefSize.height, MAX_RESULT_DIALOG_HEIGHT); + + return prefSize; + } + }; + resultDialog.setFocusableWindowState(false); + + // even though dialog cannot be focused, it should hide when RM Studio is minimized + ApplicationFrame.getApplicationFrame().addWindowListener(new WindowAdapter() { + + @Override + public void windowIconified(WindowEvent e) { + GlobalSearchPanel.this.hideComponents(); + } + }); + + // also close everything if results are displayed + InputMap inputMap = resultDialog.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap actionMap = resultDialog.getRootPane().getActionMap(); + + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), CLOSE_FULL_SEARCH_DIALOG); + actionMap.put(CLOSE_FULL_SEARCH_DIALOG, new ResourceAction("") { + @Override + public void actionPerformed(ActionEvent e) { + GlobalSearchPanel.this.hideComponents(); + + logGlobalSearchFocusLost(); + } + }); + } + } + } + + /** + * Hides any components that belong to the Global Search, i.e. the result dialog and the filter popup. + */ + protected void hideComponents() { + if (filterMenu != null) { + filterMenu.setVisible(false); + } + if (resultDialog != null) { + resultDialog.setVisible(false); + } + } + + /** + * Toggles the search "All Studio" category button as if the user clicked it. + */ + protected void searchAll() { + allCategoriesButton.doClick(); + } + + /** + * Sets the panel to the pending state when any category is pending. Changes the icon of the search field to a loading icon. + * + * @param pending + * {@code true} if any search is pending; {@code false} if no search is pending + */ + private void setPending(final boolean pending) { + if (pending) { + searchActionField.setForceIcon(LOADING_ICON); + } else { + searchActionField.setForceIcon(null); + } + } + + /** + * Shows the result dialog popup. + */ + private void showResults() { + // show result dialog immediately to visualize search is ongoing + if (resultDialog != null) { + resultDialog.setLocation(searchActionField.getLocationOnScreen().x, searchActionField.getLocationOnScreen().y + searchActionField.getHeight() - 1); + resultDialog.setVisible(true); + } + } + + /** + * Populate the filter popup. This is needed because search categories may have been registered/removed in the meantime. + * + * @param menu + * the menu to populate, must not be {@code null} + */ + private void populateFilterPopup(final JPopupMenu menu) { + menu.removeAll(); + ButtonGroup categoryGroup = new ButtonGroup(); + + // create "All" categories button + String allCategoriesI18N = I18N.getGUILabel("global_search.filter_all.label"); + allCategoriesButton = new JRadioButtonMenuItem(allCategoriesI18N); + allCategoriesButton.setMnemonic(KeyEvent.VK_L); + allCategoriesButton.addActionListener(e -> { + + // remember if user clicked already selected filter again, or if it was truly a change + boolean changed = categoryFilter != null; + + categoryFilter = null; + filterButton.setText(allCategoriesI18N); + + // category filter changed, clear all previous search categories + if (changed) { + model.clearAllCategories(); + } + + GlobalSearchPanel.this.requestFocusInWindow(); + controller.handleSearch(searchField.getText(), categoryFilter); + }); + categoryGroup.add(allCategoriesButton); + if (categoryFilter == null) { + allCategoriesButton.setSelected(true); + } + + menu.add(allCategoriesButton); + menu.addSeparator(); + + // create buttons for each registered search category + List categories = GlobalSearchGUIUtilities.INSTANCE.sortCategories(GlobalSearchRegistry.INSTANCE.getAllSearchCategories()); + for (GlobalSearchCategory cat : categories) { + String catID = cat.getCategoryId(); + GlobalSearchableGUIProvider guiProvider = GlobalSearchGUIRegistry.INSTANCE.getGUIProviderForSearchCategoryById(catID); + if (guiProvider == null) { + // skip categories with no GUI + continue; + } + String i18nName = guiProvider.getI18nNameForSearchable(); + + JRadioButtonMenuItem catButton = new JRadioButtonMenuItem(i18nName); + catButton.setMnemonic(i18nName.charAt(0)); + catButton.addActionListener(e -> { + + // remember if user clicked already selected filter again, or if it was truly a change + boolean changed = !catID.equals(categoryFilter); + + categoryFilter = catID; + String text = i18nName; + + // cut off too long name + if (text.length() > MAX_CATEGORY_I18N_LENGTH) { + text = text.substring(0, MAX_CATEGORY_I18N_LENGTH - 1) + ".."; + } + filterButton.setText(text); + + // category filter changed, clear all previous search categories + if (changed) { + model.clearAllCategories(); + } + + GlobalSearchPanel.this.requestFocusInWindow(); + controller.handleSearch(searchField.getText(), categoryFilter); + }); + categoryGroup.add(catButton); + + if (catID.equals(categoryFilter)) { + catButton.setSelected(true); + } + + menu.add(catButton); + } + } + + /** + * Set up the UI. + */ + private void initGUI() { + GridBagConstraints gbc = new GridBagConstraints(); + setLayout(new GridBagLayout()); + + searchField = new FilterTextField(12); + searchField.setDefaultFilterText(I18N.getMessage(I18N.getGUIBundle(), "gui.field.global_search.prompt")); + // listen for value change events, trigger search with slight delay to not search while user types + searchField.addFilterListener(value -> controller.handleSearch(searchField.getText(), categoryFilter)); + // listen for special events that can detect when user pressed Enter. Search straight away in that case w/o delay + searchField.addSelectionNavigationListener(new SelectionNavigationListener() { + @Override + public void up() { + // ignore + } + + @Override + public void down() { + // ignore + } + + @Override + public void left() { + // ignore + } + + @Override + public void right() { + // ignore + } + + @Override + public void selected() { + // user pressed Enter key, trigger search straight away + controller.handleSearch(searchField.getText(), categoryFilter); + } + }); + // clicking away from the search field should close the search popup + // this is the next best thing because we cannot detect focus loss on dialog as dialog cannot be focused anymore + searchField.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + // not needed + } + + @Override + public void focusLost(FocusEvent e) { + // only hide if the opposite component is in Studio (aka not null) + if (e.getOppositeComponent() != null) { + hideComponents(); + + logGlobalSearchFocusLost(); + } + } + }); + + searchActionField = new TextFieldWithAction(searchField, clearFilterAction, CLEAR_FILTER_HOVERED_ICON) { + + @Override + public Dimension getPreferredSize() { + return new Dimension(SEARCH_FIELD_WIDTH, PropertyPanel.VALUE_CELL_EDITOR_HEIGHT); + } + }; + searchActionField.setDefaultIcon(DEFAULT_FILTER_ICON); + searchActionField.putClientProperty(RapidLookTools.PROPERTY_INPUT_DARK_BORDER, Boolean.TRUE); + searchActionField.putClientProperty(RapidLookTools.PROPERTY_INPUT_TYPE_COMPOSITE, SwingConstants.LEFT); + + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weightx = 1.0d; + gbc.fill = GridBagConstraints.HORIZONTAL; + add(searchActionField, gbc); + + gbc.gridx += 1; + gbc.weightx = 0.0d; + gbc.fill = GridBagConstraints.NONE; + DropDownPopupButton.DropDownPopupButtonBuilder builder = new DropDownPopupButton.DropDownPopupButtonBuilder(); + filterButton = builder.with(new ResourceActionAdapter("global_search.toolbar")).setComposite(SwingUtilities.CENTER).build(); + filterButton.addPopupMenuListener(new PopupMenuListener() { + @Override + public void popupMenuWillBecomeVisible(PopupMenuEvent e) { + Object source = e.getSource(); + populateFilterPopup((JPopupMenu) source); + + filterMenu = (JPopupMenu) source; + filterMenu.setPreferredSize(new Dimension(filterButton.getWidth() + searchButton.getWidth(), filterMenu.getPreferredSize().height)); + } + + @Override + public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { + filterMenu = null; + } + + @Override + public void popupMenuCanceled(PopupMenuEvent e) { + // not needed + } + }); + filterButton.putClientProperty(RapidLookTools.PROPERTY_BUTTON_DARK_BORDER, Boolean.TRUE); + filterButton.setText(I18N.getGUILabel("global_search.filter_all.label")); + filterButton.setMnemonic(KeyEvent.VK_L); + filterButton.setPreferredSize(new Dimension(FILTER_BUTTON_WIDTH, PropertyPanel.VALUE_CELL_EDITOR_HEIGHT)); + add(filterButton, gbc); + + gbc.gridx += 1; + searchButton = new CompositeButton(I18N.getGUILabel("global_search.run_search.label"), SwingConstants.RIGHT); + searchButton.setToolTipText(I18N.getGUILabel("global_search.run_search.tip")); + searchButton.addActionListener(e -> { + + controller.handleSearch(searchField.getText(), categoryFilter); + // give focus back to search field + requestFocusInWindow(); + }); + searchButton.setPreferredSize(new Dimension(SEARCH_BUTTON_WIDTH, PropertyPanel.VALUE_CELL_EDITOR_HEIGHT)); + searchButton.putClientProperty(RapidLookTools.PROPERTY_BUTTON_HIGHLIGHT, Boolean.TRUE); + searchButton.putClientProperty(RapidLookTools.PROPERTY_BUTTON_DARK_BORDER, Boolean.TRUE); + searchButton.setForeground(Colors.WHITE); + add(searchButton, gbc); + + InputMap inputMap = getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap actionMap = getActionMap(); + + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), CLOSE_FULL_SEARCH_DIALOG); + actionMap.put(CLOSE_FULL_SEARCH_DIALOG, new ResourceAction("") { + @Override + public void actionPerformed(ActionEvent e) { + GlobalSearchPanel.this.hideComponents(); + + logGlobalSearchFocusLost(); + } + }); + } + + /** + * Log the values in case the global search focus was lost intentionally. Make sure this is only called if the user + * cancels it. + */ + private void logGlobalSearchFocusLost() { + String lastQuery = controller.getLastQuery(); + if (lastQuery == null) { + return; + } + String categoryId = controller.getLastCategoryFilter(); + long amount = 0; + if (categoryId == null) { + categoryId = ActionStatisticsCollector.ARG_GLOBAL_SEARCH_CATEGORY_ALL; + for (String category : controller.getModel().getActiveCategories()) { + amount += controller.getModel().getRowsForCategory(category).size(); + } + } else { + amount = controller.getModel().getRowsForCategory(categoryId).size(); + } + ActionStatisticsCollector.getInstance().logGlobalSearch(ActionStatisticsCollector.VALUE_FOCUS_LOST, lastQuery, categoryId, amount); + } + + /** + * Returns the global instance of the search panel. + * + * @return the instance, never {@code null} + */ + public static GlobalSearchPanel getInstance() { + synchronized (SINGLETON_LOCK) { + if (instance == null) { + instance = new GlobalSearchPanel(); + } + + return instance; + } + } +} diff --git a/src/main/java/com/rapidminer/gui/search/GlobalSearchableGUIProvider.java b/src/main/java/com/rapidminer/gui/search/GlobalSearchableGUIProvider.java new file mode 100644 index 000000000..2fbc397ed --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/GlobalSearchableGUIProvider.java @@ -0,0 +1,150 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search; + +import java.awt.dnd.DragGestureListener; +import javax.swing.JComponent; + +import org.apache.lucene.document.Document; + +import com.rapidminer.search.GlobalSearchManager; +import com.rapidminer.search.GlobalSearchResult; +import com.rapidminer.search.GlobalSearchUtilities; +import com.rapidminer.search.GlobalSearchable; + + +/** + * Implement this to provide a GUI component to visualize search results provided by {@link com.rapidminer.search.GlobalSearchHandler}. + *

Register your implementation to {@link GlobalSearchGUIRegistry} so it is automatically found for your {@link + * GlobalSearchManager#getSearchCategoryId()}. + *

+ *

+ * Do so when #initFinalChecks() is called for plugins, because afterwards the UI for the Global Search will be initialized. + *

+ * + * @author Marco Boeck + * @since 8.1 + */ +public interface GlobalSearchableGUIProvider { + + /** + * Can be used to veto closing the Global Search GUI upon a triggered search result (e.g. because the click is not supposed to do anything). + * @since 8.1 + */ + class Veto { + + private boolean vetoGiven; + + /** + * Exercises the veto power. + */ + public void veto() { + this.vetoGiven = true; + } + + /** + * Returns if provider did veto the interaction. + * + * @return {@code true} if provider did veto; {@code false} otherwise + */ + protected boolean isVeto() { + return vetoGiven; + } + } + + + /** + * Creates a GUI Swing component for the provided document for visualizing {@link + * GlobalSearchResult}s. This one is displayed in the search result list, so: + *
    + *
  • It must not exceed {@value GlobalSearchGUIUtilities#MAX_HEIGHT}px in height - otherwise it will be rejected
  • + *
  • It must also not be opaque, so that {@link JComponent#isOpaque()} returns false
  • + *
  • Finally, it should try not exceed the width of the {@link GlobalSearchPanel}, otherwise it will simply be cut off
  • + *
+ *

+ * Attention: This method must not block! If you need more time to compute something, then usage of a {@link javax.swing.SwingWorker} is encouraged. + * In that case, this method should return with a placeholder UI first and then update it once the computation is done. + *

+ * + * @param document + * the document for which a GUI list component should be created, never {@code null} + * @param bestFragments + * the best fragments with HTML-formatted highlighting for the match on the {@link + * GlobalSearchUtilities#FIELD_NAME} of the document. Can be {@code null}. + * Use {@link GlobalSearchGUIUtilities#createHTMLHighlightFromString(String, String[])} to create an HTML snippet highlighting the best matches. + * @return the component, never {@code null} + */ + JComponent getGUIListComponentForDocument(final Document document, final String[] bestFragments); + + + /** + * The I18N name for your search category. Displayed in the search filter UI. Should not exceed 10 characters, will be shortened otherwise. + * + * @return the internationalized name, must not be {@code null} or empty + */ + String getI18nNameForSearchable(); + + /** + * This method is called when a single search result from this {@link GlobalSearchable} has been activated (e.g. clicked + * on by the user). This should take the user to the result, e.g. by opening it. The implementation can veto the interaction, and by doing so veto the closing of the search results. + * This is useful if a result cannot be directly activated (either in general or because of the circumstances). + *

+ * Note that this is fired on the EDT, so don't do computationally intensive tasks here. Spawn another thread if need be. + *

+ * + * @param document + * the document which was activated + * @param veto + * Call {@link Veto#veto()} if the implementation vetoes this search result activation (e.g. because the click is not supposed to do anything) + */ + void searchResultTriggered(final Document document, final Veto veto); + + /** + * This method is called when a single search result from this {@link GlobalSearchable} is being browsed (e.g. user is hovering over it). + * This should show a preview of some description to the user. It will almost always be a pre-step to {@link #searchResultTriggered(Document, Veto)}. + *

+ * Note that this is fired on the EDT, so don't do computationally intensive tasks here! This must return immediately. + *

+ * + * @param document + * the document which is being browsed + */ + void searchResultBrowsed(final Document document); + + /** + * This is used to determine if drag&drop is supported by this {@link GlobalSearchable}. + * This means that the {@link #getGUIListComponentForDocument(Document, String[])} can be dragged somewhere, e.g. the process canvas. + * + * If this is {@code true}, {@link #getDragAndDropSupport(Document)} will be used to register the drag source. + * + * @param document + * the document which should be dragged and dropped + * @return {@code true} if drag&drop is supported; {@code false} otherwise. + */ + boolean isDragAndDropSupported(final Document document); + + /** + * This is used to register the GUI component as a drag source to the UI. Only called if {@link #isDragAndDropSupported(Document)} returns {@code true}. + * + * @param document + * the document which should be dragged and dropped + * @return the drag gesture listener if {@link #isDragAndDropSupported(Document)} is {@code true}, otherwise this can return {@code null} + */ + DragGestureListener getDragAndDropSupport(final Document document); +} diff --git a/src/main/java/com/rapidminer/gui/search/action/GlobalSearchAction.java b/src/main/java/com/rapidminer/gui/search/action/GlobalSearchAction.java new file mode 100644 index 000000000..3f9ad33a5 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/action/GlobalSearchAction.java @@ -0,0 +1,60 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search.action; + +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JComponent; +import javax.swing.KeyStroke; + +import com.rapidminer.gui.ApplicationFrame; +import com.rapidminer.gui.search.GlobalSearchDialog; +import com.rapidminer.gui.search.GlobalSearchPanel; +import com.rapidminer.gui.tools.ResourceAction; + + +/** + * The action that opens the {@link GlobalSearchDialog}. + * + * @author Marco Boeck + * @since 8.1 + */ +public class GlobalSearchAction extends ResourceAction { + + private static final String GLOBAL_SEARCH = "global_search"; + + + public GlobalSearchAction() { + super(true, GLOBAL_SEARCH); + InputMap inputMap = ApplicationFrame.getApplicationFrame().getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap actionMap = ApplicationFrame.getApplicationFrame().getRootPane().getActionMap(); + + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), GLOBAL_SEARCH); + actionMap.put(GLOBAL_SEARCH, this); + } + + @Override + public void actionPerformed(ActionEvent e) { + GlobalSearchPanel.getInstance().requestFocusInWindow(); + } + +} diff --git a/src/main/java/com/rapidminer/gui/search/event/GlobalSearchCategoryEvent.java b/src/main/java/com/rapidminer/gui/search/event/GlobalSearchCategoryEvent.java new file mode 100644 index 000000000..1956bbe09 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/event/GlobalSearchCategoryEvent.java @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.gui.search.event; + +/** + * An event for the {@link com.rapidminer.gui.search.model.GlobalSearchModel} when a category changes. + * + * @author Marco Boeck + * @since 8.1 + * + */ +public final class GlobalSearchCategoryEvent { + + /** + * Defines different kind of {@link GlobalSearchCategoryEvent}s. + * + */ + public enum CategoryEvent { + /** fired when the pending state of a category has changed */ + CATEGORY_PENDING_STATUS_CHANGED, + + /** fired when rows have been changed for a search category. This can e.g. be caused by different results or by no more results for a row */ + CATEGORY_ROWS_CHANGED, + + /** fired when more rows have been appended to a search category */ + CATEGORY_ROWS_APPENDED + } + + private final CategoryEvent type; + + /** + * Creates a new {@link GlobalSearchCategoryEvent} instance for the specified {@link CategoryEvent} + * . + * + * @param type + * the event type + */ + public GlobalSearchCategoryEvent(final CategoryEvent type) { + this.type = type; + } + + /** + * Returns the {@link CategoryEvent}. + * + * @return the type of the event + */ + public CategoryEvent getEventType() { + return type; + } +} diff --git a/src/main/java/com/rapidminer/gui/search/event/GlobalSearchEventListener.java b/src/main/java/com/rapidminer/gui/search/event/GlobalSearchEventListener.java new file mode 100644 index 000000000..92e42bef7 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/event/GlobalSearchEventListener.java @@ -0,0 +1,55 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.gui.search.event; + +import java.util.EventListener; + +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchResult; + + +/** + * An object listening for {@link GlobalSearchModelEvent}s and {@link GlobalSearchCategoryEvent}s on the {@link com.rapidminer.gui.search.model.GlobalSearchModel}. + * + * @author Marco Boeck + * @since 8.1 + * + */ +public interface GlobalSearchEventListener extends EventListener { + + /** + * Called when something globally in the model has changed. + * + * @param e + * the event instance + */ + void modelChanged(final GlobalSearchModelEvent e); + + /** + * Called when a result for a search category in the model has changed. + * + * @param categoryId + * the id of the search category that has changed. See {@link GlobalSearchRegistry} for details + * @param e + * the event instance + * @param result the search result that caused the change, or {code null} if it was a pending state change + */ + void categoryChanged(final String categoryId, final GlobalSearchCategoryEvent e, final GlobalSearchResult result); + +} diff --git a/src/main/java/com/rapidminer/gui/search/event/GlobalSearchInteractionEvent.java b/src/main/java/com/rapidminer/gui/search/event/GlobalSearchInteractionEvent.java new file mode 100644 index 000000000..a14642799 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/event/GlobalSearchInteractionEvent.java @@ -0,0 +1,81 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search.event; + + +import com.rapidminer.gui.search.model.GlobalSearchRow; + + +/** + * An event for the {@link com.rapidminer.gui.search.GlobalSearchCategoryPanel}. + * + * @author Marco Boeck + * @since 8.1 + * + */ +public class GlobalSearchInteractionEvent { + + /** + * Defines different kind of {@link GlobalSearchInteractionEvent}s. + * + */ + public enum InteractionEvent { + /** fired when the user browses (e.g. mouse-over) the result */ + RESULT_BROWSED, + + /** fired when the user activates (e.g. clicks) the result */ + RESULT_ACTIVATED + } + + private final InteractionEvent type; + private final GlobalSearchRow row; + + + /** + * Creates a new {@link GlobalSearchInteractionEvent} instance for the specified {@link InteractionEvent} + * . + * + * @param type + * the event type + * @param row + * the row which the user interacted with + */ + public GlobalSearchInteractionEvent(final InteractionEvent type, GlobalSearchRow row) { + this.type = type; + this.row = row; + } + + /** + * Returns the {@link InteractionEvent}. + * + * @return the type of the event + */ + public InteractionEvent getEventType() { + return type; + } + + /** + * Returns the row on which the interaction happened. + * + * @return the row which the user interacted with + */ + public GlobalSearchRow getRow() { + return row; + } +} diff --git a/src/main/java/com/rapidminer/gui/search/event/GlobalSearchInteractionListener.java b/src/main/java/com/rapidminer/gui/search/event/GlobalSearchInteractionListener.java new file mode 100644 index 000000000..b7d0be57e --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/event/GlobalSearchInteractionListener.java @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search.event; + + +import java.util.EventListener; + + +/** + * An object listening for {@link GlobalSearchInteractionEvent}s on the {@link com.rapidminer.gui.search.GlobalSearchCategoryPanel}. + * + * @author Marco Boeck + * @since 8.1 + * + */ +public interface GlobalSearchInteractionListener extends EventListener { + + /** + * Called when the user interacted in th GUI with a Global Search result. + * + * @param e + * the event instance + */ + void interaction(final GlobalSearchInteractionEvent e); +} diff --git a/src/main/java/com/rapidminer/gui/search/event/GlobalSearchModelEvent.java b/src/main/java/com/rapidminer/gui/search/event/GlobalSearchModelEvent.java new file mode 100644 index 000000000..324f2ef1a --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/event/GlobalSearchModelEvent.java @@ -0,0 +1,67 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.gui.search.event; + +/** + * An event for the {@link com.rapidminer.gui.search.model.GlobalSearchModel} when the whole model (or multiple categories) changes. + * + * @author Marco Boeck + * @since 8.1 + * + */ +public final class GlobalSearchModelEvent { + + /** + * Defines different kind of {@link GlobalSearchModelEvent}s. + * + */ + public enum ModelEvent { + + /** fired when the error status has changed, i.e. from no error -> error or error -> no error */ + ERROR_STATUS_CHANGED, + + /** fired when the correction suggestion has changed */ + CORRECTION_SUGGESTION_CHANGED, + + /** fired when all categories have been removed, i.e. on the beginning of a category search (only the searched category becomes pending afterwards) */ + ALL_CATEGORIES_REMOVED + } + + private final ModelEvent type; + + /** + * Creates a new {@link GlobalSearchModelEvent} instance for the specified {@link ModelEvent} + * . + * + * @param type + * the event type + */ + public GlobalSearchModelEvent(final ModelEvent type) { + this.type = type; + } + + /** + * Returns the {@link ModelEvent}. + * + * @return the type of the event + */ + public ModelEvent getEventType() { + return type; + } +} diff --git a/src/main/java/com/rapidminer/gui/search/model/GlobalSearchModel.java b/src/main/java/com/rapidminer/gui/search/model/GlobalSearchModel.java new file mode 100644 index 000000000..618dd9575 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/model/GlobalSearchModel.java @@ -0,0 +1,373 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search.model; + +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; +import javax.swing.event.EventListenerList; + +import org.apache.lucene.document.Document; + +import com.rapidminer.gui.search.event.GlobalSearchCategoryEvent; +import com.rapidminer.gui.search.event.GlobalSearchCategoryEvent.CategoryEvent; +import com.rapidminer.gui.search.event.GlobalSearchEventListener; +import com.rapidminer.gui.search.event.GlobalSearchModelEvent; +import com.rapidminer.gui.search.event.GlobalSearchModelEvent.ModelEvent; +import com.rapidminer.search.GlobalSearchCategory; +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchResult; + + +/** + * The model backing the Global Search result display. + * + * @author Marco Boeck + * @since 8.1 + */ +@SuppressWarnings({"WeakerAccess"}) +public class GlobalSearchModel { + + /** contains the list of results for the current search per category. This is needed to allow dynamic addition of more results per category on user request */ + private final Map> currentSearchResults; + + private final Map pendingSearch; + + private String errorMessage; + + private String correctionSuggestion; + + /** event listener for this model */ + private final EventListenerList eventListener; + + + /** + * Creates a new Global Search model backing the {@link com.rapidminer.gui.search.GlobalSearchDialog}. + */ + public GlobalSearchModel() { + this.eventListener = new EventListenerList(); + + this.errorMessage = null; + this.correctionSuggestion = null; + + this.pendingSearch = new HashMap<>(); + this.currentSearchResults = new HashMap<>(); + } + + /** + * Adds a {@link com.rapidminer.gui.search.event.GlobalSearchEventListener} which will be informed of all changes to this + * model. + * + * @param listener + * the listener instance to add + */ + public void registerEventListener(final GlobalSearchEventListener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener must not be null!"); + } + eventListener.add(GlobalSearchEventListener.class, listener); + } + + /** + * Removes the {@link com.rapidminer.gui.search.event.GlobalSearchEventListener} from this model. + * + * @param listener + * the listener instance to remove + */ + public void removeEventListener(final GlobalSearchEventListener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener must not be null!"); + } + eventListener.remove(GlobalSearchEventListener.class, listener); + } + + /** + * Gets whether there is a global search error. + * + * @return {@code true} if {@link #getError()} will return an error; {@code false} otherwise + */ + public boolean hasError() { + return errorMessage != null; + } + + /** + * Gets the global search error. + * + * @return the error or {@code null} + */ + public String getError() { + return errorMessage; + } + + /** + * Sets the global error message. + * + * @param errorMessage + * the error or {@code null} + */ + public void setError(final String errorMessage) { + this.errorMessage = errorMessage; + fireModelChanged(ModelEvent.ERROR_STATUS_CHANGED); + } + + /** + * Gets whether there is a global correction suggestion. + * + * @return {@code true} if {@link #getCorrectionSuggestion()} will return a suggestion; {@code false} otherwise + */ + public boolean hasCorrectionSuggestion() { + return correctionSuggestion != null; + } + + /** + * Gets the global correction suggestion. + * + * @return the suggestion or {@code null} + */ + public String getCorrectionSuggestion() { + return correctionSuggestion; + } + + /** + * Sets the global correction suggestion. + * + * @param correctionSuggestion + * the suggestion or {@code null} + */ + public void setCorrectionSuggestion(final String correctionSuggestion) { + this.correctionSuggestion = correctionSuggestion; + fireModelChanged(ModelEvent.CORRECTION_SUGGESTION_CHANGED); + } + + /** + * Returns the currently active search categories, i.e. the ones that + *
+ * a) have non-empty results + *
+ * or b) had non-empty results in their previous state and are now pending + * + * @return the list of categories, can be empty but never {@code null} + */ + public List getActiveCategories() { + List activeCategories = new LinkedList<>(); + for (GlobalSearchCategory category : GlobalSearchRegistry.INSTANCE.getAllSearchCategories()) { + if (hasCategoryResults(category.getCategoryId())) { + activeCategories.add(category.getCategoryId()); + } + } + + return activeCategories; + } + + /** + * Get the rows for the given search category. + * + * @param categoryId + * the search category + * @return the rows for the given category. Returns an empty collection if no results have been found for this category + * or {@code null} if search is currently pending or there was an error. + */ + public List getRowsForCategory(final String categoryId) { + List results; + synchronized (currentSearchResults) { + results = currentSearchResults.get(categoryId); + if (results == null) { + return Collections.emptyList(); + } else { + // copy list + results = new LinkedList<>(results); + } + } + + if (isPending(categoryId) || hasError()) { + return null; + } + + List rows = new LinkedList<>(); + for (GlobalSearchResult result : results) { + for (int i = 0; i < result.getResultDocuments().size(); i++) { + Document resultDoc = result.getResultDocuments().get(i); + String[] bestFragments = null; + if (result.getBestFragments() != null) { + bestFragments = result.getBestFragments().get(i); + } + rows.add(new GlobalSearchRow(resultDoc, bestFragments)); + } + } + + return rows; + } + + /** + * Sets the given search result for a category. To append to an existing search result (i.e. make more rows visible), call {@link #appendResultForCategory(String, GlobalSearchResult)}. + * + * @param categoryId + * the search category + * @param result + * the result to set + */ + public void setResultForCategory(final String categoryId, final GlobalSearchResult result) { + synchronized (currentSearchResults) { + List existingList = currentSearchResults.get(categoryId); + if (existingList == null) { + existingList = new LinkedList<>(); + currentSearchResults.put(categoryId, existingList); + } else { + existingList.clear(); + } + existingList.add(result); + } + + fireCategoryChanged(CategoryEvent.CATEGORY_ROWS_CHANGED, categoryId, result); + } + + /** + * Appends the given search result to a category. If no previous search results exist, will behave as if called {@link #setResultForCategory(String, GlobalSearchResult)}. + * + * @param categoryId + * the search category + * @param result + * the result to append + */ + public void appendResultForCategory(final String categoryId, final GlobalSearchResult result) { + synchronized (currentSearchResults) { + List existingList = currentSearchResults.get(categoryId); + if (existingList == null) { + setResultForCategory(categoryId, result); + } else { + existingList.add(result); + fireCategoryChanged(CategoryEvent.CATEGORY_ROWS_APPENDED, categoryId, result); + } + } + } + + /** + * Returns if a given category has search results or did have search results and is now in pending. + * In other words, whether a category + *
+ * a) has non-empty results + *
+ * or b) had non-empty results in their previous state and is now pending + * + * + * @param categoryId + * the search category + * @return {@code true} if there are results for the search category or it did have results and is now pending; {@code false} if neither is the case + */ + public boolean hasCategoryResults(final String categoryId) { + synchronized (currentSearchResults) { + List resultList = currentSearchResults.get(categoryId); + return !(resultList == null || resultList.isEmpty() || resultList.get(0).getNumberOfResults() == 0); + } + } + + /** + * Gets the pending state for a category. + * + * @param categoryId + * the search category + * @return {@code true} if a search is currently running for this category, {@code false} if no search is running + */ + public boolean isPending(final String categoryId) { + synchronized (pendingSearch) { + return pendingSearch.get(categoryId) != null && pendingSearch.get(categoryId).get(); + } + } + + /** + * Gets whether there is at Least one category that is in pending state. + * + * @return {@code true} if a search is currently running for any category, {@code false} if no search is running + */ + public boolean isAnyCategoryPending() { + boolean anyPending = false; + synchronized (pendingSearch) { + for (GlobalSearchCategory category : GlobalSearchRegistry.INSTANCE.getAllSearchCategories()) { + String categoryId = category.getCategoryId(); + anyPending |= pendingSearch.get(categoryId) != null && pendingSearch.get(categoryId).get(); + } + } + + return anyPending; + } + + /** + * Sets the pending state for a category. + * + * @param categoryId + * the search category + * @param pending + * {@code true} if a search is currently running for this category, {@code false} if no search is running + */ + public void setPending(final String categoryId, final boolean pending) { + synchronized (pendingSearch) { + AtomicBoolean isPending = pendingSearch.get(categoryId); + if (isPending == null) { + isPending = new AtomicBoolean(pending); + pendingSearch.put(categoryId, isPending); + } else { + isPending.getAndSet(pending); + } + } + + fireCategoryChanged(CategoryEvent.CATEGORY_PENDING_STATUS_CHANGED, categoryId, null); + } + + /** + * Clears the search results for all categories. + */ + public void clearAllCategories() { + synchronized (currentSearchResults) { + currentSearchResults.clear(); + } + fireModelChanged(ModelEvent.ALL_CATEGORIES_REMOVED); + } + + /** + * Fires the given {@link ModelEvent}. + * + * @param type + * the event type + */ + private void fireModelChanged(final ModelEvent type) { + // Notify the listeners + for (GlobalSearchEventListener listener : eventListener.getListeners(GlobalSearchEventListener.class)) { + listener.modelChanged(new GlobalSearchModelEvent(type)); + } + } + + /** + * Fires the given {@link CategoryEvent}. + * + * @param type + * the event type + * @param categoryId + * the search category id that was changed + * @param result the search result that caused the change, or {code null} if it was a pending state change + */ + private void fireCategoryChanged(final CategoryEvent type, final String categoryId, final GlobalSearchResult result) { + // Notify the listeners + for (GlobalSearchEventListener listener : eventListener.getListeners(GlobalSearchEventListener.class)) { + listener.categoryChanged(categoryId, new GlobalSearchCategoryEvent(type), result); + } + } +} diff --git a/src/main/java/com/rapidminer/gui/search/model/GlobalSearchRow.java b/src/main/java/com/rapidminer/gui/search/model/GlobalSearchRow.java new file mode 100644 index 000000000..dc87c2d23 --- /dev/null +++ b/src/main/java/com/rapidminer/gui/search/model/GlobalSearchRow.java @@ -0,0 +1,59 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.search.model; + +import org.apache.lucene.document.Document; + +import com.rapidminer.search.GlobalSearchUtilities; + + +/** + * POJO for each row in the search results. + * + * @author Marco Boeck + * @since 8.1 + */ +public final class GlobalSearchRow { + + private final Document doc; + private final String[] bestFragments; + + public GlobalSearchRow(final Document doc, final String[] bestFragments) { + this.doc = doc; + this.bestFragments = bestFragments; + } + + /** + * The document for this row. + * + * @return the document, never {@code null} + */ + public Document getDoc() { + return doc; + } + + /** + * The best matching fragments of the name field for this row. Can be {@code null}. + * + * @return the best fragment of the {@link GlobalSearchUtilities#FIELD_NAME} or {@code null} + */ + public String[] getBestFragments() { + return bestFragments; + } +} diff --git a/src/main/java/com/rapidminer/gui/security/CredentialsTableModel.java b/src/main/java/com/rapidminer/gui/security/CredentialsTableModel.java index f234c56b5..71ad20027 100644 --- a/src/main/java/com/rapidminer/gui/security/CredentialsTableModel.java +++ b/src/main/java/com/rapidminer/gui/security/CredentialsTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,7 +18,10 @@ */ package com.rapidminer.gui.security; +import java.util.HashMap; import java.util.LinkedList; +import java.util.List; +import java.util.Map; import javax.swing.table.AbstractTableModel; @@ -34,9 +37,16 @@ public class CredentialsTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; - private boolean showPasswords; + /** Bad luck if your future password consist of 14 stars */ + private static final String HIDDEN_PASSWORD = "**************"; + // column information + private static final int COLUMN_USER_INDEX = 2; + private static final int COLUMN_PASSWORD_INDEX = 3; + private static final int COLUMN_COUNT = 4; + private Wallet wallet; - private LinkedList listOfWalletKeys = new LinkedList(); + private List listOfWalletKeys = new LinkedList<>(); + private Map modifiedPasswords = new HashMap<>(); public CredentialsTableModel(Wallet wallet) { this.wallet = wallet; @@ -44,11 +54,8 @@ public CredentialsTableModel(Wallet wallet) { @Override public int getColumnCount() { - if (isShowPasswords()) { - return 4; + return COLUMN_COUNT; } - return 3; - } @Override public int getRowCount() { @@ -70,10 +77,10 @@ public Object getValueAt(int rowIndex, int columnIndex) { return getWallet().extractIdFromKey(listOfWalletKeys.get(rowIndex)); case 1: return userCredential.getURL(); - case 2: + case COLUMN_USER_INDEX: return userCredential.getUsername(); - case 3: - return new String(userCredential.getPassword()); + case COLUMN_PASSWORD_INDEX: + return HIDDEN_PASSWORD; default: throw new RuntimeException("No such column: " + columnIndex); // cannot happen } @@ -94,10 +101,11 @@ public void setValueAt(Object value, int row, int col) { // uses list of keys directly which may or may not contain ID attribute, therefore this call // is correct UserCredential userCredential = getWallet().getEntry(listOfWalletKeys.get(row)); - if (col == 2) { + if (col == COLUMN_USER_INDEX) { userCredential.setUser((String) value); } - if (col == 3) { + if (col == COLUMN_PASSWORD_INDEX && !HIDDEN_PASSWORD.equals(((String) value).trim())) { + modifiedPasswords.put(listOfWalletKeys.get(row), true); userCredential.setPassword(((String) value).toCharArray()); } @@ -112,24 +120,15 @@ public String getColumnName(int column) { return "ID"; case 1: return "URL"; - case 2: + case COLUMN_USER_INDEX: return "Username"; - case 3: + case COLUMN_PASSWORD_INDEX: return "Password"; default: throw new RuntimeException("No such column: " + column); // cannot happen } } - public void setShowPasswords(boolean showPasswords) { - this.showPasswords = showPasswords; - fireTableStructureChanged(); - } - - public boolean isShowPasswords() { - return showPasswords; - } - @SuppressWarnings("deprecation") public void removeRow(int index) { // uses list of keys directly which may or may not contain ID attribute, therefore this call diff --git a/src/main/java/com/rapidminer/gui/security/PasswordManager.java b/src/main/java/com/rapidminer/gui/security/PasswordManager.java index 78ce0497a..b20b63bd6 100644 --- a/src/main/java/com/rapidminer/gui/security/PasswordManager.java +++ b/src/main/java/com/rapidminer/gui/security/PasswordManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -22,7 +22,6 @@ import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.Collections; - import javax.swing.Action; import javax.swing.DefaultRowSorter; import javax.swing.JButton; @@ -31,6 +30,7 @@ import javax.swing.JTable; import com.rapidminer.gui.ApplicationFrame; +import com.rapidminer.gui.actions.ManagePasswordsAction; import com.rapidminer.gui.tools.ExtendedJScrollPane; import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.dialogs.ButtonDialog; @@ -47,29 +47,16 @@ */ public class PasswordManager extends ButtonDialog { - public static final Action OPEN_WINDOW = new ResourceAction("password_manager") { - - { - setCondition(EDIT_IN_PROGRESS, DONT_CARE); - } - - private static final long serialVersionUID = 1L; - - @Override - public void loggedActionPerformed(ActionEvent e) { - new PasswordManager().setVisible(true); - } - }; + public static final Action OPEN_WINDOW = new ManagePasswordsAction(); private static final long serialVersionUID = 1L; - private JButton showPasswordsButton; private CredentialsTableModel credentialsModel; private Wallet clone; public PasswordManager() { - super(ApplicationFrame.getApplicationFrame(), "password_manager", ModalityType.MODELESS, new Object[] {}); - this.clone = Wallet.getInstance().clone(); + super(ApplicationFrame.getApplicationFrame(), "password_manager", ModalityType.MODELESS, new Object[0]); + this.clone = new Wallet(Wallet.getInstance()); credentialsModel = new CredentialsTableModel(clone); final JTable table = new JTable(credentialsModel); @@ -78,19 +65,8 @@ public PasswordManager() { JScrollPane scrollPane = new ExtendedJScrollPane(table); scrollPane.setBorder(null); JPanel main = new JPanel(new BorderLayout()); - final JPanel showpasswordPanel = new JPanel(new BorderLayout()); main.add(scrollPane, BorderLayout.CENTER); - ResourceAction showPasswordsAction = new ResourceAction("password_manager_showpasswords") { - - private static final long serialVersionUID = 1L; - - @Override - public void loggedActionPerformed(ActionEvent e) { - updateButton(); - } - }; - ResourceAction removePasswordAction = new ResourceAction("password_manager_remove_row") { private static final long serialVersionUID = 1L; @@ -110,9 +86,6 @@ public void loggedActionPerformed(ActionEvent e) { }; JPanel buttonPanel = new JPanel(new BorderLayout()); - showPasswordsButton = new JButton(showPasswordsAction); - showpasswordPanel.add(makeButtonPanel(showPasswordsButton)); - buttonPanel.add(showpasswordPanel, BorderLayout.WEST); buttonPanel.add(makeButtonPanel(new JButton(removePasswordAction), makeOkButton("password_manager_save"), makeCancelButton()), BorderLayout.EAST); layoutDefault(main, buttonPanel, LARGE); @@ -125,33 +98,4 @@ protected void ok() { GlobalAuthenticator.refreshProxyAuthenticators(); super.ok(); } - - private void updateButton() { - credentialsModel.setShowPasswords(!credentialsModel.isShowPasswords()); - if (!credentialsModel.isShowPasswords()) { - // The Show Password Button - ResourceAction showPasswords = new ResourceAction("password_manager_showpasswords") { - - private static final long serialVersionUID = 1L; - - @Override - public void loggedActionPerformed(ActionEvent e) { - updateButton(); - } - }; - showPasswordsButton.setAction(showPasswords); - } else { - // The Hide Password Button - ResourceAction hidePasswords = new ResourceAction("password_manager_hidepasswords") { - - private static final long serialVersionUID = 1L; - - @Override - public void loggedActionPerformed(ActionEvent e) { - updateButton(); - } - }; - showPasswordsButton.setAction(hidePasswords); - } - } } diff --git a/src/main/java/com/rapidminer/gui/security/UserCredential.java b/src/main/java/com/rapidminer/gui/security/UserCredential.java index 5876c0b38..ce1c3b3c9 100644 --- a/src/main/java/com/rapidminer/gui/security/UserCredential.java +++ b/src/main/java/com/rapidminer/gui/security/UserCredential.java @@ -1,31 +1,32 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors - * + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * * Complete list of developers available at our web site: - * + * * http://rapidminer.com - * + * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.gui.security; import java.net.PasswordAuthentication; +import java.util.Arrays; /** * The user credentials stored in a {@link Wallet}. Each username belongs to one URL. - * + * * @author Miguel Buescher - * + * */ public class UserCredential { @@ -40,6 +41,10 @@ public UserCredential(String url, String user, char[] password) { this.password = password; } + public UserCredential(UserCredential entry) { + this(entry.getURL(), entry.getUsername(), Arrays.copyOf(entry.getPassword(), entry.getPassword().length)); + } + public void setUser(String user) { this.user = user; } @@ -63,9 +68,4 @@ public char[] getPassword() { public PasswordAuthentication makePasswordAuthentication() { return new PasswordAuthentication(getUsername(), getPassword()); } - - @Override - public UserCredential clone() { - return new UserCredential(getURL(), getUsername(), getPassword()); - } } diff --git a/src/main/java/com/rapidminer/gui/security/Wallet.java b/src/main/java/com/rapidminer/gui/security/Wallet.java index d1e7585a2..b00cf484d 100644 --- a/src/main/java/com/rapidminer/gui/security/Wallet.java +++ b/src/main/java/com/rapidminer/gui/security/Wallet.java @@ -1,36 +1,39 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors - * + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * * Complete list of developers available at our web site: - * + * * http://rapidminer.com - * + * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. -*/ + */ package com.rapidminer.gui.security; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.HashMap; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.logging.Level; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import com.rapidminer.gui.tools.VersionNumber; import com.rapidminer.io.Base64; import com.rapidminer.io.process.XMLTools; import com.rapidminer.tools.FileSystemService; @@ -38,6 +41,8 @@ import com.rapidminer.tools.I18N; import com.rapidminer.tools.LogService; import com.rapidminer.tools.XMLException; +import com.rapidminer.tools.cipher.CipherException; +import com.rapidminer.tools.cipher.CipherTools; /** @@ -49,19 +54,28 @@ * the {@link PasswordManager} sets a new instance via {@link #setInstance(Wallet)} after editing. * * @author Miguel Buescher, Marco Boeck - * */ @SuppressWarnings("deprecation") public class Wallet { private static final String CACHE_FILE_NAME = "secrets.xml"; - private HashMap wallet = new HashMap(); + public static final int URL_ID_SPLIT_COUNT = 2; + private Map walletContent = new HashMap<>(); + /** + * Version of the secrets xml that is necessary, triggers migration by saving the real secrets.xml is below this version + */ + private static final VersionNumber SECRET_VERSION_NR = new VersionNumber(7, 5, 4); + + private static final String VERSION_ATTRIBUTE = "version"; private static final String ID_PREFIX_URL_SEPERATOR = "___"; public static final String ID_MARKETPLACE = "Marketplace"; private static Wallet instance = new Wallet(); + private static final boolean ACTIVE_MIGRATION_DEFAULT_VALUE = false; + private boolean activeMigration = ACTIVE_MIGRATION_DEFAULT_VALUE; + static { instance.readCache(); } @@ -80,7 +94,7 @@ public static void setInstance(Wallet wallet) { } /** - * Reads the wallet from the secrets.xml file in the user's home directory. + * Reads the walletContent from the secrets.xml file in the user's home directory. */ public void readCache() { final File userConfigFile = FileSystemService.getUserConfigFile(CACHE_FILE_NAME); @@ -99,14 +113,40 @@ public void readCache() { "com.rapidminer.gui.security.Wallet.reading_secrets_file_error", e), e); return; } - readCache(doc); + VersionNumber secretXmlVersion = getVersionNumber(doc); + activeMigration = isMigrationRequired(secretXmlVersion); + try { + readCache(doc); + if (isMigrationRequired(secretXmlVersion)) { + saveCache(); + } + } finally { + activeMigration = ACTIVE_MIGRATION_DEFAULT_VALUE; + } + } + + private VersionNumber getVersionNumber(Document doc) { + VersionNumber secretXmlVersion = null; + try { + NodeList rootNode = doc.getElementsByTagName(CACHE_FILE_NAME); + NamedNodeMap attributes = rootNode.item(0).getAttributes(); + Node versionValue = attributes.getNamedItem(VERSION_ATTRIBUTE); + secretXmlVersion = new VersionNumber(versionValue.getNodeValue()); + } catch (Exception e) { + // attribute missing + } + return secretXmlVersion; + } + + private boolean isMigrationRequired(VersionNumber secretXmlVersion) { + return secretXmlVersion == null || !secretXmlVersion.equals(SECRET_VERSION_NR) && secretXmlVersion.isAtMost(SECRET_VERSION_NR); } /** * Reads the wallet from a {@link Document} object. * * @param doc - * the document which contains the secrets + * the document which contains the secrets */ public void readCache(Document doc) { NodeList secretElems = doc.getDocumentElement().getElementsByTagName("secret"); @@ -118,21 +158,22 @@ public void readCache(Document doc) { String user = XMLTools.getTagContents(secretElem, "user"); char[] password; try { - password = new String(Base64.decode(XMLTools.getTagContents(secretElem, "password"))).toCharArray(); - } catch (IOException e) { + String passwordTagContent = XMLTools.getTagContents(secretElem, "password"); + password = getDecodedPassword(passwordTagContent).toCharArray(); + } catch (IOException | CipherException e) { LogService.getRoot().log( Level.WARNING, I18N.getMessage(LogService.getRoot().getResourceBundle(), - "com.rapidminer.gui.security.Wallet.reading_entry_in_secrets_file_error", e), e); + "com.rapidminer.gui.security.Wallet.reading_entry_in_secrets_file_error", id, e), e); continue; } usercredential = new UserCredential(url, user, password); if (id != null) { // new entries with an id - wallet.put(buildKey(id, usercredential.getURL()), usercredential); + walletContent.put(buildKey(id, usercredential.getURL()), usercredential); } else { // for old entries which do not have an id - wallet.put(usercredential.getURL(), usercredential); + walletContent.put(usercredential.getURL(), usercredential); } } } @@ -145,7 +186,7 @@ public void readCache(Document doc) { */ @Deprecated public void registerCredentials(UserCredential authentication) { - wallet.put(authentication.getURL(), authentication); + walletContent.put(authentication.getURL(), authentication); } /** @@ -155,13 +196,13 @@ public void registerCredentials(UserCredential authentication) { * @param id * @param authentication * @throws IllegalArgumentException - * if the key is null + * if the key is null */ - public void registerCredentials(String id, UserCredential authentication) throws IllegalArgumentException { + public void registerCredentials(String id, UserCredential authentication) { if (id == null) { throw new IllegalArgumentException("id must not be null!"); } - wallet.put(buildKey(id, authentication.getURL()), authentication); + walletContent.put(buildKey(id, authentication.getURL()), authentication); // we need to consider possibility of an old entry for the same URL, remove it here because // it got replaced @@ -176,28 +217,32 @@ public void registerCredentials(String id, UserCredential authentication) throws * @return */ public int size() { - return wallet.size(); + return walletContent.size(); } /** - * Deep clone. + * Default empty constructor. */ - @Override - public Wallet clone() { - Wallet clone = new Wallet(); - for (String key : this.getKeys()) { + public Wallet() { + super(); + } + + /** + * Deep clone constructor. + */ + public Wallet(Wallet clonethis) { + for (String key : clonethis.getKeys()) { String[] urlAndMaybeID = key.split(ID_PREFIX_URL_SEPERATOR); - if (urlAndMaybeID.length == 2) { + if (urlAndMaybeID.length == URL_ID_SPLIT_COUNT) { // this is for new keys which have an ID prefix - UserCredential entry = wallet.get(buildKey(urlAndMaybeID[0], urlAndMaybeID[1])); - clone.registerCredentials(urlAndMaybeID[0], entry.clone()); + UserCredential entry = clonethis.getEntry(buildKey(urlAndMaybeID[0], urlAndMaybeID[1])); + registerCredentials(urlAndMaybeID[0], new UserCredential(entry)); } else { // old keys which do not yet have the ID prefix - UserCredential entry = wallet.get(key); - clone.registerCredentials(entry.clone()); + UserCredential entry = clonethis.getEntry(key); + registerCredentials(new UserCredential(entry)); } } - return clone; } /** @@ -205,13 +250,8 @@ public Wallet clone() { * * @return */ - public LinkedList getKeys() { - Iterator it = wallet.keySet().iterator(); - LinkedList keyset = new LinkedList(); - while (it.hasNext()) { - keyset.add(it.next()); - } - return keyset; + public List getKeys() { + return new LinkedList<>(walletContent.keySet()); } /** @@ -224,7 +264,7 @@ public LinkedList getKeys() { */ @Deprecated public UserCredential getEntry(String url) { - return wallet.get(url); + return walletContent.get(url); } /** @@ -237,10 +277,10 @@ public UserCredential getEntry(String url) { * @return */ public UserCredential getEntry(String id, String url) { - UserCredential credentials = wallet.get(buildKey(id, url)); + UserCredential credentials = walletContent.get(buildKey(id, url)); if (credentials == null) { // fallback for old entries which can supply a null key - credentials = wallet.get(url); + credentials = walletContent.get(url); } return credentials; @@ -254,7 +294,7 @@ public UserCredential getEntry(String id, String url) { */ @Deprecated public void removeEntry(String url) { - wallet.remove(url); + walletContent.remove(url); } /** @@ -264,39 +304,65 @@ public void removeEntry(String url) { * @param url */ public void removeEntry(String id, String url) { - wallet.remove(buildKey(id, url)); + walletContent.remove(buildKey(id, url)); } /** - * Creates a XML representation of the wallet. + * Creates a XML representation of the walletContent. * * @return The XML document. */ public Document getWalletAsXML() { Document doc = XMLTools.createDocument(); Element root = doc.createElement(CACHE_FILE_NAME); + root.setAttribute(VERSION_ATTRIBUTE, SECRET_VERSION_NR.getLongVersion()); doc.appendChild(root); for (String key : getKeys()) { - Element entryElem = doc.createElement("secret"); - root.appendChild(entryElem); - String[] urlAndMaybeID = key.split(ID_PREFIX_URL_SEPERATOR); - if (urlAndMaybeID.length == 2) { - // this is for new keys which have an ID prefix - XMLTools.setTagContents(entryElem, "id", urlAndMaybeID[0]); - XMLTools.setTagContents(entryElem, "url", urlAndMaybeID[1]); - } else { - // old keys which do not yet have the ID prefix - XMLTools.setTagContents(entryElem, "url", key); + try { + Element entryElem = doc.createElement("secret"); + String[] urlAndMaybeID = key.split(ID_PREFIX_URL_SEPERATOR); + if (urlAndMaybeID.length == URL_ID_SPLIT_COUNT) { + // this is for new keys which have an ID prefix + XMLTools.setTagContents(entryElem, "id", urlAndMaybeID[0]); + XMLTools.setTagContents(entryElem, "url", urlAndMaybeID[1]); + } else { + // old keys which do not yet have the ID prefix + XMLTools.setTagContents(entryElem, "url", key); + } + XMLTools.setTagContents(entryElem, "user", walletContent.get(key).getUsername()); + XMLTools.setTagContents(entryElem, "password", getEncodedPassword(new String(walletContent.get(key).getPassword()))); + root.appendChild(entryElem); + } catch (CipherException e) { + LogService.getRoot().log( + Level.INFO, + I18N.getMessage(LogService.getRoot().getResourceBundle(), + "com.rapidminer.gui.security.Wallet.store_entry_failed", key, e), e); } - XMLTools.setTagContents(entryElem, "user", wallet.get(key).getUsername()); - XMLTools.setTagContents(entryElem, "password", - Base64.encodeBytes(new String(wallet.get(key).getPassword()).getBytes())); } return doc; } + private String getEncodedPassword(String string) throws CipherException { + return CipherTools.encrypt(string); + } + + private String getDecodedPassword(String string) throws CipherException, IOException { + if (CipherTools.isKeyAvailable()) { + try { + return CipherTools.decrypt(string); + } catch (CipherException e) { + // old password storage detected, use obsolete password decoding mechanism for migration only + if (!activeMigration) { + // not accepting old decoding in a up-to-date secrets file + throw e; + } + } + } + return new String(Base64.decode(string)); + } + /** - * Saves the wallet to the secrets.xml file in the users home directory. + * Saves the walletContent to the secrets.xml file in the users home directory. */ public void saveCache() { LogService.getRoot().log(Level.CONFIG, "com.rapidminer.gui.security.Wallet.saving_secrets_file"); @@ -332,11 +398,10 @@ private String buildKey(String id, String url) { */ public String extractIdFromKey(String key) { String[] urlAndMaybeID = key.split(ID_PREFIX_URL_SEPERATOR); - if (urlAndMaybeID.length == 2) { + if (urlAndMaybeID.length == URL_ID_SPLIT_COUNT) { return urlAndMaybeID[0]; } else { return null; } } - } diff --git a/src/main/java/com/rapidminer/gui/tools/ArrowButton.java b/src/main/java/com/rapidminer/gui/tools/ArrowButton.java index 8682457cc..f9c5e29e5 100644 --- a/src/main/java/com/rapidminer/gui/tools/ArrowButton.java +++ b/src/main/java/com/rapidminer/gui/tools/ArrowButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/AttributeGuiTools.java b/src/main/java/com/rapidminer/gui/tools/AttributeGuiTools.java index 7162fb35b..0c3396627 100644 --- a/src/main/java/com/rapidminer/gui/tools/AttributeGuiTools.java +++ b/src/main/java/com/rapidminer/gui/tools/AttributeGuiTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/AutoCompletionComboBox.java b/src/main/java/com/rapidminer/gui/tools/AutoCompletionComboBox.java index 59435bf63..c6ca58799 100644 --- a/src/main/java/com/rapidminer/gui/tools/AutoCompletionComboBox.java +++ b/src/main/java/com/rapidminer/gui/tools/AutoCompletionComboBox.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/BetaFeaturesIndicator.java b/src/main/java/com/rapidminer/gui/tools/BetaFeaturesIndicator.java index 74eec2e63..95299232a 100644 --- a/src/main/java/com/rapidminer/gui/tools/BetaFeaturesIndicator.java +++ b/src/main/java/com/rapidminer/gui/tools/BetaFeaturesIndicator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/BrowserPopup.java b/src/main/java/com/rapidminer/gui/tools/BrowserPopup.java index 5b1ed7b16..34a2e2959 100644 --- a/src/main/java/com/rapidminer/gui/tools/BrowserPopup.java +++ b/src/main/java/com/rapidminer/gui/tools/BrowserPopup.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/CamelCaseFilter.java b/src/main/java/com/rapidminer/gui/tools/CamelCaseFilter.java index e615ec467..387dea134 100644 --- a/src/main/java/com/rapidminer/gui/tools/CamelCaseFilter.java +++ b/src/main/java/com/rapidminer/gui/tools/CamelCaseFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/CamelCaseTypoFilter.java b/src/main/java/com/rapidminer/gui/tools/CamelCaseTypoFilter.java index 2189d4278..620449025 100644 --- a/src/main/java/com/rapidminer/gui/tools/CamelCaseTypoFilter.java +++ b/src/main/java/com/rapidminer/gui/tools/CamelCaseTypoFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/CellColorProvider.java b/src/main/java/com/rapidminer/gui/tools/CellColorProvider.java index 271818cc0..27798be35 100644 --- a/src/main/java/com/rapidminer/gui/tools/CellColorProvider.java +++ b/src/main/java/com/rapidminer/gui/tools/CellColorProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/CellColorProviderAlternating.java b/src/main/java/com/rapidminer/gui/tools/CellColorProviderAlternating.java index 4e683536d..f2344dd35 100644 --- a/src/main/java/com/rapidminer/gui/tools/CellColorProviderAlternating.java +++ b/src/main/java/com/rapidminer/gui/tools/CellColorProviderAlternating.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/CellColorProviderScaled.java b/src/main/java/com/rapidminer/gui/tools/CellColorProviderScaled.java index 1e3ee1e80..7a17b0330 100644 --- a/src/main/java/com/rapidminer/gui/tools/CellColorProviderScaled.java +++ b/src/main/java/com/rapidminer/gui/tools/CellColorProviderScaled.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/CellColorProviderWhite.java b/src/main/java/com/rapidminer/gui/tools/CellColorProviderWhite.java index 099185844..aaf9f2f48 100644 --- a/src/main/java/com/rapidminer/gui/tools/CellColorProviderWhite.java +++ b/src/main/java/com/rapidminer/gui/tools/CellColorProviderWhite.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/CellColorProviderYellow.java b/src/main/java/com/rapidminer/gui/tools/CellColorProviderYellow.java index aca2b52e7..7e129af19 100644 --- a/src/main/java/com/rapidminer/gui/tools/CellColorProviderYellow.java +++ b/src/main/java/com/rapidminer/gui/tools/CellColorProviderYellow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/CharTextField.java b/src/main/java/com/rapidminer/gui/tools/CharTextField.java index 486214b37..1aa3aa2bc 100644 --- a/src/main/java/com/rapidminer/gui/tools/CharTextField.java +++ b/src/main/java/com/rapidminer/gui/tools/CharTextField.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ColoredJTextPane.java b/src/main/java/com/rapidminer/gui/tools/ColoredJTextPane.java index 81110272e..a813a99ca 100644 --- a/src/main/java/com/rapidminer/gui/tools/ColoredJTextPane.java +++ b/src/main/java/com/rapidminer/gui/tools/ColoredJTextPane.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ColoredTableCellRenderer.java b/src/main/java/com/rapidminer/gui/tools/ColoredTableCellRenderer.java index dd7df5ee0..604ede979 100644 --- a/src/main/java/com/rapidminer/gui/tools/ColoredTableCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/tools/ColoredTableCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/DefaultFrameIconProvider.java b/src/main/java/com/rapidminer/gui/tools/DefaultFrameIconProvider.java index 71f39aa39..8aec9e2fc 100644 --- a/src/main/java/com/rapidminer/gui/tools/DefaultFrameIconProvider.java +++ b/src/main/java/com/rapidminer/gui/tools/DefaultFrameIconProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/DockingTools.java b/src/main/java/com/rapidminer/gui/tools/DockingTools.java index e4d96c3dc..3f9bc4f97 100644 --- a/src/main/java/com/rapidminer/gui/tools/DockingTools.java +++ b/src/main/java/com/rapidminer/gui/tools/DockingTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/EditBlockingProgressThread.java b/src/main/java/com/rapidminer/gui/tools/EditBlockingProgressThread.java index 42d55b173..a16c17a7e 100644 --- a/src/main/java/com/rapidminer/gui/tools/EditBlockingProgressThread.java +++ b/src/main/java/com/rapidminer/gui/tools/EditBlockingProgressThread.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTree.java b/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTree.java index 718a5339c..d4adffbdc 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTree.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeCellRenderer.java b/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeCellRenderer.java index fb4ae3c46..051a8835b 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeMouseSelectionManager.java b/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeMouseSelectionManager.java index 04440926a..319a3e4b3 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeMouseSelectionManager.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeMouseSelectionManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeSelectionModel.java b/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeSelectionModel.java index e2c15009d..7a15ed0a4 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeSelectionModel.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedCheckTreeSelectionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedFixedColumnJTable.java b/src/main/java/com/rapidminer/gui/tools/ExtendedFixedColumnJTable.java index 3632e3241..6eb5a45e1 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedFixedColumnJTable.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedFixedColumnJTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedHTMLEditorKit.java b/src/main/java/com/rapidminer/gui/tools/ExtendedHTMLEditorKit.java index f5e86dcfd..3cca5208b 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedHTMLEditorKit.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedHTMLEditorKit.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedHTMLJEditorPane.java b/src/main/java/com/rapidminer/gui/tools/ExtendedHTMLJEditorPane.java index 5021829cd..7f0233690 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedHTMLJEditorPane.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedHTMLJEditorPane.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJComboBox.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJComboBox.java index f94c6a0d5..88988e230 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJComboBox.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJComboBox.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJFileChooser.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJFileChooser.java index 3b8fe15c8..28098e53f 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJFileChooser.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJFileChooser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJList.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJList.java index 384fc7790..4e0984475 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJList.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJList.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJScrollPane.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJScrollPane.java index 034bc5cd3..e343a15f2 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJScrollPane.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJScrollPane.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJSlider.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJSlider.java index 890ead73f..0f4386f47 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJSlider.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJSlider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJSliderToolTips.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJSliderToolTips.java index b61aa5b02..fb560a104 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJSliderToolTips.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJSliderToolTips.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJTabbedPane.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJTabbedPane.java index c08d3e897..25c75aa8d 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJTabbedPane.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJTabbedPane.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJTable.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJTable.java index 89eef6e99..24cf41d7e 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJTable.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJTableColumnFitMouseListener.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJTableColumnFitMouseListener.java index 9a242437e..88096cb3e 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJTableColumnFitMouseListener.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJTableColumnFitMouseListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJTablePacker.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJTablePacker.java index bdfdd5f5d..14cf90368 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJTablePacker.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJTablePacker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJTableSorterModel.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJTableSorterModel.java index 8975df59f..af65ca8ce 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJTableSorterModel.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJTableSorterModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJTextField.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJTextField.java index 1c6a776cb..ce5b7f9ca 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJTextField.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJTextField.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedJToolBar.java b/src/main/java/com/rapidminer/gui/tools/ExtendedJToolBar.java index cad423d0e..508883792 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedJToolBar.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedJToolBar.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedListCellRenderer.java b/src/main/java/com/rapidminer/gui/tools/ExtendedListCellRenderer.java index 2578674cb..7cc4604fa 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedListCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedListCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedListModel.java b/src/main/java/com/rapidminer/gui/tools/ExtendedListModel.java index ce6c5d632..432b14828 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedListModel.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedListModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedStyledDocument.java b/src/main/java/com/rapidminer/gui/tools/ExtendedStyledDocument.java index 34e2bdc7f..8da59a7c8 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedStyledDocument.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedStyledDocument.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ExtendedTriStateCheckBox.java b/src/main/java/com/rapidminer/gui/tools/ExtendedTriStateCheckBox.java index eab0286a0..33d8a9557 100644 --- a/src/main/java/com/rapidminer/gui/tools/ExtendedTriStateCheckBox.java +++ b/src/main/java/com/rapidminer/gui/tools/ExtendedTriStateCheckBox.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/FilterListener.java b/src/main/java/com/rapidminer/gui/tools/FilterListener.java index 3a069782f..2cd368fbf 100644 --- a/src/main/java/com/rapidminer/gui/tools/FilterListener.java +++ b/src/main/java/com/rapidminer/gui/tools/FilterListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/FilterTextField.java b/src/main/java/com/rapidminer/gui/tools/FilterTextField.java index a848c8fe1..d077aa167 100644 --- a/src/main/java/com/rapidminer/gui/tools/FilterTextField.java +++ b/src/main/java/com/rapidminer/gui/tools/FilterTextField.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,8 +18,6 @@ */ package com.rapidminer.gui.tools; -import com.rapidminer.tools.I18N; - import java.awt.Color; import java.awt.Font; import java.awt.event.FocusEvent; @@ -28,13 +26,14 @@ import java.awt.event.KeyListener; import java.util.Collection; import java.util.LinkedList; - import javax.swing.JTextField; import javax.swing.text.Document; import org.jdesktop.swingx.prompt.PromptSupport; import org.jdesktop.swingx.prompt.PromptSupport.FocusBehavior; +import com.rapidminer.tools.I18N; + /** * A text field for JList, JTable, or JTree filters. Updates all registered {@link FilterListener} @@ -48,6 +47,9 @@ public class FilterTextField extends JTextField { private String defaultFilterText = I18N.getMessage(I18N.getGUIBundle(), "gui.filter_text_field.label"); + /** the value of the field when the last update was fired */ + private String valueLastUpdate = null; + private final Collection filterListeners; private final Collection selectionNavigationListeners; @@ -83,13 +85,6 @@ public FilterTextField(Document doc, String text, int columns) { @Override public void keyPressed(KeyEvent e) { - if ((e == null) - || ((e.getKeyCode() != KeyEvent.VK_BACK_SPACE) && (e.getKeyCode() != KeyEvent.VK_ESCAPE) - && (e.getKeyCode() != KeyEvent.VK_DELETE) && (e.getKeyCode() != KeyEvent.VK_SHIFT) - && (e.getKeyCode() != KeyEvent.VK_ALT) && (e.getKeyCode() != KeyEvent.VK_ALT_GRAPH) - && (e.getKeyCode() != KeyEvent.VK_CONTROL) && (e.getKeyCode() != KeyEvent.VK_META) && (!e - .isActionKey()))) { - } if (e == null) { return; } @@ -160,6 +155,11 @@ public void clearFilter() { private void updateFilter(KeyEvent e) { String filterText = getText(); + // do nothing if no actual change was done + if (valueLastUpdate != null && valueLastUpdate.equals(filterText)) { + return; + } + if ((filterText == null) || (filterText.length() == 0)) { if ((e == null) || ((e.getKeyCode() != KeyEvent.VK_BACK_SPACE) && (e.getKeyCode() != KeyEvent.VK_DELETE) @@ -169,6 +169,9 @@ private void updateFilter(KeyEvent e) { setText(null); } } + + // store text when listeners were notified + valueLastUpdate = filterText; for (FilterListener l : filterListeners) { l.valueChanged(filterText); } diff --git a/src/main/java/com/rapidminer/gui/tools/FilterableListModel.java b/src/main/java/com/rapidminer/gui/tools/FilterableListModel.java index 8d74589b7..e4adfd80d 100644 --- a/src/main/java/com/rapidminer/gui/tools/FilterableListModel.java +++ b/src/main/java/com/rapidminer/gui/tools/FilterableListModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/FrameIconProvider.java b/src/main/java/com/rapidminer/gui/tools/FrameIconProvider.java index 6ad675594..a60383664 100644 --- a/src/main/java/com/rapidminer/gui/tools/FrameIconProvider.java +++ b/src/main/java/com/rapidminer/gui/tools/FrameIconProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/HTMLEditor.java b/src/main/java/com/rapidminer/gui/tools/HTMLEditor.java index 640c8f0d5..2339779c9 100644 --- a/src/main/java/com/rapidminer/gui/tools/HTMLEditor.java +++ b/src/main/java/com/rapidminer/gui/tools/HTMLEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/IconSize.java b/src/main/java/com/rapidminer/gui/tools/IconSize.java index 73e94be22..37c27e9d0 100644 --- a/src/main/java/com/rapidminer/gui/tools/IconSize.java +++ b/src/main/java/com/rapidminer/gui/tools/IconSize.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -20,14 +20,14 @@ /** * This enumeration hold the information about all available icon sizes (mainly used for actions). - * Currently, only icon sizes 24 and 32 are supported. 32 should be used for tool bars and 24 in - * menus. + * Currently, only icon sizes 16, 24, and 48 are supported. 16 should be used for small entries (e.g. lists) and 24 in + * menus, while 48 can be used for large panels. * * @author Ingo Mierswa */ public enum IconSize { - SMALL(16), LARGE(24); + SMALL(16), LARGE(24), HUGE(48); private int size; diff --git a/src/main/java/com/rapidminer/gui/tools/ImagePanel.java b/src/main/java/com/rapidminer/gui/tools/ImagePanel.java index acff3d6e1..41a545d4a 100644 --- a/src/main/java/com/rapidminer/gui/tools/ImagePanel.java +++ b/src/main/java/com/rapidminer/gui/tools/ImagePanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ImageTextPanel.java b/src/main/java/com/rapidminer/gui/tools/ImageTextPanel.java index a24df36dd..6baa53420 100644 --- a/src/main/java/com/rapidminer/gui/tools/ImageTextPanel.java +++ b/src/main/java/com/rapidminer/gui/tools/ImageTextPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/Ionicon.java b/src/main/java/com/rapidminer/gui/tools/Ionicon.java index 538d4417c..e58ad2a7e 100644 --- a/src/main/java/com/rapidminer/gui/tools/Ionicon.java +++ b/src/main/java/com/rapidminer/gui/tools/Ionicon.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/JDelayedCalculationPanel.java b/src/main/java/com/rapidminer/gui/tools/JDelayedCalculationPanel.java index 3739d71ec..9c20fb4eb 100644 --- a/src/main/java/com/rapidminer/gui/tools/JDelayedCalculationPanel.java +++ b/src/main/java/com/rapidminer/gui/tools/JDelayedCalculationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/JRadioSelectionPanel.java b/src/main/java/com/rapidminer/gui/tools/JRadioSelectionPanel.java index c2a28c5d5..f72dbe0a8 100644 --- a/src/main/java/com/rapidminer/gui/tools/JRadioSelectionPanel.java +++ b/src/main/java/com/rapidminer/gui/tools/JRadioSelectionPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/JavaEditor.java b/src/main/java/com/rapidminer/gui/tools/JavaEditor.java index 7cb9600d5..505416fed 100644 --- a/src/main/java/com/rapidminer/gui/tools/JavaEditor.java +++ b/src/main/java/com/rapidminer/gui/tools/JavaEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/LeanFormatter.java b/src/main/java/com/rapidminer/gui/tools/LeanFormatter.java index 2907a22a8..f280d7a65 100644 --- a/src/main/java/com/rapidminer/gui/tools/LeanFormatter.java +++ b/src/main/java/com/rapidminer/gui/tools/LeanFormatter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ListHoverHelper.java b/src/main/java/com/rapidminer/gui/tools/ListHoverHelper.java index 35b52260e..81c976c03 100644 --- a/src/main/java/com/rapidminer/gui/tools/ListHoverHelper.java +++ b/src/main/java/com/rapidminer/gui/tools/ListHoverHelper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/NotificationPopup.java b/src/main/java/com/rapidminer/gui/tools/NotificationPopup.java index 076d9103e..9efcd5b76 100644 --- a/src/main/java/com/rapidminer/gui/tools/NotificationPopup.java +++ b/src/main/java/com/rapidminer/gui/tools/NotificationPopup.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/OperatorFilter.java b/src/main/java/com/rapidminer/gui/tools/OperatorFilter.java index 5075066c2..a691a2a74 100644 --- a/src/main/java/com/rapidminer/gui/tools/OperatorFilter.java +++ b/src/main/java/com/rapidminer/gui/tools/OperatorFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/OperatorList.java b/src/main/java/com/rapidminer/gui/tools/OperatorList.java index 04de6190b..33044f284 100644 --- a/src/main/java/com/rapidminer/gui/tools/OperatorList.java +++ b/src/main/java/com/rapidminer/gui/tools/OperatorList.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/OperatorListCellRenderer.java b/src/main/java/com/rapidminer/gui/tools/OperatorListCellRenderer.java index a66efad51..ee799d252 100644 --- a/src/main/java/com/rapidminer/gui/tools/OperatorListCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/tools/OperatorListCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -20,16 +20,11 @@ import java.awt.Color; import java.awt.Component; -import java.util.logging.Level; - import javax.swing.DefaultListCellRenderer; import javax.swing.JLabel; import javax.swing.JList; -import com.rapidminer.operator.Operator; -import com.rapidminer.operator.OperatorCreationException; import com.rapidminer.operator.OperatorDescription; -import com.rapidminer.tools.LogService; /** @@ -63,15 +58,6 @@ public Component getListCellRendererComponent(JList list, Object value, int i label.setBackground(SwingTools.LIGHTEST_BLUE); } - Operator operator = null; - try { - operator = operatorDescription.createOperatorInstance(); - } catch (OperatorCreationException e) { - // tries to create operator - LogService.getRoot().log(Level.WARNING, - "com.rapidminer.gui.tools.OperatorListCellRenderer.problem_during_creating_of_operator_instance", - e.getMessage()); - } String descriptionString = operatorDescription.getLongDescriptionHTML(); if (descriptionString == null) { descriptionString = operatorDescription.getShortDescription(); @@ -79,8 +65,7 @@ public Component getListCellRendererComponent(JList list, Object value, int i StringBuffer toolTipText = new StringBuffer("Description: " + descriptionString); label.setToolTipText(SwingTools.transformToolTipText(toolTipText.toString(), false, false)); - if (operatorDescription.getDeprecationInfo() != null || operator != null - && operator.getOperatorDescription().getDeprecationInfo() != null) { + if (operatorDescription.isDeprecated()) { label.setForeground(Color.LIGHT_GRAY); } label.setBorder(null); diff --git a/src/main/java/com/rapidminer/gui/tools/ParentButtonModel.java b/src/main/java/com/rapidminer/gui/tools/ParentButtonModel.java index df6e0d436..931fdedf9 100644 --- a/src/main/java/com/rapidminer/gui/tools/ParentButtonModel.java +++ b/src/main/java/com/rapidminer/gui/tools/ParentButtonModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ParentButtonPanel.java b/src/main/java/com/rapidminer/gui/tools/ParentButtonPanel.java index 439636990..b682a0394 100644 --- a/src/main/java/com/rapidminer/gui/tools/ParentButtonPanel.java +++ b/src/main/java/com/rapidminer/gui/tools/ParentButtonPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/PasswordDialog.java b/src/main/java/com/rapidminer/gui/tools/PasswordDialog.java index 71b8a11dd..91e9c5be1 100644 --- a/src/main/java/com/rapidminer/gui/tools/PasswordDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/PasswordDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/PlainTextEditor.java b/src/main/java/com/rapidminer/gui/tools/PlainTextEditor.java index 2615d3321..1460b399e 100644 --- a/src/main/java/com/rapidminer/gui/tools/PlainTextEditor.java +++ b/src/main/java/com/rapidminer/gui/tools/PlainTextEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/PrintingTools.java b/src/main/java/com/rapidminer/gui/tools/PrintingTools.java index ba0e95782..4b8707b84 100644 --- a/src/main/java/com/rapidminer/gui/tools/PrintingTools.java +++ b/src/main/java/com/rapidminer/gui/tools/PrintingTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ProcessGUITools.java b/src/main/java/com/rapidminer/gui/tools/ProcessGUITools.java index 88503be2f..e36df3638 100644 --- a/src/main/java/com/rapidminer/gui/tools/ProcessGUITools.java +++ b/src/main/java/com/rapidminer/gui/tools/ProcessGUITools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ProgressDisplay.java b/src/main/java/com/rapidminer/gui/tools/ProgressDisplay.java index 840802913..b3bb68006 100644 --- a/src/main/java/com/rapidminer/gui/tools/ProgressDisplay.java +++ b/src/main/java/com/rapidminer/gui/tools/ProgressDisplay.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ProgressMonitor.java b/src/main/java/com/rapidminer/gui/tools/ProgressMonitor.java index 7af954946..97c103c47 100644 --- a/src/main/java/com/rapidminer/gui/tools/ProgressMonitor.java +++ b/src/main/java/com/rapidminer/gui/tools/ProgressMonitor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ProgressThread.java b/src/main/java/com/rapidminer/gui/tools/ProgressThread.java index 7318a517e..8a6ed2b17 100644 --- a/src/main/java/com/rapidminer/gui/tools/ProgressThread.java +++ b/src/main/java/com/rapidminer/gui/tools/ProgressThread.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ProgressThreadDialog.java b/src/main/java/com/rapidminer/gui/tools/ProgressThreadDialog.java index 27b0627ef..9deb90139 100644 --- a/src/main/java/com/rapidminer/gui/tools/ProgressThreadDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/ProgressThreadDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ProgressThreadDisplay.java b/src/main/java/com/rapidminer/gui/tools/ProgressThreadDisplay.java index 6c538f448..58627d0d1 100644 --- a/src/main/java/com/rapidminer/gui/tools/ProgressThreadDisplay.java +++ b/src/main/java/com/rapidminer/gui/tools/ProgressThreadDisplay.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ProgressThreadListener.java b/src/main/java/com/rapidminer/gui/tools/ProgressThreadListener.java index f85e0ad47..3660f4676 100644 --- a/src/main/java/com/rapidminer/gui/tools/ProgressThreadListener.java +++ b/src/main/java/com/rapidminer/gui/tools/ProgressThreadListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ProgressThreadStateListener.java b/src/main/java/com/rapidminer/gui/tools/ProgressThreadStateListener.java index d1549da2f..b7388e377 100644 --- a/src/main/java/com/rapidminer/gui/tools/ProgressThreadStateListener.java +++ b/src/main/java/com/rapidminer/gui/tools/ProgressThreadStateListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ProgressThreadStoppedException.java b/src/main/java/com/rapidminer/gui/tools/ProgressThreadStoppedException.java index 62778f99a..790948ab4 100644 --- a/src/main/java/com/rapidminer/gui/tools/ProgressThreadStoppedException.java +++ b/src/main/java/com/rapidminer/gui/tools/ProgressThreadStoppedException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/Registry.java b/src/main/java/com/rapidminer/gui/tools/Registry.java index 88195a9fe..50fb70ac2 100644 --- a/src/main/java/com/rapidminer/gui/tools/Registry.java +++ b/src/main/java/com/rapidminer/gui/tools/Registry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/RegistryEvent.java b/src/main/java/com/rapidminer/gui/tools/RegistryEvent.java index f51f83d6a..ffd0e365a 100644 --- a/src/main/java/com/rapidminer/gui/tools/RegistryEvent.java +++ b/src/main/java/com/rapidminer/gui/tools/RegistryEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/RegistryListener.java b/src/main/java/com/rapidminer/gui/tools/RegistryListener.java index afe9e5812..79e3fd28d 100644 --- a/src/main/java/com/rapidminer/gui/tools/RegistryListener.java +++ b/src/main/java/com/rapidminer/gui/tools/RegistryListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/RepositoryEntryTextField.java b/src/main/java/com/rapidminer/gui/tools/RepositoryEntryTextField.java index 1fa526b1f..b9b8bac82 100644 --- a/src/main/java/com/rapidminer/gui/tools/RepositoryEntryTextField.java +++ b/src/main/java/com/rapidminer/gui/tools/RepositoryEntryTextField.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/RepositoryGuiTools.java b/src/main/java/com/rapidminer/gui/tools/RepositoryGuiTools.java index 5ac6cbfbb..16feb3cd9 100644 --- a/src/main/java/com/rapidminer/gui/tools/RepositoryGuiTools.java +++ b/src/main/java/com/rapidminer/gui/tools/RepositoryGuiTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ResourceAction.java b/src/main/java/com/rapidminer/gui/tools/ResourceAction.java index 725f69858..812510daa 100644 --- a/src/main/java/com/rapidminer/gui/tools/ResourceAction.java +++ b/src/main/java/com/rapidminer/gui/tools/ResourceAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -267,6 +267,28 @@ public void run() { } } + @Override + public void setEnabled(boolean newValue) { + // overwritten because we need to update it's state if it is registered in the global search + + boolean changed = isEnabled() != newValue; + super.setEnabled(newValue); + + if (!changed || !isGlobalSearchReady()) { + return; + } + + // this must not crash the EDT, so it's wrapped in try/catch + try { + if (RapidMinerGUI.getMainFrame().getActionsGlobalSearchManager().isActionRegistered(this)) { + RapidMinerGUI.getMainFrame().getActionsGlobalSearchManager().addAction(this); + } + } catch (Throwable e) { + // We cannot risk blowing up the EDT, so catch absolutely everything here + LogService.getRoot().log(Level.WARNING, "com.rapidminer.gui.tools.ResourceAction.error.update_global_search", e); + } + } + /** * Adds the action to the input and action map of the component. * @@ -287,6 +309,34 @@ public void addToActionMap(JComponent component, String actionKey, int condition addToActionMap(condition, false, false, actionKey, component); } + /** + * Adds this action to the Global Search for actions (see {@link com.rapidminer.search.GlobalSearchManager}. + * Only call after {@link com.rapidminer.gui.MainFrame} has been initialized! + *

+ * See {@link #removeFromGlobalSearch()} to remove it again. + *

+ * @since 8.1 + */ + public void addToGlobalSearch() { + if (!isGlobalSearchReady()) { + return; + } + + RapidMinerGUI.getMainFrame().getActionsGlobalSearchManager().addAction(this); + } + + /** + * Removes this action from the Global Search (see {@link com.rapidminer.search.GlobalSearchManager}. + * @since 8.1 + */ + public void removeFromGlobalSearch() { + if (!isGlobalSearchReady()) { + return; + } + + RapidMinerGUI.getMainFrame().getActionsGlobalSearchManager().removeAction(this); + } + /** * This returns the i18n key of this action. */ @@ -302,6 +352,17 @@ public IconType getIconType() { return iconType; } + /** + * Whether the Global Search is ready or not. + * + * @return {@code true} if it is ready; {@code false} otherwise + */ + private boolean isGlobalSearchReady() { + return RapidMinerGUI.getMainFrame() != null && + RapidMinerGUI.getMainFrame().getActionsGlobalSearchManager() != null && + RapidMinerGUI.getMainFrame().getActionsGlobalSearchManager().isInitialized(); + } + private static String getMessage(String key) { return I18N.getMessage(I18N.getGUIBundle(), "gui.action." + key); } diff --git a/src/main/java/com/rapidminer/gui/tools/ResourceActionAdapter.java b/src/main/java/com/rapidminer/gui/tools/ResourceActionAdapter.java index 2e4ea06ed..5f987bd78 100644 --- a/src/main/java/com/rapidminer/gui/tools/ResourceActionAdapter.java +++ b/src/main/java/com/rapidminer/gui/tools/ResourceActionAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ResourceActionTransmitter.java b/src/main/java/com/rapidminer/gui/tools/ResourceActionTransmitter.java index f0a3da29e..2b097a669 100644 --- a/src/main/java/com/rapidminer/gui/tools/ResourceActionTransmitter.java +++ b/src/main/java/com/rapidminer/gui/tools/ResourceActionTransmitter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ResourceDockKey.java b/src/main/java/com/rapidminer/gui/tools/ResourceDockKey.java index 7647c95e8..82b88027d 100644 --- a/src/main/java/com/rapidminer/gui/tools/ResourceDockKey.java +++ b/src/main/java/com/rapidminer/gui/tools/ResourceDockKey.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ResourceLabel.java b/src/main/java/com/rapidminer/gui/tools/ResourceLabel.java index 3a1b0febc..2615c2ce7 100644 --- a/src/main/java/com/rapidminer/gui/tools/ResourceLabel.java +++ b/src/main/java/com/rapidminer/gui/tools/ResourceLabel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ResourceMenu.java b/src/main/java/com/rapidminer/gui/tools/ResourceMenu.java index a39f1eeb6..8441ad294 100644 --- a/src/main/java/com/rapidminer/gui/tools/ResourceMenu.java +++ b/src/main/java/com/rapidminer/gui/tools/ResourceMenu.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ResourceTabbedPane.java b/src/main/java/com/rapidminer/gui/tools/ResourceTabbedPane.java index 5a74b9c80..d3d631218 100644 --- a/src/main/java/com/rapidminer/gui/tools/ResourceTabbedPane.java +++ b/src/main/java/com/rapidminer/gui/tools/ResourceTabbedPane.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ResultWarningPreventionRegistry.java b/src/main/java/com/rapidminer/gui/tools/ResultWarningPreventionRegistry.java index 6ba3df79b..0da73f319 100644 --- a/src/main/java/com/rapidminer/gui/tools/ResultWarningPreventionRegistry.java +++ b/src/main/java/com/rapidminer/gui/tools/ResultWarningPreventionRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/RowNumberTable.java b/src/main/java/com/rapidminer/gui/tools/RowNumberTable.java index 3aa63ecba..15d1fb598 100644 --- a/src/main/java/com/rapidminer/gui/tools/RowNumberTable.java +++ b/src/main/java/com/rapidminer/gui/tools/RowNumberTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/SQLEditor.java b/src/main/java/com/rapidminer/gui/tools/SQLEditor.java index 26f428897..d9aaefd64 100644 --- a/src/main/java/com/rapidminer/gui/tools/SQLEditor.java +++ b/src/main/java/com/rapidminer/gui/tools/SQLEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ScaledImageIcon.java b/src/main/java/com/rapidminer/gui/tools/ScaledImageIcon.java index e4e808ff9..ec5db24d8 100644 --- a/src/main/java/com/rapidminer/gui/tools/ScaledImageIcon.java +++ b/src/main/java/com/rapidminer/gui/tools/ScaledImageIcon.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ScrollableJPopupMenu.java b/src/main/java/com/rapidminer/gui/tools/ScrollableJPopupMenu.java index f276d75c2..abc3d7c0a 100644 --- a/src/main/java/com/rapidminer/gui/tools/ScrollableJPopupMenu.java +++ b/src/main/java/com/rapidminer/gui/tools/ScrollableJPopupMenu.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/SelectionNavigationListener.java b/src/main/java/com/rapidminer/gui/tools/SelectionNavigationListener.java index 05bd631c0..aaa86c718 100644 --- a/src/main/java/com/rapidminer/gui/tools/SelectionNavigationListener.java +++ b/src/main/java/com/rapidminer/gui/tools/SelectionNavigationListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/SimpleFileFilter.java b/src/main/java/com/rapidminer/gui/tools/SimpleFileFilter.java index a45f8a8f9..dd632bc5b 100644 --- a/src/main/java/com/rapidminer/gui/tools/SimpleFileFilter.java +++ b/src/main/java/com/rapidminer/gui/tools/SimpleFileFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/SplashScreen.java b/src/main/java/com/rapidminer/gui/tools/SplashScreen.java index 40e077a74..ca6b69cfc 100644 --- a/src/main/java/com/rapidminer/gui/tools/SplashScreen.java +++ b/src/main/java/com/rapidminer/gui/tools/SplashScreen.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/StatusBar.java b/src/main/java/com/rapidminer/gui/tools/StatusBar.java index 1249b8314..f09647065 100644 --- a/src/main/java/com/rapidminer/gui/tools/StatusBar.java +++ b/src/main/java/com/rapidminer/gui/tools/StatusBar.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/SwingTools.java b/src/main/java/com/rapidminer/gui/tools/SwingTools.java index bd4931e76..e6886c802 100644 --- a/src/main/java/com/rapidminer/gui/tools/SwingTools.java +++ b/src/main/java/com/rapidminer/gui/tools/SwingTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -57,6 +57,7 @@ import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.logging.Level; @@ -772,6 +773,33 @@ public static String addLinebreaks(String message) { return result.toString(); } + /** + * Capitalizes every first letter in a string. Note that if a string contains multiple words separated by a whitespace, each word will be capitalized. + * If the string contains more than a single whitespace between words, the spaces are reduced to a single whitespace. + * + * @param string + * the string to capitalize + * @return the capitalized string with a single whitespace between words, never {@code null} + * @since 8.1 + */ + public static String capitalizeString(final String string) { + if (string == null) { + throw new IllegalArgumentException("string must not be nulL!"); + } + if (string.trim().isEmpty()) { + return ""; + } + + StringBuilder sb = new StringBuilder(); + for (String split : string.split("\\s+")) { + sb.append(split.substring(0, 1).toUpperCase(Locale.ENGLISH)); + sb.append(split.substring(1)); + sb.append(' '); + } + + return sb.toString().trim(); + } + /** * The key will be used for the properties gui.dialog.-key-.title and * gui.dialog.results.-key-.icon @@ -1889,11 +1917,13 @@ public static boolean isMouseEventExitedToChildComponents(final Component parent * @return */ public static Color darkenColor(final Color color, final float factor) { + int initialAlpha = Math.min(255, (int) (color.getAlpha() * 1.1f)); // convert to H(ue) S(aturation) B(rightness), which is designed for // this kind of operation float hsb[] = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null); // turn down brightness and return color - return Color.getHSBColor(hsb[0], hsb[1], factor * hsb[2]); + Color returnColor = Color.getHSBColor(hsb[0], hsb[1], factor * hsb[2]); + return new Color(returnColor.getRed(), returnColor.getGreen(), returnColor.getBlue(), initialAlpha); } /** @@ -1907,11 +1937,13 @@ public static Color darkenColor(final Color color, final float factor) { * @return color with changed saturation */ public static Color saturateColor(final Color color, final float factor) { + int initialAlpha = color.getAlpha(); // convert to H(ue) S(aturation) B(rightness), which is designed for // this kind of operation float hsb[] = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null); // adjust saturation and return color - return Color.getHSBColor(hsb[0], factor * hsb[1], hsb[2]); + Color returnColor = Color.getHSBColor(hsb[0], factor * hsb[1], hsb[2]); + return new Color(returnColor.getRed(), returnColor.getGreen(), returnColor.getBlue(), initialAlpha); } /** @@ -1921,11 +1953,13 @@ public static Color saturateColor(final Color color, final float factor) { * @return */ public static Color brightenColor(final Color color) { + int initialAlpha = (int) (color.getAlpha() * 0.9f); // convert to H(ue) S(aturation) B(rightness), which is designed for // this kind of operation float hsb[] = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null); // turn up brightness and return color - return Color.getHSBColor(hsb[0], hsb[1], 0.5f * (1f + hsb[2])); + Color returnColor = Color.getHSBColor(hsb[0], hsb[1], 0.5f * (1f + hsb[2])); + return new Color(returnColor.getRed(), returnColor.getGreen(), returnColor.getBlue(), initialAlpha); } /** diff --git a/src/main/java/com/rapidminer/gui/tools/SystemMonitor.java b/src/main/java/com/rapidminer/gui/tools/SystemMonitor.java index 051228659..ffc9d4223 100644 --- a/src/main/java/com/rapidminer/gui/tools/SystemMonitor.java +++ b/src/main/java/com/rapidminer/gui/tools/SystemMonitor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/TextFieldWithAction.java b/src/main/java/com/rapidminer/gui/tools/TextFieldWithAction.java index f6d1d566e..b7e1fbe57 100644 --- a/src/main/java/com/rapidminer/gui/tools/TextFieldWithAction.java +++ b/src/main/java/com/rapidminer/gui/tools/TextFieldWithAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -28,7 +28,6 @@ import java.awt.event.FocusListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; - import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; @@ -63,7 +62,11 @@ public class TextFieldWithAction extends JPanel { private ImageIcon hoverActionIcon = null; + private ImageIcon defaultIcon = null; + private ImageIcon forceIcon = null; + private JTextField field; + private JLabel actionLabel; /** * Creates a new {@link TextFieldWithAction} instance. @@ -85,8 +88,8 @@ public TextFieldWithAction(final JTextField field, final ResourceAction action) * the textfield into which the action icon should be placed * @param action * the action to invoke when clicking the icon in the textfield - * @param hoverAction - * the action to invoke when hovering the icon in the textfield + * @param hoverIcon + * the icon to display when hovering over the textfield */ public TextFieldWithAction(final JTextField field, final ResourceAction action, final ImageIcon hoverIcon) { if (field == null) { @@ -107,15 +110,22 @@ public TextFieldWithAction(final JTextField field, final ResourceAction action, actionIcon = SwingTools.createIcon("16/" + action.getIconName(), action.getIconType() == IconType.MONO); hoverActionIcon = hoverIcon; - final JLabel actionLabel = new JLabel(actionIcon) { + actionLabel = new JLabel(actionIcon) { private static final long serialVersionUID = 1L; @Override public void paintComponent(Graphics g) { + Graphics2D g2 = (Graphics2D) g; + + // force icon set? Always show that. + if (forceIcon != null) { + super.paintComponent(g2); + return; + } + // override this so the action is only visible, when there is text in the text field - if (!(field.getText().isEmpty() || field.getText() == null)) { - Graphics2D g2 = (Graphics2D) g; + if (!(field.getText() == null || field.getText().isEmpty())) { // only in the case there is no hover action icon given if (hoverActionIcon == null && hovered) { @@ -131,6 +141,9 @@ public void paintComponent(Graphics g) { } super.paintComponent(g2); + } else if (defaultIcon != null) { + // no text but a default icon? Paint it. + defaultIcon.paintIcon(this, g2, 0, 0); } } }; @@ -146,6 +159,10 @@ public void mouseReleased(MouseEvent e) { @Override public void mouseEntered(MouseEvent e) { + if (forceIcon != null) { + return; + } + hovered = true; if (hoverActionIcon != null) { actionLabel.setIcon(hoverActionIcon); @@ -155,6 +172,10 @@ public void mouseEntered(MouseEvent e) { @Override public void mouseExited(MouseEvent e) { + if (forceIcon != null) { + return; + } + hovered = false; if (hoverActionIcon != null) { actionLabel.setIcon(actionIcon); @@ -225,4 +246,31 @@ public boolean hasFocus() { return field.isFocusOwner(); } + /** + * Sets the icon which is painted if no text is in this textfield. + * + * @param defaultIcon + * the icon to paint if no text has been entered. If not specified, no icon will be painted + * @since 8.1 + */ + public void setDefaultIcon(ImageIcon defaultIcon) { + this.defaultIcon = defaultIcon; + } + + /** + * Forces the given icon to be visible no matter how the user interacts with the text field. To unset, call again with {@code null}. + * + * @param forceIcon + * the icon which should always be painted regardless of state of the text field. Set to {@code null} to remove the forced icon + * @since 8.1 + */ + public void setForceIcon(ImageIcon forceIcon) { + this.forceIcon = forceIcon; + if (forceIcon != null) { + actionLabel.setIcon(forceIcon); + } else { + actionLabel.setIcon(actionIcon); + } + } + } diff --git a/src/main/java/com/rapidminer/gui/tools/TextPanel.java b/src/main/java/com/rapidminer/gui/tools/TextPanel.java index 2285b7539..bc178f0ba 100644 --- a/src/main/java/com/rapidminer/gui/tools/TextPanel.java +++ b/src/main/java/com/rapidminer/gui/tools/TextPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/TipOfTheDayProvider.java b/src/main/java/com/rapidminer/gui/tools/TipOfTheDayProvider.java index ae84fa6c1..8e779c9d7 100644 --- a/src/main/java/com/rapidminer/gui/tools/TipOfTheDayProvider.java +++ b/src/main/java/com/rapidminer/gui/tools/TipOfTheDayProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/TutorialTools.java b/src/main/java/com/rapidminer/gui/tools/TutorialTools.java index 4b9498cdf..6d48018c9 100644 --- a/src/main/java/com/rapidminer/gui/tools/TutorialTools.java +++ b/src/main/java/com/rapidminer/gui/tools/TutorialTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/UpdateQueue.java b/src/main/java/com/rapidminer/gui/tools/UpdateQueue.java index 9e88d5e3c..639a7db9c 100644 --- a/src/main/java/com/rapidminer/gui/tools/UpdateQueue.java +++ b/src/main/java/com/rapidminer/gui/tools/UpdateQueue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/VersionNumber.java b/src/main/java/com/rapidminer/gui/tools/VersionNumber.java index 41534140d..965415f47 100644 --- a/src/main/java/com/rapidminer/gui/tools/VersionNumber.java +++ b/src/main/java/com/rapidminer/gui/tools/VersionNumber.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ViewToolBar.java b/src/main/java/com/rapidminer/gui/tools/ViewToolBar.java index 650eb1fbb..f990a90b1 100644 --- a/src/main/java/com/rapidminer/gui/tools/ViewToolBar.java +++ b/src/main/java/com/rapidminer/gui/tools/ViewToolBar.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/XMLEditor.java b/src/main/java/com/rapidminer/gui/tools/XMLEditor.java index 479766758..cbff9a548 100644 --- a/src/main/java/com/rapidminer/gui/tools/XMLEditor.java +++ b/src/main/java/com/rapidminer/gui/tools/XMLEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/actions/AddToSortingColumnsAction.java b/src/main/java/com/rapidminer/gui/tools/actions/AddToSortingColumnsAction.java index d2e7bf0cb..65d6c250f 100644 --- a/src/main/java/com/rapidminer/gui/tools/actions/AddToSortingColumnsAction.java +++ b/src/main/java/com/rapidminer/gui/tools/actions/AddToSortingColumnsAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/actions/EqualColumnWidthsAction.java b/src/main/java/com/rapidminer/gui/tools/actions/EqualColumnWidthsAction.java index dc2a906dc..047655086 100644 --- a/src/main/java/com/rapidminer/gui/tools/actions/EqualColumnWidthsAction.java +++ b/src/main/java/com/rapidminer/gui/tools/actions/EqualColumnWidthsAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/actions/FitAllColumnWidthsAction.java b/src/main/java/com/rapidminer/gui/tools/actions/FitAllColumnWidthsAction.java index 6cf8b39cc..4e4926b99 100644 --- a/src/main/java/com/rapidminer/gui/tools/actions/FitAllColumnWidthsAction.java +++ b/src/main/java/com/rapidminer/gui/tools/actions/FitAllColumnWidthsAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/actions/FitColumnWidthAction.java b/src/main/java/com/rapidminer/gui/tools/actions/FitColumnWidthAction.java index e02afc01a..386a689bb 100644 --- a/src/main/java/com/rapidminer/gui/tools/actions/FitColumnWidthAction.java +++ b/src/main/java/com/rapidminer/gui/tools/actions/FitColumnWidthAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/actions/RestoreOriginalColumnOrderAction.java b/src/main/java/com/rapidminer/gui/tools/actions/RestoreOriginalColumnOrderAction.java index c9eac2771..8968bc8b4 100644 --- a/src/main/java/com/rapidminer/gui/tools/actions/RestoreOriginalColumnOrderAction.java +++ b/src/main/java/com/rapidminer/gui/tools/actions/RestoreOriginalColumnOrderAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/actions/SelectColumnAction.java b/src/main/java/com/rapidminer/gui/tools/actions/SelectColumnAction.java index 9dbc49aba..886281dba 100644 --- a/src/main/java/com/rapidminer/gui/tools/actions/SelectColumnAction.java +++ b/src/main/java/com/rapidminer/gui/tools/actions/SelectColumnAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/actions/SelectRowAction.java b/src/main/java/com/rapidminer/gui/tools/actions/SelectRowAction.java index 6d1ccd440..89e6f612d 100644 --- a/src/main/java/com/rapidminer/gui/tools/actions/SelectRowAction.java +++ b/src/main/java/com/rapidminer/gui/tools/actions/SelectRowAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/actions/SelectionDependentAction.java b/src/main/java/com/rapidminer/gui/tools/actions/SelectionDependentAction.java index 9b2a9e2d7..fe1655ffd 100644 --- a/src/main/java/com/rapidminer/gui/tools/actions/SelectionDependentAction.java +++ b/src/main/java/com/rapidminer/gui/tools/actions/SelectionDependentAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/actions/SortByColumnAction.java b/src/main/java/com/rapidminer/gui/tools/actions/SortByColumnAction.java index b1f2df02b..5f0a317b4 100644 --- a/src/main/java/com/rapidminer/gui/tools/actions/SortByColumnAction.java +++ b/src/main/java/com/rapidminer/gui/tools/actions/SortByColumnAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/actions/SortColumnsAccordingToNameAction.java b/src/main/java/com/rapidminer/gui/tools/actions/SortColumnsAccordingToNameAction.java index 98a25859b..885e4d726 100644 --- a/src/main/java/com/rapidminer/gui/tools/actions/SortColumnsAccordingToNameAction.java +++ b/src/main/java/com/rapidminer/gui/tools/actions/SortColumnsAccordingToNameAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/autocomplete/AutoCompleteComboBoxAddition.java b/src/main/java/com/rapidminer/gui/tools/autocomplete/AutoCompleteComboBoxAddition.java index 0fde3b2a0..b9b7b0d28 100644 --- a/src/main/java/com/rapidminer/gui/tools/autocomplete/AutoCompleteComboBoxAddition.java +++ b/src/main/java/com/rapidminer/gui/tools/autocomplete/AutoCompleteComboBoxAddition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/bubble/BubbleWindow.java b/src/main/java/com/rapidminer/gui/tools/bubble/BubbleWindow.java index e8be26771..12e1c4ad2 100644 --- a/src/main/java/com/rapidminer/gui/tools/bubble/BubbleWindow.java +++ b/src/main/java/com/rapidminer/gui/tools/bubble/BubbleWindow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/bubble/ButtonBubble.java b/src/main/java/com/rapidminer/gui/tools/bubble/ButtonBubble.java index f54b5d8c2..885f6f4b8 100644 --- a/src/main/java/com/rapidminer/gui/tools/bubble/ButtonBubble.java +++ b/src/main/java/com/rapidminer/gui/tools/bubble/ButtonBubble.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/bubble/ComponentBubbleWindow.java b/src/main/java/com/rapidminer/gui/tools/bubble/ComponentBubbleWindow.java index 28526ceaf..8e5fcbab5 100644 --- a/src/main/java/com/rapidminer/gui/tools/bubble/ComponentBubbleWindow.java +++ b/src/main/java/com/rapidminer/gui/tools/bubble/ComponentBubbleWindow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/bubble/DockableBubble.java b/src/main/java/com/rapidminer/gui/tools/bubble/DockableBubble.java index 291e98bbd..94e764edd 100644 --- a/src/main/java/com/rapidminer/gui/tools/bubble/DockableBubble.java +++ b/src/main/java/com/rapidminer/gui/tools/bubble/DockableBubble.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/bubble/OperatorInfoBubble.java b/src/main/java/com/rapidminer/gui/tools/bubble/OperatorInfoBubble.java index 8168f0f34..a20dd5bf5 100644 --- a/src/main/java/com/rapidminer/gui/tools/bubble/OperatorInfoBubble.java +++ b/src/main/java/com/rapidminer/gui/tools/bubble/OperatorInfoBubble.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/bubble/ParameterErrorInfoBubble.java b/src/main/java/com/rapidminer/gui/tools/bubble/ParameterErrorInfoBubble.java index 38ed4ada9..9e7e06dd6 100644 --- a/src/main/java/com/rapidminer/gui/tools/bubble/ParameterErrorInfoBubble.java +++ b/src/main/java/com/rapidminer/gui/tools/bubble/ParameterErrorInfoBubble.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/bubble/PortInfoBubble.java b/src/main/java/com/rapidminer/gui/tools/bubble/PortInfoBubble.java index 5328eaeaf..e5cc69bd7 100644 --- a/src/main/java/com/rapidminer/gui/tools/bubble/PortInfoBubble.java +++ b/src/main/java/com/rapidminer/gui/tools/bubble/PortInfoBubble.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/bubble/WindowChoreographer.java b/src/main/java/com/rapidminer/gui/tools/bubble/WindowChoreographer.java index 4e829a98a..1a8a5c207 100644 --- a/src/main/java/com/rapidminer/gui/tools/bubble/WindowChoreographer.java +++ b/src/main/java/com/rapidminer/gui/tools/bubble/WindowChoreographer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/AbstractLinkButton.java b/src/main/java/com/rapidminer/gui/tools/components/AbstractLinkButton.java index 609e4f23b..dda056e5c 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/AbstractLinkButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/AbstractLinkButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/ButtonBarCardPanel.java b/src/main/java/com/rapidminer/gui/tools/components/ButtonBarCardPanel.java index c23e83a26..b370ce789 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/ButtonBarCardPanel.java +++ b/src/main/java/com/rapidminer/gui/tools/components/ButtonBarCardPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/ButtonDecotrator.java b/src/main/java/com/rapidminer/gui/tools/components/ButtonDecotrator.java index 716c45d76..809a629b7 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/ButtonDecotrator.java +++ b/src/main/java/com/rapidminer/gui/tools/components/ButtonDecotrator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/Card.java b/src/main/java/com/rapidminer/gui/tools/components/Card.java index 3b4fe862e..dbab5d41b 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/Card.java +++ b/src/main/java/com/rapidminer/gui/tools/components/Card.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/CardCellRenderer.java b/src/main/java/com/rapidminer/gui/tools/components/CardCellRenderer.java index d401803ae..33bfc6494 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/CardCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/tools/components/CardCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/CardSelectionEvent.java b/src/main/java/com/rapidminer/gui/tools/components/CardSelectionEvent.java index c8232d34f..c04738768 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/CardSelectionEvent.java +++ b/src/main/java/com/rapidminer/gui/tools/components/CardSelectionEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/CardSelectionListener.java b/src/main/java/com/rapidminer/gui/tools/components/CardSelectionListener.java index da0a05d6d..2f7c5839a 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/CardSelectionListener.java +++ b/src/main/java/com/rapidminer/gui/tools/components/CardSelectionListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/ColorIcon.java b/src/main/java/com/rapidminer/gui/tools/components/ColorIcon.java index adce707c2..17e21d6db 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/ColorIcon.java +++ b/src/main/java/com/rapidminer/gui/tools/components/ColorIcon.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/ColorSelectionButton.java b/src/main/java/com/rapidminer/gui/tools/components/ColorSelectionButton.java index cf4898590..d136abf94 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/ColorSelectionButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/ColorSelectionButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/ColorSelectionListener.java b/src/main/java/com/rapidminer/gui/tools/components/ColorSelectionListener.java index bb85226fd..1c9a46e80 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/ColorSelectionListener.java +++ b/src/main/java/com/rapidminer/gui/tools/components/ColorSelectionListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/DropDownButton.java b/src/main/java/com/rapidminer/gui/tools/components/DropDownButton.java index 57f70508c..92456652a 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/DropDownButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/DropDownButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/DropDownPopupButton.java b/src/main/java/com/rapidminer/gui/tools/components/DropDownPopupButton.java index 9cba9aec3..016290776 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/DropDownPopupButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/DropDownPopupButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,22 +18,22 @@ */ package com.rapidminer.gui.tools.components; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; +import java.awt.Graphics; import java.util.LinkedList; import java.util.List; - import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; +import javax.swing.SwingConstants; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import com.rapidminer.gui.tools.Ionicon; import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.SwingTools; +import com.rapidminer.gui.tools.components.composite.CompositeButtonPainter; import com.rapidminer.tools.I18N; @@ -56,6 +56,11 @@ public class DropDownPopupButton extends JButton { */ private static final String DEFAULT_COLOR = "4F4F4F"; + /** + * at least this amount of ms have passed before the popup can be opened again. + */ + private static final int POPUP_CLOSE_DELTA = 250; + /** * Interface providing a method to obtain a {@link JPopupMenu}. */ @@ -83,6 +88,9 @@ public static class DropDownPopupButtonBuilder { private JPopupMenu popupMenu = new JPopupMenu(); + /** -1 means regular button, otherwise {@link com.rapidminer.gui.tools.components.composite.CompositeButton} */ + private int position = -1; + /** * Sets the action that specifies the text, icon and tooltip of the button created by this * builder. @@ -130,20 +138,30 @@ public DropDownPopupButtonBuilder addSeparator() { return this; } + /** + * Optional. If specified, the button will not be a standalone button, but rather be assumed to be part of multiple buttons + * directly next to each other, see {@link com.rapidminer.gui.tools.components.composite.CompositeButton}. + * + * @param position + * the position in the composite element ({@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, or {@link SwingConstants#RIGHT}) + * @return the builder + * @since 8.1 + */ + public DropDownPopupButtonBuilder setComposite(int position) { + this.position = position; + return this; + } + /** * Creates a {@link DropDownPopupButton} from the given data. * * @return the button created with the given data */ public DropDownPopupButton build() { - return new DropDownPopupButton(action, new PopupMenuProvider() { - - @Override - public JPopupMenu getPopupMenu() { - return popupMenu; - } - - }); + DropDownPopupButton button = new DropDownPopupButton(action, () -> popupMenu); + button.setComposite(position); + return button; } } @@ -161,6 +179,11 @@ public JPopupMenu getPopupMenu() { private final PopupMenuProvider menuProvider; + private int position = -1; + + /** Paints the component background and border. */ + private CompositeButtonPainter painter; + // small hack to prevent the popup from opening itself when you click // the button to actually close it private final PopupMenuListener popupListener = new PopupMenuListener() { @@ -226,32 +249,66 @@ public DropDownPopupButton(ResourceAction action, PopupMenuProvider popupMenuPro setupAction(); } + /** + * Makes this a composite button, i.e. one that is part of other buttons right next to each other with no space in between. + * + * @param position + * a value of {@code -1} means regular button, otherwise see {@link com.rapidminer.gui.tools.components.composite.CompositeButton} + */ + private void setComposite(int position) { + this.position = position; + if (position !=-1) { + super.setContentAreaFilled(false); + super.setBorderPainted(false); + painter = new CompositeButtonPainter(this, position); + } else { + super.setContentAreaFilled(true); + super.setBorderPainted(true); + painter = null; + } + } + private void setupAction() { - addActionListener(new ActionListener() { - - @Override - public void actionPerformed(final ActionEvent e) { - JPopupMenu popupMenu = menuProvider.getPopupMenu(); - - if (!popupMenu.isVisible()) { - // hack to prevent filter popup from opening itself again - // when you click the button to actually close it while it - // is open - if (System.currentTimeMillis() - lastPopupCloseTime < 250) { - return; - } - popupMenu.addPopupMenuListener(popupListener); - for (PopupMenuListener listener : otherListeners) { - popupMenu.addPopupMenuListener(listener); - } - - popupMenu.show(DropDownPopupButton.this, 0, DropDownPopupButton.this.getHeight() - 1); - popupMenu.requestFocusInWindow(); + addActionListener(e -> { + JPopupMenu popupMenu = menuProvider.getPopupMenu(); + + if (!popupMenu.isVisible()) { + // hack to prevent filter popup from opening itself again + // when you click the button to actually close it while it + // is open + if (System.currentTimeMillis() - lastPopupCloseTime < POPUP_CLOSE_DELTA) { + return; + } + popupMenu.addPopupMenuListener(popupListener); + for (PopupMenuListener listener : otherListeners) { + popupMenu.addPopupMenuListener(listener); } + + popupMenu.show(DropDownPopupButton.this, 0, DropDownPopupButton.this.getHeight() - 1); + popupMenu.requestFocusInWindow(); } }); } + @Override + protected void paintComponent(Graphics g) { + if (position != -1) { + painter.paintComponent(g); + } + + // still super.paint because otherwise text is not painted etc. + super.paintComponent(g); + } + + @Override + protected void paintBorder(Graphics g) { + if (position != -1) { + painter.paintBorder(g); + } else { + super.paintBorder(g); + } + } + @Override public void setText(String text) { this.text = text; diff --git a/src/main/java/com/rapidminer/gui/tools/components/ExtendedCardLayout.java b/src/main/java/com/rapidminer/gui/tools/components/ExtendedCardLayout.java new file mode 100644 index 000000000..56d838c3a --- /dev/null +++ b/src/main/java/com/rapidminer/gui/tools/components/ExtendedCardLayout.java @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.tools.components; + +import java.awt.CardLayout; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Insets; + + +/** + * Same as {@link CardLayout}, with the only difference that it does compute its preferred size for the visible components only and ignores the preferred size of components on not displayed cards. + * + * @author Marco Boeck + * @since 8.1 + */ +public class ExtendedCardLayout extends CardLayout { + + @Override + public Dimension preferredLayoutSize(Container parent) { + Component comp = findDisplayedComponent(parent); + + if (comp != null) { + Dimension preferredSize = comp.getPreferredSize(); + Insets parentInsets = parent.getInsets(); + return new Dimension(preferredSize.width + parentInsets.left + parentInsets.right, preferredSize.height + parentInsets.top + parentInsets.bottom); + } else { + return super.preferredLayoutSize(parent); + } + } + + /** + * Returns the visible component, aka the component that is currently displayed. + * + * @param parent + * the container all cards are in + * @return the component or {@code null} if no component is part of this card layout + */ + private Component findDisplayedComponent(Container parent) { + for (Component comp : parent.getComponents()) { + if (comp.isVisible()) { + return comp; + } + } + + return null; + } +} diff --git a/src/main/java/com/rapidminer/gui/tools/components/FancyButton.java b/src/main/java/com/rapidminer/gui/tools/components/FancyButton.java index e027700ce..07409fdf0 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/FancyButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/FancyButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/FancyConstants.java b/src/main/java/com/rapidminer/gui/tools/components/FancyConstants.java index 76f9393cb..7994edabe 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/FancyConstants.java +++ b/src/main/java/com/rapidminer/gui/tools/components/FancyConstants.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/FancyDropDownButton.java b/src/main/java/com/rapidminer/gui/tools/components/FancyDropDownButton.java index aa22e3c76..2a733dd38 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/FancyDropDownButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/FancyDropDownButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/FixedWidthEditorPane.java b/src/main/java/com/rapidminer/gui/tools/components/FixedWidthEditorPane.java index 85d0c5f4f..ee87e174e 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/FixedWidthEditorPane.java +++ b/src/main/java/com/rapidminer/gui/tools/components/FixedWidthEditorPane.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/FixedWidthLabel.java b/src/main/java/com/rapidminer/gui/tools/components/FixedWidthLabel.java index 0088c73ba..d72d04dd1 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/FixedWidthLabel.java +++ b/src/main/java/com/rapidminer/gui/tools/components/FixedWidthLabel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/LinkButton.java b/src/main/java/com/rapidminer/gui/tools/components/LinkButton.java index ee454d462..a2fcf5646 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/LinkButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/LinkButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/LinkLocalButton.java b/src/main/java/com/rapidminer/gui/tools/components/LinkLocalButton.java index 93162d052..76aa128ef 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/LinkLocalButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/LinkLocalButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/LinkRemoteButton.java b/src/main/java/com/rapidminer/gui/tools/components/LinkRemoteButton.java index 7d780fa2a..03af2f456 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/LinkRemoteButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/LinkRemoteButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/PlainArrowDropDownButton.java b/src/main/java/com/rapidminer/gui/tools/components/PlainArrowDropDownButton.java index dcf28f35f..b40e3ce22 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/PlainArrowDropDownButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/PlainArrowDropDownButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/PrintableComponentCard.java b/src/main/java/com/rapidminer/gui/tools/components/PrintableComponentCard.java index f027264a9..44f38aa05 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/PrintableComponentCard.java +++ b/src/main/java/com/rapidminer/gui/tools/components/PrintableComponentCard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/ResourceCard.java b/src/main/java/com/rapidminer/gui/tools/components/ResourceCard.java index c04419bac..102797f62 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/ResourceCard.java +++ b/src/main/java/com/rapidminer/gui/tools/components/ResourceCard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/ToggleDropDownButton.java b/src/main/java/com/rapidminer/gui/tools/components/ToggleDropDownButton.java index 796961ecc..a2d82875e 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/ToggleDropDownButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/ToggleDropDownButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/ToolTipWindow.java b/src/main/java/com/rapidminer/gui/tools/components/ToolTipWindow.java index d1cd44378..853c7a509 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/ToolTipWindow.java +++ b/src/main/java/com/rapidminer/gui/tools/components/ToolTipWindow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/TransparentGlassPanePanel.java b/src/main/java/com/rapidminer/gui/tools/components/TransparentGlassPanePanel.java index 90a59ed65..9ed6f5cdc 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/TransparentGlassPanePanel.java +++ b/src/main/java/com/rapidminer/gui/tools/components/TransparentGlassPanePanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeButton.java b/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeButton.java index 1535dcf92..23433199c 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -41,7 +41,7 @@ * @author Michael Knopf * @since 7.0.0 */ -class CompositeButton extends JButton { +public class CompositeButton extends JButton { private static final long serialVersionUID = 1L; @@ -52,10 +52,10 @@ class CompositeButton extends JButton { * Creates a new {@code CompositeButton} with the given label to be used at the given position. * * @param label - * the button label + * the button label * @param position - * the position in the composite element ({@link SwingConstants#LEFT}, - * {@link SwingConstants#CENTER}, or {@link SwingConstants#RIGHT}) + * the position in the composite element ({@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, or {@link SwingConstants#RIGHT}) */ public CompositeButton(String label, int position) { super(label); @@ -69,11 +69,11 @@ public CompositeButton(String label, int position) { * Creates a new {@code CompositeButton} with the given {@link Action} to be used at the given * position. * - * @param label - * the button action + * @param action + * the button action * @param position - * the position in the composite element ({@link SwingConstants#LEFT}, - * {@link SwingConstants#CENTER}, or {@link SwingConstants#RIGHT}) + * the position in the composite element ({@link SwingConstants#LEFT}, + * {@link SwingConstants#CENTER}, or {@link SwingConstants#RIGHT}) */ public CompositeButton(Action action, int position) { super(action); diff --git a/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeButtonPainter.java b/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeButtonPainter.java index 50b699a31..cc3971750 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeButtonPainter.java +++ b/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeButtonPainter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -19,16 +19,15 @@ package com.rapidminer.gui.tools.components.composite; import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.RenderingHints; +import java.awt.Shape; +import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RectangularShape; import java.awt.geom.RoundRectangle2D; - +import java.io.Serializable; import javax.swing.AbstractButton; import javax.swing.SwingConstants; -import com.rapidminer.gui.look.Colors; import com.rapidminer.gui.look.RapidLookAndFeel; import com.rapidminer.gui.look.RapidLookTools; @@ -39,7 +38,7 @@ * @author Michael Knopf * @since 7.0.0 */ -class CompositeButtonPainter { +public class CompositeButtonPainter implements Serializable { /** The (composite) button */ private final AbstractButton button; @@ -81,7 +80,7 @@ public CompositeButtonPainter(AbstractButton button, int position) { * @param g * the graphics context */ - void paintComponent(Graphics g) { + public void paintComponent(Graphics g) { RectangularShape rectangle; int radius = RapidLookAndFeel.CORNER_DEFAULT_RADIUS; switch (position) { @@ -103,27 +102,29 @@ void paintComponent(Graphics g) { /** * Draws the component border. * - * @param graphics + * @param g * the graphics context */ - void paintBorder(Graphics graphics) { - Graphics2D g = (Graphics2D) graphics.create(); - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - - g.setColor(Colors.BUTTON_BORDER); - + public void paintBorder(Graphics g) { + Shape borderShape; int radius = RapidLookAndFeel.CORNER_DEFAULT_RADIUS; switch (position) { case SwingConstants.LEFT: - g.drawRoundRect(0, 0, button.getWidth() + radius, button.getHeight() - 1, radius, radius); + borderShape = new RoundRectangle2D.Double(0, 0, button.getWidth() + radius, button.getHeight() - 1, radius, radius); + RapidLookTools.drawButtonBorder(button, g, borderShape); break; case SwingConstants.CENTER: - g.drawRect(0, 0, button.getWidth() + radius, button.getHeight() - 1); + borderShape = new Rectangle2D.Double(0, 0, button.getWidth() + radius, button.getHeight() - 1); + RapidLookTools.drawButtonBorder(button, g, borderShape); break; default: - g.drawRoundRect(-radius, 0, button.getWidth() + radius - 1, button.getHeight() - 1, radius, radius); - g.drawLine(0, 0, 0, button.getHeight()); + borderShape = new RoundRectangle2D.Double(-radius, 0, button.getWidth() + radius - 1, button.getHeight() - 1, radius, radius); + RapidLookTools.drawButtonBorder(button, g, borderShape); + // special case, right button has a left border + borderShape = new Line2D.Double(0, 0, 0, button.getHeight()); + RapidLookTools.drawButtonBorder(button, g, borderShape); break; } + } } diff --git a/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeMenuToggleButton.java b/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeMenuToggleButton.java index e9b0cef5b..02f7dc779 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeMenuToggleButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeMenuToggleButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -19,10 +19,7 @@ package com.rapidminer.gui.tools.components.composite; import java.awt.Font; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.util.Enumeration; - import javax.swing.AbstractButton; import javax.swing.Action; import javax.swing.ButtonGroup; @@ -57,6 +54,8 @@ class CompositeMenuToggleButton extends CompositeToggleButton { private static final String DOWN_ARROW_ADDER = "%s" + Ionicon.ARROW_DOWN_B.getHtml() + ""; + private static final int POPUP_CLOSE_DELTA = 250; + protected int arrowSize; protected String text; @@ -72,8 +71,8 @@ class CompositeMenuToggleButton extends CompositeToggleButton { * Creates a new {@code CompositeMenuToggleButton} with the given {@link Action} to be used at * the given position. * - * @param action - * the button action + * @param actions + * the button actions * @param position * the position in the composite element ({@link SwingConstants#LEFT}, * {@link SwingConstants#CENTER}, or {@link SwingConstants#RIGHT}) @@ -98,19 +97,15 @@ public void popupMenuCanceled(final PopupMenuEvent e) {} }); // display pop up menu below drop down button (if possible) - addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - setSelected(isPopupMenuItemSelected()); - // hack to prevent filter popup from opening itself again - // when you click the button to actually close it while it - // is open - if (System.currentTimeMillis() - lastPopupCloseTime < 250) { - return; - } - popupMenu.show(CompositeMenuToggleButton.this, 0, getHeight() - 1); + addActionListener(e -> { + setSelected(isPopupMenuItemSelected()); + // hack to prevent filter popup from opening itself again + // when you click the button to actually close it while it + // is open + if (System.currentTimeMillis() - lastPopupCloseTime < POPUP_CLOSE_DELTA) { + return; } + popupMenu.show(CompositeMenuToggleButton.this, 0, getHeight() - 1); }); } @@ -124,13 +119,7 @@ public void addActions(Action... actions) { for (Action action : actions) { JRadioButtonMenuItem item = new JRadioButtonMenuItem(action); - item.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - updateSelectionStatus(); - } - }); + item.addActionListener(e -> updateSelectionStatus()); popupMenuGroup.add(item); popupMenu.add(item); } diff --git a/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeToggleButton.java b/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeToggleButton.java index 669c2e4c7..690ff7746 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeToggleButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/composite/CompositeToggleButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/composite/PerspectiveMenuToggleButton.java b/src/main/java/com/rapidminer/gui/tools/components/composite/PerspectiveMenuToggleButton.java index b6a94d3cc..13a338ae7 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/composite/PerspectiveMenuToggleButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/composite/PerspectiveMenuToggleButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -21,11 +21,8 @@ import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; - import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JButton; @@ -36,9 +33,9 @@ import com.rapidminer.gui.Perspective; import com.rapidminer.gui.PerspectiveController; -import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.actions.NewPerspectiveAction; import com.rapidminer.gui.actions.WorkspaceAction; +import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.gui.tools.dialogs.ConfirmDialog; import com.rapidminer.tools.I18N; @@ -93,27 +90,32 @@ public void addActions(Action... actions) { item.setText(item.getText() + BLANKS); item.setLayout(new BorderLayout()); + // the first call to this method is triggered by the super() call in the constructor, thus the perspective controller is null + // this is the case for non-user defined perspectives which are neither "design" nor "result". Don't want the remove button for those + boolean userDefined = false; + if (applicationPerspectiveController != null) { + Perspective perspective = applicationPerspectiveController.getModel().getPerspective(String.valueOf(action.getValue(ResourceAction.NAME))); + userDefined = perspective != null && perspective.isUserDefined(); + } + final JButton removePerspectiveButton = new JButton(REMOVE_PERSPECTIVE_ICON); removePerspectiveButton.setMargin(new Insets(0, 0, 0, 0)); removePerspectiveButton.setBorderPainted(false); removePerspectiveButton.setOpaque(false); removePerspectiveButton.setContentAreaFilled(false); removePerspectiveButton.setVisible(false); - removePerspectiveButton.addActionListener(new ActionListener() { + removePerspectiveButton.addActionListener(e -> { + if (action instanceof WorkspaceAction) { - @Override - public void actionPerformed(ActionEvent e) { - if (action instanceof WorkspaceAction) { - popupMenu.setVisible(false); - removePerspectiveButton.setIcon(REMOVE_PERSPECTIVE_ICON); - removePerspectiveButton.setVisible(false); - if (SwingTools.showConfirmDialog("delete_perspective", ConfirmDialog.YES_NO_OPTION, - ((WorkspaceAction) action).getPerspective().getName()) == ConfirmDialog.YES_OPTION) { - applicationPerspectiveController.removePerspective(((WorkspaceAction) action).getPerspective()); - } + String perspectiveName = ((WorkspaceAction) action).getPerspectiveName(); + popupMenu.setVisible(false); + removePerspectiveButton.setIcon(REMOVE_PERSPECTIVE_ICON); + removePerspectiveButton.setVisible(false); + if (SwingTools.showConfirmDialog("delete_perspective", ConfirmDialog.YES_NO_OPTION, perspectiveName) == ConfirmDialog.YES_OPTION) { + applicationPerspectiveController.removePerspective(perspectiveName); } - } + }); removePerspectiveButton.addMouseListener(new MouseAdapter() { @@ -130,15 +132,15 @@ public void mouseEntered(MouseEvent e) { item.dispatchEvent(SwingUtilities.convertMouseEvent(e.getComponent(), e, item)); } }); - item.add(removePerspectiveButton, BorderLayout.EAST); - item.addActionListener(new ActionListener() { + // only add the remove button for user-defined perspectives + if (userDefined) { + item.add(removePerspectiveButton, BorderLayout.EAST); + } - @Override - public void actionPerformed(ActionEvent e) { - removePerspectiveButton.setVisible(false); - updateSelectionStatus(); - } + item.addActionListener(e -> { + removePerspectiveButton.setVisible(false); + updateSelectionStatus(); }); item.addMouseListener(new MouseAdapter() { @@ -159,13 +161,14 @@ public void mouseEntered(MouseEvent e) { popupMenuGroup.add(item); popupMenu.add(item); } + } /** * Adds the new perspective action to the menu. */ private void addNewPerspectiveAction() { - Action newPerspectiveAction = new NewPerspectiveAction(RapidMinerGUI.getMainFrame()); + Action newPerspectiveAction = new NewPerspectiveAction(); newPerspectiveAction.putValue(Action.LARGE_ICON_KEY, null); newPerspectiveAction.putValue(Action.SMALL_ICON, null); @@ -174,5 +177,6 @@ private void addNewPerspectiveAction() { popupMenu.addSeparator(); popupMenu.add(item); + popupMenu.addSeparator(); } } diff --git a/src/main/java/com/rapidminer/gui/tools/components/composite/PerspectiveToggleGroup.java b/src/main/java/com/rapidminer/gui/tools/components/composite/PerspectiveToggleGroup.java index db075c83e..fb1198c6e 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/composite/PerspectiveToggleGroup.java +++ b/src/main/java/com/rapidminer/gui/tools/components/composite/PerspectiveToggleGroup.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -19,25 +19,32 @@ package com.rapidminer.gui.tools.components.composite; import java.awt.Dimension; - import javax.swing.Action; import javax.swing.JToggleButton; import javax.swing.SwingConstants; import com.rapidminer.gui.Perspective; import com.rapidminer.gui.PerspectiveController; +import com.rapidminer.tools.I18N; /** * Group of {@link JToggleButton}s with a behavior similar to a radio button group. Used to manage * the application {@link Perspective}s. * - * @author Marcel Michel + * @author Marcel Michel, Jan Czogalla * @since 7.0.0 */ public class PerspectiveToggleGroup extends ToggleButtonGroup { private static final long serialVersionUID = 1L; + private static final Action[] EMPTY_ACTIONS = new Action[0]; + private static final Action[] TWO_NULL_ACTIONS = new Action[2]; + + private static final String SECONDARY_BUTTON_LABEL = I18N.getGUILabel("workspace_more"); + + private static Dimension preferredMoreSize; + private static Dimension minimizedMoreSize; private final PerspectiveController perspectiveController; @@ -46,11 +53,11 @@ public class PerspectiveToggleGroup extends ToggleButtonGroup { * actions). * * @param perspectiveController - * the perspective controller which should be used + * the perspective controller which should be used * @param preferredSize - * the preferredSize of the nested {@link CompositeToggleButton}s or {@code null} + * the preferredSize of the nested {@link CompositeToggleButton}s or {@code null} * @param actions - * the action + * the action */ public PerspectiveToggleGroup(PerspectiveController perspectiveController, Dimension preferredSize, Action... actions) { super(preferredSize, actions); @@ -61,4 +68,79 @@ public PerspectiveToggleGroup(PerspectiveController perspectiveController, Dimen protected CompositeMenuToggleButton createCompositeMenuToggleButton(Action... actions) { return new PerspectiveMenuToggleButton(perspectiveController, SwingConstants.RIGHT, actions); } + + /** + * Minimizes the "More" button to only show the icon. Is used to make the perspectives panel smaller. Will do + * nothing if no secondary button was created yet or the button is already minimized. + * + * @since 8.1 + */ + public void minimizeSecondaryButton() { + if (secondaryButton == null || secondaryButton.getText().isEmpty()) { + return; + } + secondaryButton.setText(""); + secondaryButton.setPreferredSize(getMinimizedSecondaryButtonSize()); + } + + /** + * Restores the "More" button to show also text. Is used in resizing the perspectives panel. Will do nothing if no + * secondary button was created yet or the button is already maximized. + * + * @since 8.1 + */ + public void maximizeSecondaryButton() { + if (secondaryButton == null || !secondaryButton.getText().isEmpty()) { + return; + } + secondaryButton.setText(SECONDARY_BUTTON_LABEL); + secondaryButton.setPreferredSize(getDefaultSecondaryButtonSize()); + } + + /** + * Initializes both {@link #preferredMoreSize} and {@link #minimizedMoreSize}. Should be called before first usages + * of {@link #getDefaultSecondaryButtonSize()} and {@link #getMinimizedSecondaryButtonSize()}. Will not change anything + * if called again. + * + * @since 8.1 + */ + public static void init(){ + if (preferredMoreSize == null) { + PerspectiveToggleGroup group = new PerspectiveToggleGroup(null, new Dimension(), TWO_NULL_ACTIONS); + group.addSeconderyActions(EMPTY_ACTIONS); + preferredMoreSize = new Dimension(group.secondaryButton.getPreferredSize()); + } + if (minimizedMoreSize == null){ + PerspectiveToggleGroup group = new PerspectiveToggleGroup(null, new Dimension(), TWO_NULL_ACTIONS); + group.addSeconderyActions(EMPTY_ACTIONS); + CompositeMenuToggleButton secondaryButton = group.secondaryButton; + secondaryButton.setPreferredSize(null); + secondaryButton.setText(""); + minimizedMoreSize = secondaryButton.getPreferredSize(); + minimizedMoreSize.width += 10; + minimizedMoreSize.height = preferredMoreSize.height; + } + } + + /** + * Returns the default {@link Dimension} for the secondary button (including label text). Should be initialized + * with {@link #init()} before first use. + * + * @return the default secondary button size + * @since 8.1 + */ + public static Dimension getDefaultSecondaryButtonSize() { + return preferredMoreSize; + } + + /** + * Returns the minimized {@link Dimension} for the secondary button (empty label text). Should be initialized + * with {@link #init()} before first use. + * + * @return the minimized secondary button size + * @since 8.1 + */ + public static Dimension getMinimizedSecondaryButtonSize() { + return minimizedMoreSize; + } } diff --git a/src/main/java/com/rapidminer/gui/tools/components/composite/SplitButton.java b/src/main/java/com/rapidminer/gui/tools/components/composite/SplitButton.java index 51aa6984a..7274cafaa 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/composite/SplitButton.java +++ b/src/main/java/com/rapidminer/gui/tools/components/composite/SplitButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/components/composite/ToggleButtonGroup.java b/src/main/java/com/rapidminer/gui/tools/components/composite/ToggleButtonGroup.java index 28ec8bc18..2e7d8c145 100644 --- a/src/main/java/com/rapidminer/gui/tools/components/composite/ToggleButtonGroup.java +++ b/src/main/java/com/rapidminer/gui/tools/components/composite/ToggleButtonGroup.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/AboutBox.java b/src/main/java/com/rapidminer/gui/tools/dialogs/AboutBox.java index 20003ce0d..ece6b5504 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/AboutBox.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/AboutBox.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/ButtonDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/ButtonDialog.java index e706163cc..3b3335291 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/ButtonDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/ButtonDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/ConfirmDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/ConfirmDialog.java index 53ca57eb9..b15a87a6e 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/ConfirmDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/ConfirmDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/DataImportDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/DataImportDialog.java index 559f12606..52a0f755a 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/DataImportDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/DataImportDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/DecisionRememberingConfirmDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/DecisionRememberingConfirmDialog.java index bb19750e6..2861ba3ed 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/DecisionRememberingConfirmDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/DecisionRememberingConfirmDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/ErrorDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/ErrorDialog.java index e4b97a5ba..60d5fb0e2 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/ErrorDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/ErrorDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/ExtendedErrorDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/ExtendedErrorDialog.java index 838c10c1e..ead88d888 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/ExtendedErrorDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/ExtendedErrorDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/InputDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/InputDialog.java index 0fa46bd05..f8dcdbaf9 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/InputDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/InputDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/InputValidator.java b/src/main/java/com/rapidminer/gui/tools/dialogs/InputValidator.java index 5bfb192ff..5c41571f1 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/InputValidator.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/InputValidator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/LongMessageDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/LongMessageDialog.java index a2e1a333f..0d0e079ab 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/LongMessageDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/LongMessageDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/MessageDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/MessageDialog.java index b96a0683d..6ff41c39c 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/MessageDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/MessageDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/MultiConfirmDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/MultiConfirmDialog.java index b7ba77fa5..c4d42b7fb 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/MultiConfirmDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/MultiConfirmDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/MultiPageDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/MultiPageDialog.java index fe84c00d2..df77faf72 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/MultiPageDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/MultiPageDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/RepositoryEntryInputDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/RepositoryEntryInputDialog.java index 3ca9e6143..77f40aea2 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/RepositoryEntryInputDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/RepositoryEntryInputDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/ResultViewDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/ResultViewDialog.java index 48f88661a..3f7f1a248 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/ResultViewDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/ResultViewDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/SelectionDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/SelectionDialog.java index d19a51e91..b1f5879c5 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/SelectionDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/SelectionDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/SelectionInputDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/SelectionInputDialog.java index b3c6872ac..42640f8c6 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/SelectionInputDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/SelectionInputDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/SetParameterDialog.java b/src/main/java/com/rapidminer/gui/tools/dialogs/SetParameterDialog.java index 3e4774081..aa895faf0 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/SetParameterDialog.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/SetParameterDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/AbstractWizard.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/AbstractWizard.java index f42d0bb05..62f78267a 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/AbstractWizard.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/AbstractWizard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/WizardStep.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/WizardStep.java index da2ad4e89..cc839ca22 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/WizardStep.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/WizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/AttributeSelectionWizardStep.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/AttributeSelectionWizardStep.java index 71c0d973a..bb971b57e 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/AttributeSelectionWizardStep.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/AttributeSelectionWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataEditor.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataEditor.java index f63b88a0b..b04a8e12c 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataEditor.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizard.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizard.java index e485cc1c1..6534b70ed 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizard.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizardFactory.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizardFactory.java index ece286d43..0e79e0b43 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizardFactory.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizardFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizardRegistry.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizardRegistry.java index b7d13a9f9..1cf8a2557 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizardRegistry.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/DataImportWizardRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/FileSelectionWizardStep.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/FileSelectionWizardStep.java index 080e1ee55..03b9e74b4 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/FileSelectionWizardStep.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/FileSelectionWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/MetaDataDeclarationEditor.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/MetaDataDeclarationEditor.java index d0b657ee2..2c28ba965 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/MetaDataDeclarationEditor.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/MetaDataDeclarationEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/MetaDataDeclerationWizardStep.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/MetaDataDeclerationWizardStep.java index 9cacdf141..a00390d4a 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/MetaDataDeclerationWizardStep.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/MetaDataDeclerationWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/RepositoryLocationSelectionWizardStep.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/RepositoryLocationSelectionWizardStep.java index 7710348bc..f009605cc 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/RepositoryLocationSelectionWizardStep.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/RepositoryLocationSelectionWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/WizardCreationException.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/WizardCreationException.java index f98ab2bf6..fd1a073c3 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/WizardCreationException.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/WizardCreationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/CSVFileReader.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/CSVFileReader.java index 3fd72b316..0113d0f9a 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/CSVFileReader.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/CSVFileReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/DataEvaluator.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/DataEvaluator.java index 0a1ebead4..541e6576c 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/DataEvaluator.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/DataEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/LineReader.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/LineReader.java index 1076dbca3..695d78b14 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/LineReader.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/csv/LineReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/excel/AnnotationCellEditor.java b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/excel/AnnotationCellEditor.java index 740f2c37a..b6db8466d 100644 --- a/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/excel/AnnotationCellEditor.java +++ b/src/main/java/com/rapidminer/gui/tools/dialogs/wizards/dataimport/excel/AnnotationCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ioobjectcache/IOObjectCacheEntryPanel.java b/src/main/java/com/rapidminer/gui/tools/ioobjectcache/IOObjectCacheEntryPanel.java index e600b021d..a50aeebc1 100644 --- a/src/main/java/com/rapidminer/gui/tools/ioobjectcache/IOObjectCacheEntryPanel.java +++ b/src/main/java/com/rapidminer/gui/tools/ioobjectcache/IOObjectCacheEntryPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ioobjectcache/IOObjectCacheViewer.java b/src/main/java/com/rapidminer/gui/tools/ioobjectcache/IOObjectCacheViewer.java index d8bed1a89..f7296f7a6 100644 --- a/src/main/java/com/rapidminer/gui/tools/ioobjectcache/IOObjectCacheViewer.java +++ b/src/main/java/com/rapidminer/gui/tools/ioobjectcache/IOObjectCacheViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/ClearCacheAction.java b/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/ClearCacheAction.java index fcc9e444d..031a2c0be 100644 --- a/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/ClearCacheAction.java +++ b/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/ClearCacheAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/OpenCacheEntryAction.java b/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/OpenCacheEntryAction.java index 96b4febc8..7a296a58e 100644 --- a/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/OpenCacheEntryAction.java +++ b/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/OpenCacheEntryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/RemoveCacheEntryAction.java b/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/RemoveCacheEntryAction.java index d2d60b15c..1a1f86bd4 100644 --- a/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/RemoveCacheEntryAction.java +++ b/src/main/java/com/rapidminer/gui/tools/ioobjectcache/actions/RemoveCacheEntryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/AbstractLogModel.java b/src/main/java/com/rapidminer/gui/tools/logging/AbstractLogModel.java index 4fc9c027f..1f8ce9660 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/AbstractLogModel.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/AbstractLogModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/AbstractPullLogModel.java b/src/main/java/com/rapidminer/gui/tools/logging/AbstractPullLogModel.java index fcf285d42..a937e8d7a 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/AbstractPullLogModel.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/AbstractPullLogModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/AbstractPushLogModel.java b/src/main/java/com/rapidminer/gui/tools/logging/AbstractPushLogModel.java index a933b7f72..3717e5fc9 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/AbstractPushLogModel.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/AbstractPushLogModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/LogEntry.java b/src/main/java/com/rapidminer/gui/tools/logging/LogEntry.java index c75b78d9e..7cc640e64 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/LogEntry.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/LogEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/LogHandlerModel.java b/src/main/java/com/rapidminer/gui/tools/logging/LogHandlerModel.java index 85e47e27d..6577505c2 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/LogHandlerModel.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/LogHandlerModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/LogModel.java b/src/main/java/com/rapidminer/gui/tools/logging/LogModel.java index 8d1edebbe..7f67d8b08 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/LogModel.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/LogModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/LogModelRegistry.java b/src/main/java/com/rapidminer/gui/tools/logging/LogModelRegistry.java index 59cfb359e..ac359c818 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/LogModelRegistry.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/LogModelRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/LogRecordEntry.java b/src/main/java/com/rapidminer/gui/tools/logging/LogRecordEntry.java index 76c55f37d..62ce20a71 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/LogRecordEntry.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/LogRecordEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/LogSelectionModel.java b/src/main/java/com/rapidminer/gui/tools/logging/LogSelectionModel.java index 28cdfb4da..5832e1656 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/LogSelectionModel.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/LogSelectionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/LogUpdateException.java b/src/main/java/com/rapidminer/gui/tools/logging/LogUpdateException.java index 58245684f..f0a22a4b3 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/LogUpdateException.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/LogUpdateException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/LogViewer.java b/src/main/java/com/rapidminer/gui/tools/logging/LogViewer.java index 9436fe2c3..9a81b0516 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/LogViewer.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/LogViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/SimpleLogEntry.java b/src/main/java/com/rapidminer/gui/tools/logging/SimpleLogEntry.java index edba2df1b..c483d2466 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/SimpleLogEntry.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/SimpleLogEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/actions/ClearMessageAction.java b/src/main/java/com/rapidminer/gui/tools/logging/actions/ClearMessageAction.java index 82613b514..d03e5a51c 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/actions/ClearMessageAction.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/actions/ClearMessageAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/actions/LogCloseAction.java b/src/main/java/com/rapidminer/gui/tools/logging/actions/LogCloseAction.java index 3e2b89e21..6a0f9d7f4 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/actions/LogCloseAction.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/actions/LogCloseAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/actions/LogRefreshAction.java b/src/main/java/com/rapidminer/gui/tools/logging/actions/LogRefreshAction.java index 551f07835..2eb537d12 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/actions/LogRefreshAction.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/actions/LogRefreshAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/actions/LogSearchAction.java b/src/main/java/com/rapidminer/gui/tools/logging/actions/LogSearchAction.java index ccb2201a1..119c0c6b9 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/actions/LogSearchAction.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/actions/LogSearchAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/logging/actions/SaveLogFileAction.java b/src/main/java/com/rapidminer/gui/tools/logging/actions/SaveLogFileAction.java index fe511d3be..a56890b0b 100644 --- a/src/main/java/com/rapidminer/gui/tools/logging/actions/SaveLogFileAction.java +++ b/src/main/java/com/rapidminer/gui/tools/logging/actions/SaveLogFileAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/BatchFileTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/BatchFileTokenMarker.java index eefd6b49e..2be4163f3 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/BatchFileTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/BatchFileTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/CCTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/CCTokenMarker.java index e65bf0583..8738edc63 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/CCTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/CCTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/CTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/CTokenMarker.java index ca517660a..840b4393e 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/CTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/CTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/DefaultInputHandler.java b/src/main/java/com/rapidminer/gui/tools/syntax/DefaultInputHandler.java index 15796e52d..81b032a3b 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/DefaultInputHandler.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/DefaultInputHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/ExpressionTokenMaker.java b/src/main/java/com/rapidminer/gui/tools/syntax/ExpressionTokenMaker.java index 99dce73ad..369d74f25 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/ExpressionTokenMaker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/ExpressionTokenMaker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/HTMLTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/HTMLTokenMarker.java index ccd8fc211..a57f64c0e 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/HTMLTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/HTMLTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/InputHandler.java b/src/main/java/com/rapidminer/gui/tools/syntax/InputHandler.java index 8b4e5bdba..fb6e0c945 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/InputHandler.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/InputHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/JEditTextArea.java b/src/main/java/com/rapidminer/gui/tools/syntax/JEditTextArea.java index 0992882a6..f9ae9fe9d 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/JEditTextArea.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/JEditTextArea.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/JavaScriptTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/JavaScriptTokenMarker.java index 10028836d..5a530c5de 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/JavaScriptTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/JavaScriptTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/JavaTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/JavaTokenMarker.java index 3bf29ab1c..8bbc03107 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/JavaTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/JavaTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/KeywordMap.java b/src/main/java/com/rapidminer/gui/tools/syntax/KeywordMap.java index 282d39b66..683d69de7 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/KeywordMap.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/KeywordMap.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/MakefileTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/MakefileTokenMarker.java index 0ef0c07da..73d3ba990 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/MakefileTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/MakefileTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/PHPTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/PHPTokenMarker.java index 5f9bbc62c..76a9283d5 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/PHPTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/PHPTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/PatchTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/PatchTokenMarker.java index fec97e9f1..31c0bd707 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/PatchTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/PatchTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/PerlTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/PerlTokenMarker.java index 956da0a2f..fee4a0a03 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/PerlTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/PerlTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/PropsTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/PropsTokenMarker.java index 73da06d4d..9df2954c5 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/PropsTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/PropsTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/PythonTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/PythonTokenMarker.java index 71f171219..fcd2403ab 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/PythonTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/PythonTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/SQLTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/SQLTokenMarker.java index fce7305df..c361ccddd 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/SQLTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/SQLTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/ShellScriptTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/ShellScriptTokenMarker.java index ee5354c1e..82d8a81d4 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/ShellScriptTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/ShellScriptTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxDocument.java b/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxDocument.java index dd9ab9f89..101e21e01 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxDocument.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxDocument.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxStyle.java b/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxStyle.java index 12b6c8f05..c96a5e904 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxStyle.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxStyle.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxUtilities.java b/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxUtilities.java index fbcc29db2..c45ae362f 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxUtilities.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/SyntaxUtilities.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/TSQLTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/TSQLTokenMarker.java index 3425278c3..17c4016ce 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/TSQLTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/TSQLTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/TeXTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/TeXTokenMarker.java index 29bcce85e..25172e7d7 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/TeXTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/TeXTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/TextAreaDefaults.java b/src/main/java/com/rapidminer/gui/tools/syntax/TextAreaDefaults.java index b94fcdb27..a96c75a99 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/TextAreaDefaults.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/TextAreaDefaults.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/TextAreaPainter.java b/src/main/java/com/rapidminer/gui/tools/syntax/TextAreaPainter.java index 62ab7021f..f6826997e 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/TextAreaPainter.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/TextAreaPainter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/TextUtilities.java b/src/main/java/com/rapidminer/gui/tools/syntax/TextUtilities.java index 7698419a8..a54106ae6 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/TextUtilities.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/TextUtilities.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/Token.java b/src/main/java/com/rapidminer/gui/tools/syntax/Token.java index d0e5521f7..786c00f55 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/Token.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/Token.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/TokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/TokenMarker.java index f52eba091..4a4071b78 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/TokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/TokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/syntax/XMLTokenMarker.java b/src/main/java/com/rapidminer/gui/tools/syntax/XMLTokenMarker.java index 58c1d0385..b8a8d8375 100644 --- a/src/main/java/com/rapidminer/gui/tools/syntax/XMLTokenMarker.java +++ b/src/main/java/com/rapidminer/gui/tools/syntax/XMLTokenMarker.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/table/EditableHeaderJTable.java b/src/main/java/com/rapidminer/gui/tools/table/EditableHeaderJTable.java index a78921be9..c6a520a57 100644 --- a/src/main/java/com/rapidminer/gui/tools/table/EditableHeaderJTable.java +++ b/src/main/java/com/rapidminer/gui/tools/table/EditableHeaderJTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeader.java b/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeader.java index 4a167d98a..de70bf275 100644 --- a/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeader.java +++ b/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeaderColumn.java b/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeaderColumn.java index cf3feb9b6..66c1d1027 100644 --- a/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeaderColumn.java +++ b/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeaderColumn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeaderUI.java b/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeaderUI.java index a30007d20..b01140342 100644 --- a/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeaderUI.java +++ b/src/main/java/com/rapidminer/gui/tools/table/EditableTableHeaderUI.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewer.java b/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewer.java index dd2344526..a8a44b229 100644 --- a/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewerTable.java b/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewerTable.java index 23553a33a..00c499a36 100644 --- a/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewerTable.java +++ b/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewerTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewerTableModel.java b/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewerTableModel.java index dee13e164..bd7523493 100644 --- a/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewerTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/ANOVAMatrixViewerTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/AnovaCalculatorViewer.java b/src/main/java/com/rapidminer/gui/viewer/AnovaCalculatorViewer.java index af0935594..8d6277d2d 100644 --- a/src/main/java/com/rapidminer/gui/viewer/AnovaCalculatorViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/AnovaCalculatorViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/AssociationRuleFilter.java b/src/main/java/com/rapidminer/gui/viewer/AssociationRuleFilter.java index bbaa73cc8..b08b08497 100644 --- a/src/main/java/com/rapidminer/gui/viewer/AssociationRuleFilter.java +++ b/src/main/java/com/rapidminer/gui/viewer/AssociationRuleFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/AssociationRuleFilterListener.java b/src/main/java/com/rapidminer/gui/viewer/AssociationRuleFilterListener.java index 201aebad6..532ef0e95 100644 --- a/src/main/java/com/rapidminer/gui/viewer/AssociationRuleFilterListener.java +++ b/src/main/java/com/rapidminer/gui/viewer/AssociationRuleFilterListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/AssociationRuleTableModel.java b/src/main/java/com/rapidminer/gui/viewer/AssociationRuleTableModel.java index f39026470..743d631f0 100644 --- a/src/main/java/com/rapidminer/gui/viewer/AssociationRuleTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/AssociationRuleTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/AssociationRuleTableViewer.java b/src/main/java/com/rapidminer/gui/viewer/AssociationRuleTableViewer.java index c4b06c07e..6a6b0fe4a 100644 --- a/src/main/java/com/rapidminer/gui/viewer/AssociationRuleTableViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/AssociationRuleTableViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/AverageVectorViewer.java b/src/main/java/com/rapidminer/gui/viewer/AverageVectorViewer.java index 17d153f09..27e3cd2ea 100644 --- a/src/main/java/com/rapidminer/gui/viewer/AverageVectorViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/AverageVectorViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/ClusterTreeVisualization.java b/src/main/java/com/rapidminer/gui/viewer/ClusterTreeVisualization.java index 85ff097c9..8508a11f3 100644 --- a/src/main/java/com/rapidminer/gui/viewer/ClusterTreeVisualization.java +++ b/src/main/java/com/rapidminer/gui/viewer/ClusterTreeVisualization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewer.java b/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewer.java index ce4dbf0e4..84cbfcb0b 100644 --- a/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewerTable.java b/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewerTable.java index 28fdf7433..0d04ed592 100644 --- a/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewerTable.java +++ b/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewerTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewerTableModel.java b/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewerTableModel.java index 3759e3a08..f5f39d4cc 100644 --- a/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewerTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/ConfusionMatrixViewerTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/DataTableColumnEditTable.java b/src/main/java/com/rapidminer/gui/viewer/DataTableColumnEditTable.java index 7933bdc15..59fd28dcb 100644 --- a/src/main/java/com/rapidminer/gui/viewer/DataTableColumnEditTable.java +++ b/src/main/java/com/rapidminer/gui/viewer/DataTableColumnEditTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/DataTableColumnEditTableModel.java b/src/main/java/com/rapidminer/gui/viewer/DataTableColumnEditTableModel.java index 96b97f71b..cefc23236 100644 --- a/src/main/java/com/rapidminer/gui/viewer/DataTableColumnEditTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/DataTableColumnEditTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/DataTableViewer.java b/src/main/java/com/rapidminer/gui/viewer/DataTableViewer.java index ad12ba65f..26599b752 100644 --- a/src/main/java/com/rapidminer/gui/viewer/DataTableViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/DataTableViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/DataTableViewerTable.java b/src/main/java/com/rapidminer/gui/viewer/DataTableViewerTable.java index acf065582..ddd44ee99 100644 --- a/src/main/java/com/rapidminer/gui/viewer/DataTableViewerTable.java +++ b/src/main/java/com/rapidminer/gui/viewer/DataTableViewerTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/DataTableViewerTableModel.java b/src/main/java/com/rapidminer/gui/viewer/DataTableViewerTableModel.java index 1f1bb0b3f..ef829c408 100644 --- a/src/main/java/com/rapidminer/gui/viewer/DataTableViewerTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/DataTableViewerTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/DataViewer.java b/src/main/java/com/rapidminer/gui/viewer/DataViewer.java index e429065f0..c4ac6ce52 100644 --- a/src/main/java/com/rapidminer/gui/viewer/DataViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/DataViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/DataViewerTable.java b/src/main/java/com/rapidminer/gui/viewer/DataViewerTable.java index c778d2e9d..972c1375b 100644 --- a/src/main/java/com/rapidminer/gui/viewer/DataViewerTable.java +++ b/src/main/java/com/rapidminer/gui/viewer/DataViewerTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/DataViewerTableModel.java b/src/main/java/com/rapidminer/gui/viewer/DataViewerTableModel.java index a0e438605..9f3408569 100644 --- a/src/main/java/com/rapidminer/gui/viewer/DataViewerTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/DataViewerTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/DendrogramPlotter.java b/src/main/java/com/rapidminer/gui/viewer/DendrogramPlotter.java index 2dfa1d2ca..50be0c75b 100644 --- a/src/main/java/com/rapidminer/gui/viewer/DendrogramPlotter.java +++ b/src/main/java/com/rapidminer/gui/viewer/DendrogramPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/FrequentItemSetVisualization.java b/src/main/java/com/rapidminer/gui/viewer/FrequentItemSetVisualization.java index e0aa6b9c3..a0dc6d568 100644 --- a/src/main/java/com/rapidminer/gui/viewer/FrequentItemSetVisualization.java +++ b/src/main/java/com/rapidminer/gui/viewer/FrequentItemSetVisualization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/FrequentItemSetsTableModel.java b/src/main/java/com/rapidminer/gui/viewer/FrequentItemSetsTableModel.java index 8e556799f..dbdd69d77 100644 --- a/src/main/java/com/rapidminer/gui/viewer/FrequentItemSetsTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/FrequentItemSetsTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/MetaDataViewer.java b/src/main/java/com/rapidminer/gui/viewer/MetaDataViewer.java index 2a2cd7a4b..9d5984578 100644 --- a/src/main/java/com/rapidminer/gui/viewer/MetaDataViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/MetaDataViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/MetaDataViewerTable.java b/src/main/java/com/rapidminer/gui/viewer/MetaDataViewerTable.java index 91f993d60..6f1b445ed 100644 --- a/src/main/java/com/rapidminer/gui/viewer/MetaDataViewerTable.java +++ b/src/main/java/com/rapidminer/gui/viewer/MetaDataViewerTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/MetaDataViewerTableModel.java b/src/main/java/com/rapidminer/gui/viewer/MetaDataViewerTableModel.java index 79119f7bc..b0dd4d578 100644 --- a/src/main/java/com/rapidminer/gui/viewer/MetaDataViewerTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/MetaDataViewerTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/NumericalMatrixViewerTableModel.java b/src/main/java/com/rapidminer/gui/viewer/NumericalMatrixViewerTableModel.java index 5d74438d9..50c82c97b 100644 --- a/src/main/java/com/rapidminer/gui/viewer/NumericalMatrixViewerTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/NumericalMatrixViewerTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/PerformanceVectorViewer.java b/src/main/java/com/rapidminer/gui/viewer/PerformanceVectorViewer.java index ee854e2eb..c4e016e8e 100644 --- a/src/main/java/com/rapidminer/gui/viewer/PerformanceVectorViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/PerformanceVectorViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/ROCChartPlotter.java b/src/main/java/com/rapidminer/gui/viewer/ROCChartPlotter.java index c2d925533..1144d9b2f 100644 --- a/src/main/java/com/rapidminer/gui/viewer/ROCChartPlotter.java +++ b/src/main/java/com/rapidminer/gui/viewer/ROCChartPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/ROCViewer.java b/src/main/java/com/rapidminer/gui/viewer/ROCViewer.java index cb095fa67..cdd795c73 100644 --- a/src/main/java/com/rapidminer/gui/viewer/ROCViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/ROCViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/RuleSetTableModel.java b/src/main/java/com/rapidminer/gui/viewer/RuleSetTableModel.java index 880255bdd..d7c4c5587 100644 --- a/src/main/java/com/rapidminer/gui/viewer/RuleSetTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/RuleSetTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/SimilarityKDistanceVisualization.java b/src/main/java/com/rapidminer/gui/viewer/SimilarityKDistanceVisualization.java index 4c29a2021..0fe3ce276 100644 --- a/src/main/java/com/rapidminer/gui/viewer/SimilarityKDistanceVisualization.java +++ b/src/main/java/com/rapidminer/gui/viewer/SimilarityKDistanceVisualization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/SimilarityTable.java b/src/main/java/com/rapidminer/gui/viewer/SimilarityTable.java index 9363d4a2b..95c68b9fa 100644 --- a/src/main/java/com/rapidminer/gui/viewer/SimilarityTable.java +++ b/src/main/java/com/rapidminer/gui/viewer/SimilarityTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/SimilarityTableModel.java b/src/main/java/com/rapidminer/gui/viewer/SimilarityTableModel.java index 7e4e4c04b..6bc59b6d9 100644 --- a/src/main/java/com/rapidminer/gui/viewer/SimilarityTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/SimilarityTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/SimilarityVisualization.java b/src/main/java/com/rapidminer/gui/viewer/SimilarityVisualization.java index 10fe301f6..a5ccf5e96 100644 --- a/src/main/java/com/rapidminer/gui/viewer/SimilarityVisualization.java +++ b/src/main/java/com/rapidminer/gui/viewer/SimilarityVisualization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeCellRenderer.java b/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeCellRenderer.java index 0b0813664..f9d069c96 100644 --- a/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeCellRenderer.java +++ b/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeElement.java b/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeElement.java index 8956b267e..c5a69fd00 100644 --- a/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeElement.java +++ b/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeElement.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeModel.java b/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeModel.java index 2914c7333..bfb47ec46 100644 --- a/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/collection/CollectionTreeModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/collection/CollectionViewer.java b/src/main/java/com/rapidminer/gui/viewer/collection/CollectionViewer.java index 68513722e..520165926 100644 --- a/src/main/java/com/rapidminer/gui/viewer/collection/CollectionViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/collection/CollectionViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/AttributeStatisticsPanel.java b/src/main/java/com/rapidminer/gui/viewer/metadata/AttributeStatisticsPanel.java index 7f9094933..f994f794c 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/AttributeStatisticsPanel.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/AttributeStatisticsPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/MetaDataStatisticsController.java b/src/main/java/com/rapidminer/gui/viewer/metadata/MetaDataStatisticsController.java index 133d5e66e..155534744 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/MetaDataStatisticsController.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/MetaDataStatisticsController.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/MetaDataStatisticsViewer.java b/src/main/java/com/rapidminer/gui/viewer/metadata/MetaDataStatisticsViewer.java index 2744a2aec..a3042af5e 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/MetaDataStatisticsViewer.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/MetaDataStatisticsViewer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/AttributePopupMenu.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/AttributePopupMenu.java index 21e2b4f5e..87af4f7b1 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/AttributePopupMenu.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/AttributePopupMenu.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyAllMetaDataToClipboardAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyAllMetaDataToClipboardAction.java index 97e0abcb3..474cad546 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyAllMetaDataToClipboardAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyAllMetaDataToClipboardAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyAttributeNameAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyAttributeNameAction.java index 1f7c8057c..9430a7d63 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyAttributeNameAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyAttributeNameAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyDateTimeFromValueAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyDateTimeFromValueAction.java index 3943bd2fb..b7f6af3be 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyDateTimeFromValueAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyDateTimeFromValueAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyDateTimeUntilValueAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyDateTimeUntilValueAction.java index 3c61116cb..3043fc774 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyDateTimeUntilValueAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyDateTimeUntilValueAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumAvgValueAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumAvgValueAction.java index f75bdc05f..46f45e161 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumAvgValueAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumAvgValueAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumDeviationValueAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumDeviationValueAction.java index 9d71f97fc..c7830e1b1 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumDeviationValueAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumDeviationValueAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumMaximumValueAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumMaximumValueAction.java index 9ebf31ce2..c9e51347a 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumMaximumValueAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumMaximumValueAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumMinimumValueAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumMinimumValueAction.java index 61ca97336..06bcb96a1 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumMinimumValueAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/CopyNumMinimumValueAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/OpenChartAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/OpenChartAction.java index 401862fb4..c24697fb5 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/OpenChartAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/OpenChartAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/ShowConstructionValueAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/ShowConstructionValueAction.java index 73e723131..dce883383 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/ShowConstructionValueAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/ShowConstructionValueAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/ShowNomValueAction.java b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/ShowNomValueAction.java index 9e29fcc5f..e963f257f 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/actions/ShowNomValueAction.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/actions/ShowNomValueAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/dialogs/NominalValueDialog.java b/src/main/java/com/rapidminer/gui/viewer/metadata/dialogs/NominalValueDialog.java index a97507b18..247c2cd2d 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/dialogs/NominalValueDialog.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/dialogs/NominalValueDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/event/AttributeStatisticsEvent.java b/src/main/java/com/rapidminer/gui/viewer/metadata/event/AttributeStatisticsEvent.java index 22336759d..3dc5330a1 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/event/AttributeStatisticsEvent.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/event/AttributeStatisticsEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/event/AttributeStatisticsEventListener.java b/src/main/java/com/rapidminer/gui/viewer/metadata/event/AttributeStatisticsEventListener.java index 9f13f87fc..1c581a9f2 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/event/AttributeStatisticsEventListener.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/event/AttributeStatisticsEventListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/event/MetaDataStatisticsEvent.java b/src/main/java/com/rapidminer/gui/viewer/metadata/event/MetaDataStatisticsEvent.java index d6115697e..270b9a2b6 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/event/MetaDataStatisticsEvent.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/event/MetaDataStatisticsEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/event/MetaDataStatisticsEventListener.java b/src/main/java/com/rapidminer/gui/viewer/metadata/event/MetaDataStatisticsEventListener.java index 5324fc46a..f9d1bac06 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/event/MetaDataStatisticsEventListener.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/event/MetaDataStatisticsEventListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/model/AbstractAttributeStatisticsModel.java b/src/main/java/com/rapidminer/gui/viewer/metadata/model/AbstractAttributeStatisticsModel.java index ce717dae3..f3ff477a2 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/model/AbstractAttributeStatisticsModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/model/AbstractAttributeStatisticsModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/model/DateTimeAttributeStatisticsModel.java b/src/main/java/com/rapidminer/gui/viewer/metadata/model/DateTimeAttributeStatisticsModel.java index ae70805ef..4d6ae2c54 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/model/DateTimeAttributeStatisticsModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/model/DateTimeAttributeStatisticsModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/model/MetaDataStatisticsModel.java b/src/main/java/com/rapidminer/gui/viewer/metadata/model/MetaDataStatisticsModel.java index 690f27810..a4d3cfb1f 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/model/MetaDataStatisticsModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/model/MetaDataStatisticsModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/model/NominalAttributeStatisticsModel.java b/src/main/java/com/rapidminer/gui/viewer/metadata/model/NominalAttributeStatisticsModel.java index 9c0a78b51..509643fc6 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/model/NominalAttributeStatisticsModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/model/NominalAttributeStatisticsModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/model/NominalValueTableModel.java b/src/main/java/com/rapidminer/gui/viewer/metadata/model/NominalValueTableModel.java index cd8de2414..79725f5b0 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/model/NominalValueTableModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/model/NominalValueTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/viewer/metadata/model/NumericalAttributeStatisticsModel.java b/src/main/java/com/rapidminer/gui/viewer/metadata/model/NumericalAttributeStatisticsModel.java index 1a72fa71f..26773b852 100644 --- a/src/main/java/com/rapidminer/gui/viewer/metadata/model/NumericalAttributeStatisticsModel.java +++ b/src/main/java/com/rapidminer/gui/viewer/metadata/model/NumericalAttributeStatisticsModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/AbstractConfigurationWizard.java b/src/main/java/com/rapidminer/gui/wizards/AbstractConfigurationWizard.java index bbbcf9a18..5d1e799fd 100644 --- a/src/main/java/com/rapidminer/gui/wizards/AbstractConfigurationWizard.java +++ b/src/main/java/com/rapidminer/gui/wizards/AbstractConfigurationWizard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/AbstractConfigurationWizardCreator.java b/src/main/java/com/rapidminer/gui/wizards/AbstractConfigurationWizardCreator.java index e88997c8e..d140fb115 100644 --- a/src/main/java/com/rapidminer/gui/wizards/AbstractConfigurationWizardCreator.java +++ b/src/main/java/com/rapidminer/gui/wizards/AbstractConfigurationWizardCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/ConfigurationListener.java b/src/main/java/com/rapidminer/gui/wizards/ConfigurationListener.java index 25d7bf291..100e4d62b 100644 --- a/src/main/java/com/rapidminer/gui/wizards/ConfigurationListener.java +++ b/src/main/java/com/rapidminer/gui/wizards/ConfigurationListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/ConfigurationWizardCreator.java b/src/main/java/com/rapidminer/gui/wizards/ConfigurationWizardCreator.java index 010ac5684..76e47417d 100644 --- a/src/main/java/com/rapidminer/gui/wizards/ConfigurationWizardCreator.java +++ b/src/main/java/com/rapidminer/gui/wizards/ConfigurationWizardCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizard.java b/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizard.java index 59e736232..9b710194c 100644 --- a/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizard.java +++ b/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardAttributeTypeTable.java b/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardAttributeTypeTable.java index 66eae26b1..acd2f5211 100644 --- a/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardAttributeTypeTable.java +++ b/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardAttributeTypeTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardCreator.java b/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardCreator.java index 812a01fd8..00f69957e 100644 --- a/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardCreator.java +++ b/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardDataTable.java b/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardDataTable.java index 9bdf2457b..2fe313715 100644 --- a/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardDataTable.java +++ b/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardDataTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardValueTypeTable.java b/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardValueTypeTable.java index 9bff8be70..dddcdda78 100644 --- a/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardValueTypeTable.java +++ b/src/main/java/com/rapidminer/gui/wizards/ExampleSourceConfigurationWizardValueTypeTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/PreviewCreator.java b/src/main/java/com/rapidminer/gui/wizards/PreviewCreator.java index 726630294..0f089918a 100644 --- a/src/main/java/com/rapidminer/gui/wizards/PreviewCreator.java +++ b/src/main/java/com/rapidminer/gui/wizards/PreviewCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/gui/wizards/PreviewListener.java b/src/main/java/com/rapidminer/gui/wizards/PreviewListener.java index 0f374ce02..1783af91c 100644 --- a/src/main/java/com/rapidminer/gui/wizards/PreviewListener.java +++ b/src/main/java/com/rapidminer/gui/wizards/PreviewListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/Base64.java b/src/main/java/com/rapidminer/io/Base64.java index 29c3503a7..bd663e387 100644 --- a/src/main/java/com/rapidminer/io/Base64.java +++ b/src/main/java/com/rapidminer/io/Base64.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/AnnotationProcessXMLFilter.java b/src/main/java/com/rapidminer/io/process/AnnotationProcessXMLFilter.java index ffd4ffd06..9965853df 100644 --- a/src/main/java/com/rapidminer/io/process/AnnotationProcessXMLFilter.java +++ b/src/main/java/com/rapidminer/io/process/AnnotationProcessXMLFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/AutoModelProcessXMLFilter.java b/src/main/java/com/rapidminer/io/process/AutoModelProcessXMLFilter.java new file mode 100644 index 000000000..636c7e640 --- /dev/null +++ b/src/main/java/com/rapidminer/io/process/AutoModelProcessXMLFilter.java @@ -0,0 +1,107 @@ +/** + * Copyright (C) 2001-2017 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.io.process; + +import org.w3c.dom.Element; + +import com.rapidminer.operator.ExecutionUnit; +import com.rapidminer.operator.Operator; +import com.rapidminer.operator.UserData; + + +/** + * {@link ProcessXMLFilter} to handle AutoModel generated operators end exported processes in UsageStat. + * + * @author Peter Toth + * @since 8.1 + */ +public class AutoModelProcessXMLFilter implements ProcessXMLFilter { + + /** + * AutoModelState is a special {@link UserData} to indicate that an operator is generated by the AutoModel wizard. + * The UserData is used to differentiate the generated operators from the user selected ones in UsageStat. + * It has 2 states, the GENERATED is used immediately after operator generation in the wizard to tell which + * operators are run by the wizard itself. The EXPORTED state is attached to operators which are exported as part of + * a process from the AutoModel wizard. + */ + public enum AutoModelState implements UserData { + + GENERATED, EXPORTED; + + @Override + public UserData copyUserData(Object newParent) { + return this; + } + + } + + private static final String KEY_AUTOMODEL = "automodel"; + + private static final String XML_ATTRIBUTE_AUTOMODEL = "automodel"; + + @Override + public void operatorExported(final Operator op, final Element opElement) { + AutoModelState autoModelState = getAutoModelState(op); + if (autoModelState != null) { + opElement.setAttribute(XML_ATTRIBUTE_AUTOMODEL, autoModelState.name()); + } + } + + @Override + public void executionUnitExported(final ExecutionUnit process, final Element element) {} + + @Override + public void operatorImported(final Operator op, final Element opElement) { + String attributeValue = opElement.getAttribute(XML_ATTRIBUTE_AUTOMODEL); + if (attributeValue != null) { + try { + AutoModelState autoModelState = AutoModelState.valueOf(attributeValue); + op.setUserData(KEY_AUTOMODEL, autoModelState); + } catch (IllegalArgumentException e) {} + } + } + + @Override + public void executionUnitImported(final ExecutionUnit process, final Element element) {} + + /** + * Returns an AutoModelState if an operator is generated by or exported from the AutoModel wizard or null if it + * isn't. + * + * @param operator + * @return + */ + public static AutoModelState getAutoModelState(Operator operator) { + return (AutoModelState) operator.getUserData(KEY_AUTOMODEL); + } + + /** + * Marks an operator as generated by or exported from the AutoModel wizard. Doesn't do anything if the + * autoModelState is null. + * + * @param operator + * @param autoModelState + */ + public static void setAutoModelState(Operator operator, AutoModelState autoModelState) { + if (autoModelState != null) { + operator.setUserData(KEY_AUTOMODEL, autoModelState); + } + } + +} diff --git a/src/main/java/com/rapidminer/io/process/BackgroundImageProcessXMLFilter.java b/src/main/java/com/rapidminer/io/process/BackgroundImageProcessXMLFilter.java index 53b3a6869..c78ef1d96 100644 --- a/src/main/java/com/rapidminer/io/process/BackgroundImageProcessXMLFilter.java +++ b/src/main/java/com/rapidminer/io/process/BackgroundImageProcessXMLFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/GUIProcessXMLFilter.java b/src/main/java/com/rapidminer/io/process/GUIProcessXMLFilter.java index c36918759..6054c953b 100644 --- a/src/main/java/com/rapidminer/io/process/GUIProcessXMLFilter.java +++ b/src/main/java/com/rapidminer/io/process/GUIProcessXMLFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/ProcessLayoutXMLFilter.java b/src/main/java/com/rapidminer/io/process/ProcessLayoutXMLFilter.java index 0cdfa8b99..28a4ccf63 100644 --- a/src/main/java/com/rapidminer/io/process/ProcessLayoutXMLFilter.java +++ b/src/main/java/com/rapidminer/io/process/ProcessLayoutXMLFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/ProcessXMLFilter.java b/src/main/java/com/rapidminer/io/process/ProcessXMLFilter.java index ce138d8d1..bf02ae467 100644 --- a/src/main/java/com/rapidminer/io/process/ProcessXMLFilter.java +++ b/src/main/java/com/rapidminer/io/process/ProcessXMLFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/ProcessXMLFilterRegistry.java b/src/main/java/com/rapidminer/io/process/ProcessXMLFilterRegistry.java index 0e646353b..051114265 100644 --- a/src/main/java/com/rapidminer/io/process/ProcessXMLFilterRegistry.java +++ b/src/main/java/com/rapidminer/io/process/ProcessXMLFilterRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/XMLErrorHandler.java b/src/main/java/com/rapidminer/io/process/XMLErrorHandler.java index 6a42f663c..9a5095a83 100644 --- a/src/main/java/com/rapidminer/io/process/XMLErrorHandler.java +++ b/src/main/java/com/rapidminer/io/process/XMLErrorHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/XMLExporter.java b/src/main/java/com/rapidminer/io/process/XMLExporter.java index 26e93e5a3..23d267b83 100644 --- a/src/main/java/com/rapidminer/io/process/XMLExporter.java +++ b/src/main/java/com/rapidminer/io/process/XMLExporter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/XMLImporter.java b/src/main/java/com/rapidminer/io/process/XMLImporter.java index 70451587d..cc1fc33ba 100644 --- a/src/main/java/com/rapidminer/io/process/XMLImporter.java +++ b/src/main/java/com/rapidminer/io/process/XMLImporter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -31,8 +31,6 @@ import java.util.Set; import java.util.logging.Level; -import javax.xml.parsers.DocumentBuilderFactory; - import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -146,7 +144,7 @@ public static void importParseRules(URL rulesResource, Plugin prover) { LogService.getRoot().log(Level.CONFIG, "com.rapidminer.io.process.XMLImporter.reading_parse_rules", rulesResource); try { - Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(rulesResource.openStream()); + Document doc = XMLTools.createDocumentBuilder().parse(rulesResource.openStream()); if (!doc.getDocumentElement().getTagName().equals("parserules")) { LogService.getRoot().log(Level.SEVERE, "com.rapidminer.io.process.XMLImporter.xml_document_start_error", rulesResource); diff --git a/src/main/java/com/rapidminer/io/process/XMLTools.java b/src/main/java/com/rapidminer/io/process/XMLTools.java index 4b4a55eaf..73c5c093a 100644 --- a/src/main/java/com/rapidminer/io/process/XMLTools.java +++ b/src/main/java/com/rapidminer/io/process/XMLTools.java @@ -1,734 +1,780 @@ -/** - * Copyright (C) 2001-2017 by RapidMiner and the contributors - * - * Complete list of developers available at our web site: - * - * http://rapidminer.com - * - * This program is free software: you can redistribute it and/or modify it under the terms of the - * GNU Affero General Public License as published by the Free Software Foundation, either version 3 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without - * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this program. - * If not, see http://www.gnu.org/licenses/. -*/ -package com.rapidminer.io.process; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.logging.Level; - -import javax.xml.XMLConstants; -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.TransformerFactoryConfigurationError; -import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Validator; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -import com.rapidminer.tools.LogService; -import com.rapidminer.tools.XMLException; - - -/** - * This class offers several convenience methods for treating XML documents- - * - * @author Sebastian Land, Simon Fischer - */ -public class XMLTools { - - private static final Map VALIDATORS = new HashMap(); - - private final static DocumentBuilderFactory BUILDER_FACTORY; - - public static final String SCHEMA_URL_PROCESS = "http://www.rapidminer.com/xml/schema/RapidMinerProcess"; - - static { - DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); - domFactory.setNamespaceAware(true); - BUILDER_FACTORY = domFactory; - } - - /** - * Creates a new {@link DocumentBuilder} instance. - * - * Needed because DocumentBuilder is not thread-safe and crashes when different threads try to - * parse at the same time. - * - * @return - * @throws IOException - * if it fails to create a {@link DocumentBuilder} - */ - private static DocumentBuilder createDocumentBuilder() throws IOException { - try { - synchronized (BUILDER_FACTORY) { - return BUILDER_FACTORY.newDocumentBuilder(); - } - } catch (ParserConfigurationException e) { - LogService.getRoot().log(Level.WARNING, "Unable to create document builder", e); - throw new IOException(e); - } - } - - private static Validator getValidator(URI schemaURI) throws XMLException { - if (schemaURI == null) { - throw new NullPointerException("SchemaURL is null!"); - } - synchronized (VALIDATORS) { - if (VALIDATORS.containsKey(schemaURI)) { - return VALIDATORS.get(schemaURI); - } else { - SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Validator validator; - try { - validator = factory.newSchema(schemaURI.toURL()).newValidator(); - } catch (SAXException e) { - throw new XMLException("Cannot parse XML schema: " + e.getMessage(), e); - } catch (MalformedURLException e) { - throw new XMLException("Cannot parse XML schema: " + e.getMessage(), e); - } - VALIDATORS.put(schemaURI, validator); - return validator; - } - } - } - - /** - * This method should not be called since it is slower than - * {@link #parseAndValidate(InputStream, URI, String)} - */ - public static Document parseAndValidate(InputStream in, URL schemaURL, String sourceName) throws XMLException, - IOException { - try { - return parseAndValidate(in, new URI(schemaURL.toString()), sourceName); - } catch (URISyntaxException e) { - throw new XMLException("Could not resolve URL.", e); - } - } - - /** - * The schema URL might be given as URI for performance reasons. - */ - public static Document parseAndValidate(InputStream in, URI schemaURL, String sourceName) throws XMLException, - IOException { - XMLErrorHandler errorHandler = new XMLErrorHandler(sourceName); - - Document doc; - try { - doc = createDocumentBuilder().parse(in); - } catch (SAXException e) { - throw new XMLException(errorHandler.toString(), e); - } - - Source source = new DOMSource(doc); - DOMResult result = new DOMResult(); - Validator validator = getValidator(schemaURL); - validator.setErrorHandler(errorHandler); - try { - validator.validate(source, result); - } catch (SAXException e) { - throw new XMLException(errorHandler.toString(), e); - } - if (errorHandler.hasErrors()) { - throw new XMLException(errorHandler.toString()); - } - return (Document) result.getNode(); - } - - public static Document parse(String string) throws SAXException, IOException { - return createDocumentBuilder().parse(new ByteArrayInputStream(string.getBytes(Charset.forName("UTF-8")))); - // new ReaderInputStream(new StringReader(string))); - } - - public static Document parse(InputStream in) throws SAXException, IOException { - return createDocumentBuilder().parse(in); - } - - public static Document parse(File file) throws SAXException, IOException { - return createDocumentBuilder().parse(file); - } - - public static String toString(Document document) throws XMLException { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - Charset utf8 = Charset.forName("UTF-8"); - stream(document, buf, utf8); - return new String(buf.toByteArray(), utf8); - } - - /** - * @param document - * @param encoding - * @return - * @throws XMLException - * @deprecated use {@link #toString(Document)} instead - */ - @Deprecated - public static String toString(Document document, Charset encoding) throws XMLException { - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - stream(document, buf, encoding); - return new String(buf.toByteArray(), encoding); - } - - public static void stream(Document document, File file, Charset encoding) throws XMLException { - - OutputStream out = null; - try { - out = new FileOutputStream(file); - stream(document, out, encoding); - } catch (IOException e) { - throw new XMLException("Cannot save XML to " + file + ": " + e, e); - } finally { - if (out != null) { - try { - out.close(); - } catch (IOException e) { - } - } - } - } - - public static void stream(Document document, OutputStream out, Charset encoding) throws XMLException { - stream(new DOMSource(document), out, encoding); - } - - public static void stream(DOMSource source, OutputStream out, Charset encoding) throws XMLException { - // we wrap this in a Writer to fix a Java bug - // see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6296446 - if (encoding == null) { - encoding = Charset.forName("UTF-8"); - } - stream(source, new StreamResult(new OutputStreamWriter(out, encoding)), encoding); - } - - public static void stream(Document document, Result result, Charset encoding) throws XMLException { - stream(new DOMSource(document), result, encoding); - } - - public static void stream(DOMSource source, Result result, Charset encoding) throws XMLException { - stream(source, result, encoding, null); - } - - public static void stream(DOMSource source, Result result, Charset encoding, Properties outputProperties) - throws XMLException { - Transformer transformer; - try { - TransformerFactory tf = TransformerFactory.newInstance(); - try { - tf.setAttribute("indent-number", Integer.valueOf(2)); - } catch (IllegalArgumentException e) { - // ignore, may not be supported by implementation - } - transformer = tf.newTransformer(); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - try { - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); - } catch (IllegalArgumentException e) { - // ignore, may not be supported by implementation - } - if (outputProperties != null) { - transformer.setOutputProperties(outputProperties); - } - - if (encoding != null) { - transformer.setOutputProperty(OutputKeys.ENCODING, encoding.name()); - } - } catch (TransformerConfigurationException e) { - throw new XMLException("Cannot transform XML: " + e, e); - } catch (TransformerFactoryConfigurationError e) { - throw new XMLException("Cannot transform XML: " + e, e); - } - try { - transformer.transform(source, result); - } catch (TransformerException e) { - throw new XMLException("Cannot transform XML: " + e, e); - } - } - - /** - * As {@link #getTagContents(Element, String, boolean)}, but never throws an exception. Returns - * null if can't retrieve string. - */ - public static String getTagContents(Element element, String tag) { - try { - return getTagContents(element, tag, false); - } catch (XMLException e) { - // cannot happen - return null; - } - } - - public static String getTagContents(Element element, String tag, String deflt) { - String result = getTagContents(element, tag); - if (result == null) { - return deflt; - } else { - return result; - } - } - - /** - * For a tag content else ... - * - * returns "content". This will return the content of the first occurring child element with - * name tagName. If no such tag exists and {@link XMLException} is thrown if - * throwExceptionOnError is true. Otherwise null is returned. - */ - public static String getTagContents(Element parent, String tagName, boolean throwExceptionOnError) throws XMLException { - NodeList nodeList = parent.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node node = nodeList.item(i); - if (node instanceof Element && ((Element) node).getTagName().equals(tagName)) { - Element child = (Element) node; - return child.getTextContent(); - } - } - if (throwExceptionOnError) { - throw new XMLException("Missing tag: <" + tagName + "> in <" + parent.getTagName() + ">."); - } else { - return null; - } - } - - /** - * This will parse the text contents of an child element of element parent with the given - * tagName as integer. If no such child element can be found an XMLException is thrown. If more - * than one exists, the first is used. A {@link XMLException} is thrown if the text content is - * not a valid integer. - */ - public static int getTagContentsAsInt(Element element, String tag) throws XMLException { - final String string = getTagContents(element, tag, true); - try { - return Integer.parseInt(string); - } catch (NumberFormatException e) { - throw new XMLException("Contents of tag <" + tag + "> must be integer, but found '" + string + "'."); - } - } - - /** - * This will parse the text contents of an child element of element parent with the given - * tagName as integer. If no such child element can be found, the given default value is - * returned. If more than one exists, the first is used. A {@link XMLException} is thrown if the - * text content is not a valid integer. - */ - public static int getTagContentsAsInt(Element element, String tag, int dfltValue) throws XMLException { - final String string = getTagContents(element, tag, false); - if (string == null) { - return dfltValue; - } - try { - return Integer.parseInt(string); - } catch (NumberFormatException e) { - throw new XMLException("Contents of tag <" + tag + "> must be integer, but found '" + string + "'."); - } - } - - /** - * This will parse the text contents of an child element of element parent with the given - * tagName as long. If no such child element can be found an XMLException is thrown. If more - * than one exists, the first is used. A {@link XMLException} is thrown if the text content is - * not a valid long. - */ - public static long getTagContentsAsLong(Element element, String tag) throws XMLException { - final String string = getTagContents(element, tag, true); - try { - return Long.parseLong(string); - } catch (NumberFormatException e) { - throw new XMLException("Contents of tag <" + tag + "> must be integer, but found '" + string + "'."); - } - } - - /** - * This will parse the text contents of an child element of element parent with the given - * tagName as long. If no such child element can be found, the given default value is returned. - * If more than one exists, the first is used. A {@link XMLException} is thrown if the text - * content is not a valid long. - */ - public static long getTagContentsAsLong(Element element, String tag, int dfltValue) throws XMLException { - final String string = getTagContents(element, tag, false); - if (string == null) { - return dfltValue; - } - try { - return Long.parseLong(string); - } catch (NumberFormatException e) { - throw new XMLException("Contents of tag <" + tag + "> must be integer, but found '" + string + "'."); - } - } - - /** - * This will parse the text contents of an child element of element parent with the given - * tagName as double. If no such child element can be found, the given default value is - * returned. If more than one exists, the first is used. A {@link XMLException} is thrown if the - * text content is not a valid integer. - */ - public static double getTagContentsAsDouble(Element element, String tag, double dfltValue) throws XMLException { - final String string = getTagContents(element, tag, false); - if (string == null) { - return dfltValue; - } - try { - return Double.parseDouble(string); - } catch (NumberFormatException e) { - throw new XMLException("Contents of tag <" + tag + "> must be double, but found '" + string + "'."); - } - } - - /** - * This will parse the text contents of an child element of element parent with the given - * tagName as boolean. If no such child element can be found the default is returned. If more - * than one exists, the first is used. A {@link NumberFormatException} is thrown if the text - * content is not a valid integer. - */ - public static boolean getTagContentsAsBoolean(Element parent, String tagName, boolean dflt) throws XMLException { - String string = getTagContents(parent, tagName, false); - if (string == null) { - return dflt; - } - try { - return Boolean.parseBoolean(string); - } catch (NumberFormatException e) { - throw new XMLException("Contents of tag <" + tagName + "> must be true or false, but found '" + string + "'."); - } - } - - /** - * If parent has a direct child with the given name, the child's children are removed and are - * replaced by a single text node with the given text. If no direct child of parent with the - * given tag name exists, a new one is created. - */ - public static void setTagContents(Element parent, String tagName, String value) { - if (value == null) { - value = ""; - } - Element child = null; - NodeList list = parent.getChildNodes(); - for (int i = 0; i < list.getLength(); i++) { - Node node = list.item(i); - if (node instanceof Element) { - if (((Element) node).getTagName().equals(tagName)) { - child = (Element) node; - break; - } - } - } - if (child == null) { - child = parent.getOwnerDocument().createElement(tagName); - parent.appendChild(child); - } else { - while (child.hasChildNodes()) { - child.removeChild(child.getFirstChild()); - } - } - child.appendChild(parent.getOwnerDocument().createTextNode(value)); - } - - /** - * This method removes all child elements with the given name of the given element. - */ - public static void deleteTagContents(Element parentElement, String name) { - NodeList children = parentElement.getElementsByTagName(name); - for (int i = children.getLength() - 1; i >= 0; i--) { - Element child = (Element) children.item(i); - parentElement.removeChild(child); - } - } - - public static XMLGregorianCalendar getXMLGregorianCalendar(Date date) { - if (date == null) { - return null; - } - // Calendar calendar = Calendar.getInstance(); - // calendar.setTimeInMillis(date.getTime()); - DatatypeFactory datatypeFactory; - try { - datatypeFactory = DatatypeFactory.newInstance(); - } catch (DatatypeConfigurationException e) { - throw new RuntimeException("Failed to create XMLGregorianCalendar: " + e, e); - } - GregorianCalendar c = new GregorianCalendar(); - c.setTime(date); - return datatypeFactory.newXMLGregorianCalendar(c); - // - // XMLGregorianCalendar xmlGregorianCalendar = datatypeFactory.newXMLGregorianCalendar(); - // xmlGregorianCalendar.setYear(calendar.get(Calendar.YEAR)); - // xmlGregorianCalendar.setMonth(calendar.get(Calendar.MONTH) + 1); - // xmlGregorianCalendar.setDay(calendar.get(Calendar.DAY_OF_MONTH)); - // xmlGregorianCalendar.setHour(calendar.get(Calendar.HOUR_OF_DAY)); - // xmlGregorianCalendar.setMinute(calendar.get(Calendar.MINUTE)); - // xmlGregorianCalendar.setSecond(calendar.get(Calendar.SECOND)); - // xmlGregorianCalendar.setMillisecond(calendar.get(Calendar.MILLISECOND)); - // // - // xmlGregorianCalendar.setTimezone(calendar.get(((Calendar.DST_OFFSET)+calendar.get(Calendar.ZONE_OFFSET))/(60*1000))); - // return xmlGregorianCalendar; - } - - /** - * This will return the inner tag of the given element with the given tagName. If no such - * element can be found, or if there are more than one, an {@link XMLException} is thrown. - */ - public static Element getUniqueInnerTag(Element element, String tagName) throws XMLException { - return getUniqueInnerTag(element, tagName, true); - } - - /** - * This method will return null if the element doesn't exist if obligatory is false. Otherwise - * an exception is thrown. If the element is not unique, an exception is thrown in any cases. - */ - public static Element getUniqueInnerTag(Element element, String tagName, boolean obligatory) throws XMLException { - NodeList children = element.getChildNodes(); - Collection elements = new ArrayList(); - for (int i = 0; i < children.getLength(); i++) { - if (children.item(i) instanceof Element) { - Element child = (Element) children.item(i); - if (tagName.equals(child.getTagName())) { - elements.add(child); - } - } - } - switch (elements.size()) { - case 0: - if (obligatory) { - throw new XMLException("Missing inner tag <" + tagName + "> inside <" + element.getTagName() + ">."); - } else { - return null; - } - case 1: - return elements.iterator().next(); - default: - throw new XMLException("Inner tag <" + tagName + "> inside <" + element.getTagName() - + "> must be unique, but found " + children.getLength() + "."); - } - - } - - /** - * This method will return a Collection of all Elements that are direct child elements of the - * given element and have the given tag name. - */ - public static Collection getChildElements(Element father, String tagName) { - LinkedList elements = new LinkedList(); - NodeList list = father.getChildNodes(); - for (int i = 0; i < list.getLength(); i++) { - Node node = list.item(i); - if (node instanceof Element) { - if (node.getNodeName().equals(tagName)) { - elements.add((Element) node); - } - } - } - return elements; - } - - /** - * This method will return a Collection of all Elements that are direct child elements of the - * given element. - */ - public static Collection getChildElements(Element father) { - LinkedList elements = new LinkedList(); - NodeList list = father.getChildNodes(); - for (int i = 0; i < list.getLength(); i++) { - Node node = list.item(i); - if (node instanceof Element) { - elements.add((Element) node); - } - } - return elements; - } - - /** - * This method will return the single inner child with the given name of the given father - * element. If obligatory is true, an Exception is thrown if the element is not present. If it's - * ambiguous, an execption is thrown in any case. - */ - public static Element getChildElement(Element father, String tagName, boolean mandatory) throws XMLException { - Collection children = getChildElements(father, tagName); - switch (children.size()) { - case 0: - if (mandatory) { - throw new XMLException("Missing child tag <" + tagName + "> inside <" + father.getTagName() + ">."); - } else { - return null; - } - case 1: - return children.iterator().next(); - default: - throw new XMLException("Child tag <" + tagName + "> inside <" + father.getTagName() - + "> must be unique, but found " + children.size() + "."); - } - - } - - /** - * This is the same as {@link #getChildElement(Element, String, boolean)}, but its always - * obligatory to have the child element. - * - * @throws XMLException - */ - public static Element getUniqueChildElement(Element father, String tagName) throws XMLException { - return getChildElement(father, tagName, true); - } - - /** - * This adds a single tag with the given content to the given parent element. The new tag is - * automatically appended. - */ - public static void addTag(Element parent, String name, String textValue) { - Element child = parent.getOwnerDocument().createElement(name); - child.setTextContent(textValue); - parent.appendChild(child); - } - - /** - * Creates a new, empty document. - */ - public static Document createDocument() { - try { - DocumentBuilder builder = createDocumentBuilder(); - return builder.newDocument(); - } catch (IOException e) { - return null; - } - } - - /** - * This will add an empty new tag to the given fatherElement with the given name. - */ - public static Element addTag(Element fatherElement, String tagName) { - Element createElement = fatherElement.getOwnerDocument().createElement(tagName); - fatherElement.appendChild(createElement); - return createElement; - } - - /** - * Returns the unique child of the given element with the given tag name. This child tag must be - * unique, or an exception will be raised. If optional is false and the tag is missing, this - * method also raises an exception. Otherwise it returns null. - */ - public static Element getChildTag(Element element, String xmlTagName, boolean optional) throws XMLException { - NodeList children = element.getChildNodes(); - Element found = null; - for (int i = 0; i < children.getLength(); i++) { - Node n = children.item(i); - if (n instanceof Element) { - if (((Element) n).getTagName().equals(xmlTagName)) { - if (found != null) { - throw new XMLException("Tag <" + xmlTagName + "> in <" + element.getTagName() + "> must be unique."); - } else { - found = (Element) n; - } - } - } - } - if (!optional && found == null) { - throw new XMLException("Tag <" + xmlTagName + "> in <" + element.getTagName() + "> is missing."); - } else { - return found; - } - } - - /** - * Returns the contents of the inner tags with the given name as String array. - */ - public static String[] getChildTagsContentAsStringArray(Element father, String childElementName) { - Collection valueElements = XMLTools.getChildElements(father, childElementName); - String[] values = new String[valueElements.size()]; - int i = 0; - for (Element valueElement : valueElements) { - values[i] = valueElement.getTextContent(); - i++; - } - - return values; - } - - /** - * Returns the contents of the inner tags with the given name as int array. - * - * @throws XMLException - */ - public static int[] getChildTagsContentAsIntArray(Element father, String childElementName) throws XMLException { - Collection valueElements = XMLTools.getChildElements(father, childElementName); - int[] values = new int[valueElements.size()]; - int i = 0; - for (Element valueElement : valueElements) { - try { - values[i] = Integer.valueOf(valueElement.getTextContent().trim()); - } catch (NumberFormatException e) { - throw new XMLException("Invalid format for element content of type " + childElementName, e); - } - i++; - } - - return values; - } - - /** - * This method will get a XPath expression matching all elements given. This works by following - * this algorithm: 1. Check whether the last element is of same type Yes: if paths of elements - * are of same structure, keep it, but remove counters where necessary if not, - */ - public static String getXPath(Document document, Element... elements) { - Map> elementTypeElementsMap = new HashMap>(); - for (Element element : elements) { - List typeElements = elementTypeElementsMap.get(element.getTagName()); - if (typeElements == null) { - typeElements = new LinkedList(); - elementTypeElementsMap.put(element.getTagName(), typeElements); - } - typeElements.add(element); - } - - // for each single type of element build single longest common path of all elements - - Element[] parentElements = new Element[elements.length]; - - for (int i = 0; i < elements.length; i++) { - parentElements[i] = (Element) elements[i].getParentNode(); - } - - return ""; - } -} +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.io.process; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.logging.Level; +import javax.xml.XMLConstants; +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Result; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.transform.dom.DOMResult; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Validator; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import com.rapidminer.tools.LogService; +import com.rapidminer.tools.XMLException; +import com.rapidminer.tools.XMLParserException; + + +/** + * This class offers several convenience methods for treating XML documents- + * + * @author Sebastian Land, Simon Fischer + */ +public class XMLTools { + + + /** + * Util class, no instance. + */ + private XMLTools() { + throw new UnsupportedOperationException("Not to be instantiated"); + } + + private static final Map VALIDATORS = new HashMap<>(); + + private static final DocumentBuilderFactory BUILDER_FACTORY; + + public static final String SCHEMA_URL_PROCESS = "http://www.rapidminer.com/xml/schema/RapidMinerProcess"; + + private static final String FEATURE_FAILED_LOG_MSG = "ParserConfigurationException was thrown. The feature '{0}' is probably not supported by your XML processor."; + private static final String CONTENTS_OF_TAG_0_MUST_BE_1_BUT_FOUND_2_LOG_MSG = "Contents of tag <{0}> must be {1}, but found '{2}'."; + private static final String INTEGER_STRING = "integer"; + + + /** + * Security guideline from OWASP https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Java + */ + static { + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + documentBuilderFactory.setNamespaceAware(true); + String feature = null; + try { + // This is the PRIMARY defense. If DTDs (doctypes) are disallowed, almost all XML entity attacks are prevented + // Xerces 2 only - http://xerces.apache.org/xerces2-j/features.html#disallow-doctype-decl + feature = "http://apache.org/xml/features/disallow-doctype-decl"; + documentBuilderFactory.setFeature(feature, true); + } catch (ParserConfigurationException e) { + // This should catch a failed setFeature feature + LogService.getRoot().log(Level.INFO, MessageFormat.format(FEATURE_FAILED_LOG_MSG, feature)); + } + try { + // If you can't completely disable DTDs, then at least do the following: + // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-general-entities + // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-general-entities + // JDK7+ - http://xml.org/sax/features/external-general-entities + feature = "http://xml.org/sax/features/external-general-entities"; + documentBuilderFactory.setFeature(feature, false); + } catch (ParserConfigurationException e) { + // This should catch a failed setFeature feature + LogService.getRoot().log(Level.INFO, MessageFormat.format(FEATURE_FAILED_LOG_MSG, feature)); + } + try { + // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-parameter-entities + // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-parameter-entities + // JDK7+ - http://xml.org/sax/features/external-parameter-entities + feature = "http://xml.org/sax/features/external-parameter-entities"; + documentBuilderFactory.setFeature(feature, false); + } catch (ParserConfigurationException e) { + // This should catch a failed setFeature feature + LogService.getRoot().log(Level.INFO, MessageFormat.format(FEATURE_FAILED_LOG_MSG, feature)); + } + try { + // Disable external DTDs as well + feature = "http://apache.org/xml/features/nonvalidating/load-external-dtd"; + documentBuilderFactory.setFeature(feature, false); + } catch (ParserConfigurationException e) { + // This should catch a failed setFeature feature + LogService.getRoot().log(Level.INFO, MessageFormat.format(FEATURE_FAILED_LOG_MSG, feature)); + } + // and these as well, per Timothy Morgan's 2014 paper: "XML Schema, DTD, and Entity Attacks" + documentBuilderFactory.setXIncludeAware(false); + documentBuilderFactory.setExpandEntityReferences(false); + + // And, per Timothy Morgan: "If for some reason support for inline DOCTYPEs are a requirement, then + // ensure the entity settings are disabled (as shown above) and beware that SSRF attacks + // (http://cwe.mitre.org/data/definitions/918.html) and denial + // of service attacks (such as billion laughs or decompression bombs via "jar:") are a risk." + + BUILDER_FACTORY = documentBuilderFactory; + } + + /** + * Creates a new {@link DocumentBuilder} instance that is secured against XXE attacks. + * + * Needed because DocumentBuilder is not thread-safe and crashes when different threads try to + * parse at the same time. + * + * @return + * @throws IOException + * if it fails to create a {@link DocumentBuilder} + */ + public static DocumentBuilder createDocumentBuilder() throws XMLParserException { + try { + synchronized (BUILDER_FACTORY) { + return BUILDER_FACTORY.newDocumentBuilder(); + } + } catch (ParserConfigurationException e) { + LogService.getRoot().log(Level.WARNING, "Unable to create document builder", e); + throw new XMLParserException(e); + } + } + + private static Validator getValidator(URI schemaURI) throws XMLException { + if (schemaURI == null) { + throw new NullPointerException("SchemaURL is null!"); + } + synchronized (VALIDATORS) { + if (VALIDATORS.containsKey(schemaURI)) { + return VALIDATORS.get(schemaURI); + } else { + SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + Validator validator; + try { + validator = factory.newSchema(schemaURI.toURL()).newValidator(); + } catch (SAXException | MalformedURLException e) { + throw new XMLException("Cannot parse XML schema: " + e.getMessage(), e); + } + VALIDATORS.put(schemaURI, validator); + return validator; + } + } + } + + /** + * This method should not be called since it is slower than + * {@link #parseAndValidate(InputStream, URI, String)} + */ + public static Document parseAndValidate(InputStream in, URL schemaURL, String sourceName) throws XMLException, + IOException { + try { + return parseAndValidate(in, new URI(schemaURL.toString()), sourceName); + } catch (URISyntaxException e) { + throw new XMLException("Could not resolve URL.", e); + } + } + + /** + * The schema URL might be given as URI for performance reasons. + */ + public static Document parseAndValidate(InputStream in, URI schemaURL, String sourceName) throws XMLException, + IOException { + XMLErrorHandler errorHandler = new XMLErrorHandler(sourceName); + + Document doc; + try { + doc = createDocumentBuilder().parse(in); + } catch (SAXException e) { + throw new XMLException(errorHandler.toString(), e); + } + + Source source = new DOMSource(doc); + DOMResult result = new DOMResult(); + Validator validator = getValidator(schemaURL); + validator.setErrorHandler(errorHandler); + try { + validator.validate(source, result); + } catch (SAXException e) { + throw new XMLException(errorHandler.toString(), e); + } + if (errorHandler.hasErrors()) { + throw new XMLException(errorHandler.toString()); + } + return (Document) result.getNode(); + } + + public static Document parse(String string) throws SAXException, IOException { + return createDocumentBuilder().parse(new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8))); + } + + public static Document parse(InputStream in) throws SAXException, IOException { + return createDocumentBuilder().parse(in); + } + + public static Document parse(File file) throws SAXException, IOException { + return createDocumentBuilder().parse(file); + } + + public static String toString(Document document) throws XMLException { + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + stream(document, buf, StandardCharsets.UTF_8); + return new String(buf.toByteArray(), StandardCharsets.UTF_8); + } + + /** + * @param document + * @param encoding + * @return + * @throws XMLException + * @deprecated use {@link #toString(Document)} instead + */ + @Deprecated + public static String toString(Document document, Charset encoding) throws XMLException { + ByteArrayOutputStream buf = new ByteArrayOutputStream(); + stream(document, buf, encoding); + return new String(buf.toByteArray(), encoding); + } + + public static void stream(Document document, File file, Charset encoding) throws XMLException { + try(OutputStream out = new FileOutputStream(file)) { + stream(document, out, encoding); + } catch (IOException e) { + throw new XMLException("Cannot save XML to " + file + ": " + e, e); + } + } + + public static void stream(Document document, OutputStream out, Charset encoding) throws XMLException { + stream(new DOMSource(document), out, encoding); + } + + public static void stream(DOMSource source, OutputStream out, Charset encoding) throws XMLException { + // we wrap this in a Writer to fix a Java bug + // see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6296446 + if (encoding == null) { + encoding = StandardCharsets.UTF_8; + } + stream(source, new StreamResult(new OutputStreamWriter(out, encoding)), encoding); + } + + public static void stream(Document document, Result result, Charset encoding) throws XMLException { + stream(new DOMSource(document), result, encoding); + } + + public static void stream(DOMSource source, Result result, Charset encoding) throws XMLException { + stream(source, result, encoding, null); + } + + public static void stream(DOMSource source, Result result, Charset encoding, Properties outputProperties) + throws XMLException { + Transformer transformer; + try { + TransformerFactory tf = TransformerFactory.newInstance(); + try { + tf.setAttribute("indent-number", Integer.valueOf(2)); + } catch (IllegalArgumentException e) { + // ignore, may not be supported by implementation + } + transformer = tf.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + try { + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); + } catch (IllegalArgumentException e) { + // ignore, may not be supported by implementation + } + if (outputProperties != null) { + transformer.setOutputProperties(outputProperties); + } + + if (encoding != null) { + transformer.setOutputProperty(OutputKeys.ENCODING, encoding.name()); + } + } catch (TransformerConfigurationException | TransformerFactoryConfigurationError e) { + throw new XMLException("Cannot transform XML: " + e, e); + } + try { + transformer.transform(source, result); + } catch (TransformerException e) { + throw new XMLException("Cannot transform XML: " + e, e); + } + } + + /** + * As {@link #getTagContents(Element, String, boolean)}, but never throws an exception. Returns + * null if can't retrieve string. + */ + public static String getTagContents(Element element, String tag) { + try { + return getTagContents(element, tag, false); + } catch (XMLException e) { + // cannot happen + return null; + } + } + + public static String getTagContents(Element element, String tag, String deflt) { + String result = getTagContents(element, tag); + if (result == null) { + return deflt; + } else { + return result; + } + } + + /** + * For a tag content else ... + * + * returns "content". This will return the content of the first occurring child element with + * name tagName. If no such tag exists and {@link XMLException} is thrown if + * throwExceptionOnError is true. Otherwise null is returned. + */ + public static String getTagContents(Element parent, String tagName, boolean throwExceptionOnError) throws XMLException { + NodeList nodeList = parent.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) { + Node node = nodeList.item(i); + if (node instanceof Element && ((Element) node).getTagName().equals(tagName)) { + Element child = (Element) node; + return child.getTextContent(); + } + } + if (throwExceptionOnError) { + throw new XMLException("Missing tag: <" + tagName + "> in <" + parent.getTagName() + ">."); + } else { + return null; + } + } + + /** + * This will parse the text contents of an child element of element parent with the given + * tagName as integer. If no such child element can be found an XMLException is thrown. If more + * than one exists, the first is used. A {@link XMLException} is thrown if the text content is + * not a valid integer. + */ + public static int getTagContentsAsInt(Element element, String tag) throws XMLException { + final String string = getTagContents(element, tag, true); + try { + return Integer.parseInt(string); + } catch (NumberFormatException e) { + throw new XMLException(MessageFormat.format(CONTENTS_OF_TAG_0_MUST_BE_1_BUT_FOUND_2_LOG_MSG, tag, INTEGER_STRING, string)); + } + } + + /** + * This will parse the text contents of an child element of element parent with the given + * tagName as integer. If no such child element can be found, the given default value is + * returned. If more than one exists, the first is used. A {@link XMLException} is thrown if the + * text content is not a valid integer. + */ + public static int getTagContentsAsInt(Element element, String tag, int dfltValue) throws XMLException { + final String string = getTagContents(element, tag, false); + if (string == null) { + return dfltValue; + } + try { + return Integer.parseInt(string); + } catch (NumberFormatException e) { + throw new XMLException(MessageFormat.format(CONTENTS_OF_TAG_0_MUST_BE_1_BUT_FOUND_2_LOG_MSG, tag, INTEGER_STRING, string)); + } + } + + /** + * This will parse the text contents of an child element of element parent with the given + * tagName as long. If no such child element can be found an XMLException is thrown. If more + * than one exists, the first is used. A {@link XMLException} is thrown if the text content is + * not a valid long. + */ + public static long getTagContentsAsLong(Element element, String tag) throws XMLException { + final String string = getTagContents(element, tag, true); + try { + return Long.parseLong(string); + } catch (NumberFormatException e) { + throw new XMLException(MessageFormat.format(CONTENTS_OF_TAG_0_MUST_BE_1_BUT_FOUND_2_LOG_MSG, tag, INTEGER_STRING, string)); + } + } + + /** + * This will parse the text contents of an child element of element parent with the given + * tagName as long. If no such child element can be found, the given default value is returned. + * If more than one exists, the first is used. A {@link XMLException} is thrown if the text + * content is not a valid long. + */ + public static long getTagContentsAsLong(Element element, String tag, int dfltValue) throws XMLException { + final String string = getTagContents(element, tag, false); + if (string == null) { + return dfltValue; + } + try { + return Long.parseLong(string); + } catch (NumberFormatException e) { + throw new XMLException(MessageFormat.format(CONTENTS_OF_TAG_0_MUST_BE_1_BUT_FOUND_2_LOG_MSG, tag, INTEGER_STRING, string)); + } + } + + /** + * This will parse the text contents of an child element of element parent with the given + * tagName as double. If no such child element can be found, the given default value is + * returned. If more than one exists, the first is used. A {@link XMLException} is thrown if the + * text content is not a valid integer. + */ + public static double getTagContentsAsDouble(Element element, String tag, double dfltValue) throws XMLException { + final String string = getTagContents(element, tag, false); + if (string == null) { + return dfltValue; + } + try { + return Double.parseDouble(string); + } catch (NumberFormatException e) { + throw new XMLException(MessageFormat.format(CONTENTS_OF_TAG_0_MUST_BE_1_BUT_FOUND_2_LOG_MSG, tag, "double", string)); + } + } + + /** + * This will parse the text contents of an child element of element parent with the given + * tagName as boolean. If no such child element can be found the default is returned. If more + * than one exists, the first is used. A {@link NumberFormatException} is thrown if the text + * content is not a valid integer. + */ + public static boolean getTagContentsAsBoolean(Element parent, String tagName, boolean dflt) throws XMLException { + String string = getTagContents(parent, tagName, false); + if (string == null) { + return dflt; + } + try { + return Boolean.parseBoolean(string); + } catch (NumberFormatException e) { + throw new XMLException(MessageFormat.format(CONTENTS_OF_TAG_0_MUST_BE_1_BUT_FOUND_2_LOG_MSG, tagName, "true or false", string)); + } + } + + /** + * If parent has a direct child with the given name, the child's children are removed and are + * replaced by a single text node with the given text. If no direct child of parent with the + * given tag name exists, a new one is created. + */ + public static void setTagContents(Element parent, String tagName, String value) { + if (value == null) { + value = ""; + } + Element child = null; + NodeList list = parent.getChildNodes(); + for (int i = 0; i < list.getLength(); i++) { + Node node = list.item(i); + if (node instanceof Element) { + if (((Element) node).getTagName().equals(tagName)) { + child = (Element) node; + break; + } + } + } + if (child == null) { + child = parent.getOwnerDocument().createElement(tagName); + parent.appendChild(child); + } else { + while (child.hasChildNodes()) { + child.removeChild(child.getFirstChild()); + } + } + child.appendChild(parent.getOwnerDocument().createTextNode(value)); + } + + /** + * This method removes all child elements with the given name of the given element. + */ + public static void deleteTagContents(Element parentElement, String name) { + NodeList children = parentElement.getElementsByTagName(name); + for (int i = children.getLength() - 1; i >= 0; i--) { + Element child = (Element) children.item(i); + parentElement.removeChild(child); + } + } + + public static XMLGregorianCalendar getXMLGregorianCalendar(Date date) { + if (date == null) { + return null; + } + // Calendar calendar = Calendar.getInstance(); + // calendar.setTimeInMillis(date.getTime()); + DatatypeFactory datatypeFactory; + try { + datatypeFactory = DatatypeFactory.newInstance(); + } catch (DatatypeConfigurationException e) { + throw new RuntimeException("Failed to create XMLGregorianCalendar: " + e, e); + } + GregorianCalendar c = new GregorianCalendar(); + c.setTime(date); + return datatypeFactory.newXMLGregorianCalendar(c); + // + // XMLGregorianCalendar xmlGregorianCalendar = datatypeFactory.newXMLGregorianCalendar(); + // xmlGregorianCalendar.setYear(calendar.get(Calendar.YEAR)); + // xmlGregorianCalendar.setMonth(calendar.get(Calendar.MONTH) + 1); + // xmlGregorianCalendar.setDay(calendar.get(Calendar.DAY_OF_MONTH)); + // xmlGregorianCalendar.setHour(calendar.get(Calendar.HOUR_OF_DAY)); + // xmlGregorianCalendar.setMinute(calendar.get(Calendar.MINUTE)); + // xmlGregorianCalendar.setSecond(calendar.get(Calendar.SECOND)); + // xmlGregorianCalendar.setMillisecond(calendar.get(Calendar.MILLISECOND)); + // // + // xmlGregorianCalendar.setTimezone(calendar.get(((Calendar.DST_OFFSET)+calendar.get(Calendar.ZONE_OFFSET))/(60*1000))); + // return xmlGregorianCalendar; + } + + /** + * This will return the inner tag of the given element with the given tagName. If no such + * element can be found, or if there are more than one, an {@link XMLException} is thrown. + */ + public static Element getUniqueInnerTag(Element element, String tagName) throws XMLException { + return getUniqueInnerTag(element, tagName, true); + } + + /** + * This method will return null if the element doesn't exist if obligatory is false. Otherwise + * an exception is thrown. If the element is not unique, an exception is thrown in any cases. + */ + public static Element getUniqueInnerTag(Element element, String tagName, boolean obligatory) throws XMLException { + NodeList children = element.getChildNodes(); + Collection elements = new ArrayList(); + for (int i = 0; i < children.getLength(); i++) { + if (children.item(i) instanceof Element) { + Element child = (Element) children.item(i); + if (tagName.equals(child.getTagName())) { + elements.add(child); + } + } + } + switch (elements.size()) { + case 0: + if (obligatory) { + throw new XMLException("Missing inner tag <" + tagName + "> inside <" + element.getTagName() + ">."); + } else { + return null; + } + case 1: + return elements.iterator().next(); + default: + throw new XMLException("Inner tag <" + tagName + "> inside <" + element.getTagName() + + "> must be unique, but found " + children.getLength() + "."); + } + + } + + /** + * This method will return a Collection of all Elements that are direct child elements of the + * given element and have the given tag name. + */ + public static Collection getChildElements(Element father, String tagName) { + List elements = new LinkedList<>(); + NodeList list = father.getChildNodes(); + for (int i = 0; i < list.getLength(); i++) { + Node node = list.item(i); + if (node instanceof Element && node.getNodeName().equals(tagName)) { + elements.add((Element) node); + } + } + return elements; + } + + /** + * This method will return a Collection of all Elements that are direct child elements of the + * given element. + */ + public static Collection getChildElements(Element father) { + List elements = new LinkedList<>(); + NodeList list = father.getChildNodes(); + for (int i = 0; i < list.getLength(); i++) { + Node node = list.item(i); + if (node instanceof Element) { + elements.add((Element) node); + } + } + return elements; + } + + /** + * This method will return the single inner child with the given name of the given father + * element. If obligatory is true, an Exception is thrown if the element is not present. If it's + * ambiguous, an execption is thrown in any case. + */ + public static Element getChildElement(Element father, String tagName, boolean mandatory) throws XMLException { + Collection children = getChildElements(father, tagName); + switch (children.size()) { + case 0: + if (mandatory) { + throw new XMLException("Missing child tag <" + tagName + "> inside <" + father.getTagName() + ">."); + } else { + return null; + } + case 1: + return children.iterator().next(); + default: + throw new XMLException("Child tag <" + tagName + "> inside <" + father.getTagName() + + "> must be unique, but found " + children.size() + "."); + } + + } + + /** + * This is the same as {@link #getChildElement(Element, String, boolean)}, but its always + * obligatory to have the child element. + * + * @throws XMLException + */ + public static Element getUniqueChildElement(Element father, String tagName) throws XMLException { + return getChildElement(father, tagName, true); + } + + /** + * This adds a single tag with the given content to the given parent element. The new tag is + * automatically appended. + */ + public static void addTag(Element parent, String name, String textValue) { + Element child = parent.getOwnerDocument().createElement(name); + child.setTextContent(textValue); + parent.appendChild(child); + } + + /** + * Creates a new, empty document. + */ + public static Document createDocument() { + try { + DocumentBuilder builder = createDocumentBuilder(); + return builder.newDocument(); + } catch (XMLParserException e) { + return null; + } + } + + /** + * This will add an empty new tag to the given fatherElement with the given name. + */ + public static Element addTag(Element fatherElement, String tagName) { + Element createElement = fatherElement.getOwnerDocument().createElement(tagName); + fatherElement.appendChild(createElement); + return createElement; + } + + /** + * Returns the unique child of the given element with the given tag name. This child tag must be + * unique, or an exception will be raised. If optional is false and the tag is missing, this + * method also raises an exception. Otherwise it returns null. + */ + public static Element getChildTag(Element element, String xmlTagName, boolean optional) throws XMLException { + NodeList children = element.getChildNodes(); + Element found = null; + for (int i = 0; i < children.getLength(); i++) { + Node n = children.item(i); + if (n instanceof Element && ((Element) n).getTagName().equals(xmlTagName)) { + if (found != null) { + throw new XMLException("Tag <" + xmlTagName + "> in <" + element.getTagName() + "> must be unique."); + } else { + found = (Element) n; + } + } + } + if (!optional && found == null) { + throw new XMLException("Tag <" + xmlTagName + "> in <" + element.getTagName() + "> is missing."); + } else { + return found; + } + } + + /** + * Returns the contents of the inner tags with the given name as String array. + */ + public static String[] getChildTagsContentAsStringArray(Element father, String childElementName) { + Collection valueElements = XMLTools.getChildElements(father, childElementName); + String[] values = new String[valueElements.size()]; + int i = 0; + for (Element valueElement : valueElements) { + values[i] = valueElement.getTextContent(); + i++; + } + + return values; + } + + /** + * Returns the contents of the inner tags with the given name as int array. + * + * @throws XMLException + */ + public static int[] getChildTagsContentAsIntArray(Element father, String childElementName) throws XMLException { + Collection valueElements = XMLTools.getChildElements(father, childElementName); + int[] values = new int[valueElements.size()]; + int i = 0; + for (Element valueElement : valueElements) { + try { + values[i] = Integer.valueOf(valueElement.getTextContent().trim()); + } catch (NumberFormatException e) { + throw new XMLException("Invalid format for element content of type " + childElementName, e); + } + i++; + } + + return values; + } + + /** + * This method will get a XPath expression matching all elements given. This works by following + * this algorithm: 1. Check whether the last element is of same type Yes: if paths of elements + * are of same structure, keep it, but remove counters where necessary if not, + */ + public static String getXPath( Element... elements) { + Map> elementTypeElementsMap = new HashMap<>(); + for (Element element : elements) { + List typeElements = elementTypeElementsMap.get(element.getTagName()); + if (typeElements == null) { + typeElements = new LinkedList<>(); + elementTypeElementsMap.put(element.getTagName(), typeElements); + } + typeElements.add(element); + } + + // for each single type of element build single longest common path of all elements + + Element[] parentElements = new Element[elements.length]; + + for (int i = 0; i < elements.length; i++) { + parentElements[i] = (Element) elements[i].getParentNode(); + } + + return ""; + } +} diff --git a/src/main/java/com/rapidminer/io/process/conditions/ParameterEqualsCondition.java b/src/main/java/com/rapidminer/io/process/conditions/ParameterEqualsCondition.java index cf977b8f1..fc5e52fc2 100644 --- a/src/main/java/com/rapidminer/io/process/conditions/ParameterEqualsCondition.java +++ b/src/main/java/com/rapidminer/io/process/conditions/ParameterEqualsCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/conditions/ParameterUnequalsCondition.java b/src/main/java/com/rapidminer/io/process/conditions/ParameterUnequalsCondition.java index a2b889c10..d6aaf3d1c 100644 --- a/src/main/java/com/rapidminer/io/process/conditions/ParameterUnequalsCondition.java +++ b/src/main/java/com/rapidminer/io/process/conditions/ParameterUnequalsCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/conditions/ParseRuleCondition.java b/src/main/java/com/rapidminer/io/process/conditions/ParseRuleCondition.java index c08eeddb5..dc6c5c559 100644 --- a/src/main/java/com/rapidminer/io/process/conditions/ParseRuleCondition.java +++ b/src/main/java/com/rapidminer/io/process/conditions/ParseRuleCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/AbstractConditionedParseRule.java b/src/main/java/com/rapidminer/io/process/rules/AbstractConditionedParseRule.java index cbbe545fe..d9064969e 100644 --- a/src/main/java/com/rapidminer/io/process/rules/AbstractConditionedParseRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/AbstractConditionedParseRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/AbstractGenericParseRule.java b/src/main/java/com/rapidminer/io/process/rules/AbstractGenericParseRule.java index b8531e91c..b4e199450 100644 --- a/src/main/java/com/rapidminer/io/process/rules/AbstractGenericParseRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/AbstractGenericParseRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/AbstractParseRule.java b/src/main/java/com/rapidminer/io/process/rules/AbstractParseRule.java index 0655fcb77..f581afe78 100644 --- a/src/main/java/com/rapidminer/io/process/rules/AbstractParseRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/AbstractParseRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/ChangeParameterValueRule.java b/src/main/java/com/rapidminer/io/process/rules/ChangeParameterValueRule.java index 31af2d797..cc3ae7921 100644 --- a/src/main/java/com/rapidminer/io/process/rules/ChangeParameterValueRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/ChangeParameterValueRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/DeleteAfterAutoWireRule.java b/src/main/java/com/rapidminer/io/process/rules/DeleteAfterAutoWireRule.java index 7d94257d3..545e937cb 100644 --- a/src/main/java/com/rapidminer/io/process/rules/DeleteAfterAutoWireRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/DeleteAfterAutoWireRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/DeleteUnnecessaryOperatorChainRule.java b/src/main/java/com/rapidminer/io/process/rules/DeleteUnnecessaryOperatorChainRule.java index f2ee6e09e..1d93987ed 100644 --- a/src/main/java/com/rapidminer/io/process/rules/DeleteUnnecessaryOperatorChainRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/DeleteUnnecessaryOperatorChainRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/ExcelCellAddressParseRule.java b/src/main/java/com/rapidminer/io/process/rules/ExcelCellAddressParseRule.java index cdccde6dc..11a1cf710 100644 --- a/src/main/java/com/rapidminer/io/process/rules/ExcelCellAddressParseRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/ExcelCellAddressParseRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/ExchangeSubprocessesRule.java b/src/main/java/com/rapidminer/io/process/rules/ExchangeSubprocessesRule.java index 48835bc86..1647e8c24 100644 --- a/src/main/java/com/rapidminer/io/process/rules/ExchangeSubprocessesRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/ExchangeSubprocessesRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/OperatorEnablerRepairRule.java b/src/main/java/com/rapidminer/io/process/rules/OperatorEnablerRepairRule.java index 464177994..717efeb96 100644 --- a/src/main/java/com/rapidminer/io/process/rules/OperatorEnablerRepairRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/OperatorEnablerRepairRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/ParseRule.java b/src/main/java/com/rapidminer/io/process/rules/ParseRule.java index 1234b6d47..06c197678 100644 --- a/src/main/java/com/rapidminer/io/process/rules/ParseRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/ParseRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/PassthroughShortcutRule.java b/src/main/java/com/rapidminer/io/process/rules/PassthroughShortcutRule.java index f1ade0280..a5e72f2c1 100644 --- a/src/main/java/com/rapidminer/io/process/rules/PassthroughShortcutRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/PassthroughShortcutRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/RenamePlotterParametersRule.java b/src/main/java/com/rapidminer/io/process/rules/RenamePlotterParametersRule.java index c285a00a6..ee616b07b 100644 --- a/src/main/java/com/rapidminer/io/process/rules/RenamePlotterParametersRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/RenamePlotterParametersRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/ReplaceIOMultiplierRule.java b/src/main/java/com/rapidminer/io/process/rules/ReplaceIOMultiplierRule.java index 6e5d95934..e030cc8f6 100644 --- a/src/main/java/com/rapidminer/io/process/rules/ReplaceIOMultiplierRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/ReplaceIOMultiplierRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/ReplaceOperatorRule.java b/src/main/java/com/rapidminer/io/process/rules/ReplaceOperatorRule.java index 76c785777..7108bb494 100644 --- a/src/main/java/com/rapidminer/io/process/rules/ReplaceOperatorRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/ReplaceOperatorRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/ReplaceParameterRule.java b/src/main/java/com/rapidminer/io/process/rules/ReplaceParameterRule.java index af3f583b2..fcdc16f70 100644 --- a/src/main/java/com/rapidminer/io/process/rules/ReplaceParameterRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/ReplaceParameterRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/SetParameterRule.java b/src/main/java/com/rapidminer/io/process/rules/SetParameterRule.java index 55d7e3a9c..d5ae36aa6 100644 --- a/src/main/java/com/rapidminer/io/process/rules/SetParameterRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/SetParameterRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/SetRoleByNameRule.java b/src/main/java/com/rapidminer/io/process/rules/SetRoleByNameRule.java index 7bbfb5395..4497cadc6 100644 --- a/src/main/java/com/rapidminer/io/process/rules/SetRoleByNameRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/SetRoleByNameRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/SwitchListEntriesRule.java b/src/main/java/com/rapidminer/io/process/rules/SwitchListEntriesRule.java index 31915ce3a..2b06ece05 100644 --- a/src/main/java/com/rapidminer/io/process/rules/SwitchListEntriesRule.java +++ b/src/main/java/com/rapidminer/io/process/rules/SwitchListEntriesRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/process/rules/WireAllOperators.java b/src/main/java/com/rapidminer/io/process/rules/WireAllOperators.java index 63e1b29e8..d644d6276 100644 --- a/src/main/java/com/rapidminer/io/process/rules/WireAllOperators.java +++ b/src/main/java/com/rapidminer/io/process/rules/WireAllOperators.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/remote/RemoteFile.java b/src/main/java/com/rapidminer/io/remote/RemoteFile.java index 8895294e8..ec2456fa8 100644 --- a/src/main/java/com/rapidminer/io/remote/RemoteFile.java +++ b/src/main/java/com/rapidminer/io/remote/RemoteFile.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/io/remote/RemoteFileSystemView.java b/src/main/java/com/rapidminer/io/remote/RemoteFileSystemView.java index 39b1ffdca..6d702cb1b 100644 --- a/src/main/java/com/rapidminer/io/remote/RemoteFileSystemView.java +++ b/src/main/java/com/rapidminer/io/remote/RemoteFileSystemView.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/AbstractExampleSetProcessing.java b/src/main/java/com/rapidminer/operator/AbstractExampleSetProcessing.java index ccb6ff677..b3c95dad1 100644 --- a/src/main/java/com/rapidminer/operator/AbstractExampleSetProcessing.java +++ b/src/main/java/com/rapidminer/operator/AbstractExampleSetProcessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/AbstractIOObject.java b/src/main/java/com/rapidminer/operator/AbstractIOObject.java index 39c23ba7d..1c5a04db8 100644 --- a/src/main/java/com/rapidminer/operator/AbstractIOObject.java +++ b/src/main/java/com/rapidminer/operator/AbstractIOObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/AbstractModel.java b/src/main/java/com/rapidminer/operator/AbstractModel.java index 4932d718d..d611ec9b2 100644 --- a/src/main/java/com/rapidminer/operator/AbstractModel.java +++ b/src/main/java/com/rapidminer/operator/AbstractModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/AddListener.java b/src/main/java/com/rapidminer/operator/AddListener.java index 7729c830e..d9cadda2f 100644 --- a/src/main/java/com/rapidminer/operator/AddListener.java +++ b/src/main/java/com/rapidminer/operator/AddListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/Annotations.java b/src/main/java/com/rapidminer/operator/Annotations.java index 224c4088c..6ceb2974b 100644 --- a/src/main/java/com/rapidminer/operator/Annotations.java +++ b/src/main/java/com/rapidminer/operator/Annotations.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/DataMacroDefinitionOperator.java b/src/main/java/com/rapidminer/operator/DataMacroDefinitionOperator.java index d0a3786f9..bde09f8f2 100644 --- a/src/main/java/com/rapidminer/operator/DataMacroDefinitionOperator.java +++ b/src/main/java/com/rapidminer/operator/DataMacroDefinitionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/DebugMode.java b/src/main/java/com/rapidminer/operator/DebugMode.java index 41ab0ed4c..5b0f7d9dd 100644 --- a/src/main/java/com/rapidminer/operator/DebugMode.java +++ b/src/main/java/com/rapidminer/operator/DebugMode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/DefaultIODescription.java b/src/main/java/com/rapidminer/operator/DefaultIODescription.java index 533d6a00e..fc3334d5a 100644 --- a/src/main/java/com/rapidminer/operator/DefaultIODescription.java +++ b/src/main/java/com/rapidminer/operator/DefaultIODescription.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/DummyOperator.java b/src/main/java/com/rapidminer/operator/DummyOperator.java index ea04e0c2b..6905953a3 100644 --- a/src/main/java/com/rapidminer/operator/DummyOperator.java +++ b/src/main/java/com/rapidminer/operator/DummyOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/EnabledOperatorView.java b/src/main/java/com/rapidminer/operator/EnabledOperatorView.java index 89c702f60..edf0e5494 100644 --- a/src/main/java/com/rapidminer/operator/EnabledOperatorView.java +++ b/src/main/java/com/rapidminer/operator/EnabledOperatorView.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ExecutionMode.java b/src/main/java/com/rapidminer/operator/ExecutionMode.java index c20ef6caf..55b7b9ebd 100644 --- a/src/main/java/com/rapidminer/operator/ExecutionMode.java +++ b/src/main/java/com/rapidminer/operator/ExecutionMode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ExecutionUnit.java b/src/main/java/com/rapidminer/operator/ExecutionUnit.java index 3702d371e..19d52dae8 100644 --- a/src/main/java/com/rapidminer/operator/ExecutionUnit.java +++ b/src/main/java/com/rapidminer/operator/ExecutionUnit.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/FileEchoOperator.java b/src/main/java/com/rapidminer/operator/FileEchoOperator.java index 9c331a89f..a2aeac786 100644 --- a/src/main/java/com/rapidminer/operator/FileEchoOperator.java +++ b/src/main/java/com/rapidminer/operator/FileEchoOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/FlagUserData.java b/src/main/java/com/rapidminer/operator/FlagUserData.java index d4868ef10..ec97143a6 100644 --- a/src/main/java/com/rapidminer/operator/FlagUserData.java +++ b/src/main/java/com/rapidminer/operator/FlagUserData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/GroupedModel.java b/src/main/java/com/rapidminer/operator/GroupedModel.java index d214b848e..48ccc697e 100644 --- a/src/main/java/com/rapidminer/operator/GroupedModel.java +++ b/src/main/java/com/rapidminer/operator/GroupedModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOConsumeOperator.java b/src/main/java/com/rapidminer/operator/IOConsumeOperator.java index dda010818..5c97985df 100644 --- a/src/main/java/com/rapidminer/operator/IOConsumeOperator.java +++ b/src/main/java/com/rapidminer/operator/IOConsumeOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOContainer.java b/src/main/java/com/rapidminer/operator/IOContainer.java index 59a7882f4..f1dcf21c7 100644 --- a/src/main/java/com/rapidminer/operator/IOContainer.java +++ b/src/main/java/com/rapidminer/operator/IOContainer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IODescription.java b/src/main/java/com/rapidminer/operator/IODescription.java index 94f997274..dc56bcabd 100644 --- a/src/main/java/com/rapidminer/operator/IODescription.java +++ b/src/main/java/com/rapidminer/operator/IODescription.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOMerger.java b/src/main/java/com/rapidminer/operator/IOMerger.java index 3e27cf7fe..deeb4b712 100644 --- a/src/main/java/com/rapidminer/operator/IOMerger.java +++ b/src/main/java/com/rapidminer/operator/IOMerger.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOMultiplier.java b/src/main/java/com/rapidminer/operator/IOMultiplier.java index 45c4b35bf..fbfe08885 100644 --- a/src/main/java/com/rapidminer/operator/IOMultiplier.java +++ b/src/main/java/com/rapidminer/operator/IOMultiplier.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOMultiplyOperator.java b/src/main/java/com/rapidminer/operator/IOMultiplyOperator.java index 0f883a786..359861947 100644 --- a/src/main/java/com/rapidminer/operator/IOMultiplyOperator.java +++ b/src/main/java/com/rapidminer/operator/IOMultiplyOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOObject.java b/src/main/java/com/rapidminer/operator/IOObject.java index 4a4a5f6e5..32c4dea3a 100644 --- a/src/main/java/com/rapidminer/operator/IOObject.java +++ b/src/main/java/com/rapidminer/operator/IOObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOObjectCollection.java b/src/main/java/com/rapidminer/operator/IOObjectCollection.java index d6c1e3665..9ddad75df 100644 --- a/src/main/java/com/rapidminer/operator/IOObjectCollection.java +++ b/src/main/java/com/rapidminer/operator/IOObjectCollection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOObjectConverter.java b/src/main/java/com/rapidminer/operator/IOObjectConverter.java index ebf7f21d2..3b753a4d3 100644 --- a/src/main/java/com/rapidminer/operator/IOObjectConverter.java +++ b/src/main/java/com/rapidminer/operator/IOObjectConverter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOObjectMap.java b/src/main/java/com/rapidminer/operator/IOObjectMap.java index 03534c261..7542bd8c5 100644 --- a/src/main/java/com/rapidminer/operator/IOObjectMap.java +++ b/src/main/java/com/rapidminer/operator/IOObjectMap.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOObjectMapEvent.java b/src/main/java/com/rapidminer/operator/IOObjectMapEvent.java index 66349b982..d31db9caf 100644 --- a/src/main/java/com/rapidminer/operator/IOObjectMapEvent.java +++ b/src/main/java/com/rapidminer/operator/IOObjectMapEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOPublishToAppOperator.java b/src/main/java/com/rapidminer/operator/IOPublishToAppOperator.java index f5e0fa4e9..2c285ba04 100644 --- a/src/main/java/com/rapidminer/operator/IOPublishToAppOperator.java +++ b/src/main/java/com/rapidminer/operator/IOPublishToAppOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IORecallfromAppOperator.java b/src/main/java/com/rapidminer/operator/IORecallfromAppOperator.java index ad50d0ccd..65e3b125f 100644 --- a/src/main/java/com/rapidminer/operator/IORecallfromAppOperator.java +++ b/src/main/java/com/rapidminer/operator/IORecallfromAppOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IORetrievalOperator.java b/src/main/java/com/rapidminer/operator/IORetrievalOperator.java index b09c027c3..e47ed18e6 100644 --- a/src/main/java/com/rapidminer/operator/IORetrievalOperator.java +++ b/src/main/java/com/rapidminer/operator/IORetrievalOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOSelectOperator.java b/src/main/java/com/rapidminer/operator/IOSelectOperator.java index d39af71d5..04f251172 100644 --- a/src/main/java/com/rapidminer/operator/IOSelectOperator.java +++ b/src/main/java/com/rapidminer/operator/IOSelectOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IOStorageOperator.java b/src/main/java/com/rapidminer/operator/IOStorageOperator.java index 3cb31e69f..5f5538e42 100644 --- a/src/main/java/com/rapidminer/operator/IOStorageOperator.java +++ b/src/main/java/com/rapidminer/operator/IOStorageOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IllegalInputException.java b/src/main/java/com/rapidminer/operator/IllegalInputException.java index 5a7c1ed23..9ffaff724 100644 --- a/src/main/java/com/rapidminer/operator/IllegalInputException.java +++ b/src/main/java/com/rapidminer/operator/IllegalInputException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/IllegalNumberOfInnerOperatorsException.java b/src/main/java/com/rapidminer/operator/IllegalNumberOfInnerOperatorsException.java index fd4d786c8..c091bd70c 100644 --- a/src/main/java/com/rapidminer/operator/IllegalNumberOfInnerOperatorsException.java +++ b/src/main/java/com/rapidminer/operator/IllegalNumberOfInnerOperatorsException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/InputDescription.java b/src/main/java/com/rapidminer/operator/InputDescription.java index 26556f656..875d968c6 100644 --- a/src/main/java/com/rapidminer/operator/InputDescription.java +++ b/src/main/java/com/rapidminer/operator/InputDescription.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ListDescription.java b/src/main/java/com/rapidminer/operator/ListDescription.java index de0855adb..c3096588a 100644 --- a/src/main/java/com/rapidminer/operator/ListDescription.java +++ b/src/main/java/com/rapidminer/operator/ListDescription.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/MacroConstructionOperator.java b/src/main/java/com/rapidminer/operator/MacroConstructionOperator.java index ada068776..72c027508 100644 --- a/src/main/java/com/rapidminer/operator/MacroConstructionOperator.java +++ b/src/main/java/com/rapidminer/operator/MacroConstructionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/MacroDefinitionOperator.java b/src/main/java/com/rapidminer/operator/MacroDefinitionOperator.java index ea8570fbd..7c55090cf 100644 --- a/src/main/java/com/rapidminer/operator/MacroDefinitionOperator.java +++ b/src/main/java/com/rapidminer/operator/MacroDefinitionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/MailNotSentException.java b/src/main/java/com/rapidminer/operator/MailNotSentException.java index 407817c7b..3aee64409 100644 --- a/src/main/java/com/rapidminer/operator/MailNotSentException.java +++ b/src/main/java/com/rapidminer/operator/MailNotSentException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/MemoryCleanUp.java b/src/main/java/com/rapidminer/operator/MemoryCleanUp.java index 4ad86dc4a..d537f406d 100644 --- a/src/main/java/com/rapidminer/operator/MemoryCleanUp.java +++ b/src/main/java/com/rapidminer/operator/MemoryCleanUp.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/MissingIOObjectException.java b/src/main/java/com/rapidminer/operator/MissingIOObjectException.java index b1312b15b..0519f5615 100644 --- a/src/main/java/com/rapidminer/operator/MissingIOObjectException.java +++ b/src/main/java/com/rapidminer/operator/MissingIOObjectException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/Model.java b/src/main/java/com/rapidminer/operator/Model.java index 2a28d8607..d5b1a9963 100644 --- a/src/main/java/com/rapidminer/operator/Model.java +++ b/src/main/java/com/rapidminer/operator/Model.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ModelApplier.java b/src/main/java/com/rapidminer/operator/ModelApplier.java index abd220e03..2d1db74f2 100644 --- a/src/main/java/com/rapidminer/operator/ModelApplier.java +++ b/src/main/java/com/rapidminer/operator/ModelApplier.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ModelGrouper.java b/src/main/java/com/rapidminer/operator/ModelGrouper.java index acc35f4d4..4c71bb03f 100644 --- a/src/main/java/com/rapidminer/operator/ModelGrouper.java +++ b/src/main/java/com/rapidminer/operator/ModelGrouper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ModelUngrouper.java b/src/main/java/com/rapidminer/operator/ModelUngrouper.java index 6b09de4ec..ba6e547fd 100644 --- a/src/main/java/com/rapidminer/operator/ModelUngrouper.java +++ b/src/main/java/com/rapidminer/operator/ModelUngrouper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ModelUpdater.java b/src/main/java/com/rapidminer/operator/ModelUpdater.java index ceae59c62..81bbff19c 100644 --- a/src/main/java/com/rapidminer/operator/ModelUpdater.java +++ b/src/main/java/com/rapidminer/operator/ModelUpdater.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/Operator.java b/src/main/java/com/rapidminer/operator/Operator.java index 9b0470953..dff03c0a7 100644 --- a/src/main/java/com/rapidminer/operator/Operator.java +++ b/src/main/java/com/rapidminer/operator/Operator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/OperatorCapability.java b/src/main/java/com/rapidminer/operator/OperatorCapability.java index a7fb7486e..405b7f3b8 100644 --- a/src/main/java/com/rapidminer/operator/OperatorCapability.java +++ b/src/main/java/com/rapidminer/operator/OperatorCapability.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/OperatorChain.java b/src/main/java/com/rapidminer/operator/OperatorChain.java index f09e076fa..6fbc213ea 100644 --- a/src/main/java/com/rapidminer/operator/OperatorChain.java +++ b/src/main/java/com/rapidminer/operator/OperatorChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/OperatorCreationException.java b/src/main/java/com/rapidminer/operator/OperatorCreationException.java index 4e9f3d77d..87df6ab4a 100644 --- a/src/main/java/com/rapidminer/operator/OperatorCreationException.java +++ b/src/main/java/com/rapidminer/operator/OperatorCreationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/OperatorDescription.java b/src/main/java/com/rapidminer/operator/OperatorDescription.java index 09a405ecb..8693d304f 100644 --- a/src/main/java/com/rapidminer/operator/OperatorDescription.java +++ b/src/main/java/com/rapidminer/operator/OperatorDescription.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -70,6 +70,7 @@ public class OperatorDescription implements Comparable { .createIcon("48/" + I18N.getMessage(I18N.getGUIBundle(), "gui.constraint.operator.unsupported_datasource.icon")); private static final int DEFAULT_PRIORITY = 0; + private static final String DEPRECATED_GROUP_KEY = "deprecated"; public static final String EXTENSIONS_GROUP_IDENTIFIER = "extensions"; @@ -375,7 +376,7 @@ public String getDeprecationInfo() { } public boolean isDeprecated() { - return getDeprecationInfo() != null; + return getDeprecationInfo() != null || getGroup().endsWith(DEPRECATED_GROUP_KEY); } public String getProviderName() { diff --git a/src/main/java/com/rapidminer/operator/OperatorException.java b/src/main/java/com/rapidminer/operator/OperatorException.java index 124aef762..88bc260f3 100644 --- a/src/main/java/com/rapidminer/operator/OperatorException.java +++ b/src/main/java/com/rapidminer/operator/OperatorException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/OperatorProgress.java b/src/main/java/com/rapidminer/operator/OperatorProgress.java index 15e4ecc70..326a5d263 100644 --- a/src/main/java/com/rapidminer/operator/OperatorProgress.java +++ b/src/main/java/com/rapidminer/operator/OperatorProgress.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/OperatorVersion.java b/src/main/java/com/rapidminer/operator/OperatorVersion.java index 307923172..1b308f917 100644 --- a/src/main/java/com/rapidminer/operator/OperatorVersion.java +++ b/src/main/java/com/rapidminer/operator/OperatorVersion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/PortUserError.java b/src/main/java/com/rapidminer/operator/PortUserError.java index 40c1430ce..abeff6fc3 100644 --- a/src/main/java/com/rapidminer/operator/PortUserError.java +++ b/src/main/java/com/rapidminer/operator/PortUserError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -44,7 +44,7 @@ public class PortUserError extends UserError { /** * Creates a new user error for a port. * - * @param operator + * @param port * The {@link Port} which caused the error. * @param code * The error code referring to a message in the file @@ -60,7 +60,7 @@ public PortUserError(Port port, int code, Object... arguments) { /** * Creates a new user error for a port. * - * @param operator + * @param port * The {@link Port} which caused the error. * @param errorId * The error id referring to a message in the file diff --git a/src/main/java/com/rapidminer/operator/ProcessRootOperator.java b/src/main/java/com/rapidminer/operator/ProcessRootOperator.java index f6ce28c70..e509c20ec 100644 --- a/src/main/java/com/rapidminer/operator/ProcessRootOperator.java +++ b/src/main/java/com/rapidminer/operator/ProcessRootOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ProcessSetupError.java b/src/main/java/com/rapidminer/operator/ProcessSetupError.java index 7592e5d13..ca07e40ae 100644 --- a/src/main/java/com/rapidminer/operator/ProcessSetupError.java +++ b/src/main/java/com/rapidminer/operator/ProcessSetupError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ProcessStoppedException.java b/src/main/java/com/rapidminer/operator/ProcessStoppedException.java index 55d343417..6b2f83599 100644 --- a/src/main/java/com/rapidminer/operator/ProcessStoppedException.java +++ b/src/main/java/com/rapidminer/operator/ProcessStoppedException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ResultObject.java b/src/main/java/com/rapidminer/operator/ResultObject.java index 31621b0cd..d1ac89674 100644 --- a/src/main/java/com/rapidminer/operator/ResultObject.java +++ b/src/main/java/com/rapidminer/operator/ResultObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ResultObjectAdapter.java b/src/main/java/com/rapidminer/operator/ResultObjectAdapter.java index 0482b068d..dc213ff7f 100644 --- a/src/main/java/com/rapidminer/operator/ResultObjectAdapter.java +++ b/src/main/java/com/rapidminer/operator/ResultObjectAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ScriptingOperator.java b/src/main/java/com/rapidminer/operator/ScriptingOperator.java index a1b02a0e0..cd273dac0 100644 --- a/src/main/java/com/rapidminer/operator/ScriptingOperator.java +++ b/src/main/java/com/rapidminer/operator/ScriptingOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/SimpleOperatorChain.java b/src/main/java/com/rapidminer/operator/SimpleOperatorChain.java index b40898822..c81dc6508 100644 --- a/src/main/java/com/rapidminer/operator/SimpleOperatorChain.java +++ b/src/main/java/com/rapidminer/operator/SimpleOperatorChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/SimpleProcessSetupError.java b/src/main/java/com/rapidminer/operator/SimpleProcessSetupError.java index 499a853df..87ea2eb71 100644 --- a/src/main/java/com/rapidminer/operator/SimpleProcessSetupError.java +++ b/src/main/java/com/rapidminer/operator/SimpleProcessSetupError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/SimpleResultObject.java b/src/main/java/com/rapidminer/operator/SimpleResultObject.java index a1f46efe5..83329489e 100644 --- a/src/main/java/com/rapidminer/operator/SimpleResultObject.java +++ b/src/main/java/com/rapidminer/operator/SimpleResultObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/SingleMacroDefinitionOperator.java b/src/main/java/com/rapidminer/operator/SingleMacroDefinitionOperator.java index 02e45323c..67c07161e 100644 --- a/src/main/java/com/rapidminer/operator/SingleMacroDefinitionOperator.java +++ b/src/main/java/com/rapidminer/operator/SingleMacroDefinitionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/UnknownParameterInformation.java b/src/main/java/com/rapidminer/operator/UnknownParameterInformation.java index 48ba5f9b2..858552c1f 100644 --- a/src/main/java/com/rapidminer/operator/UnknownParameterInformation.java +++ b/src/main/java/com/rapidminer/operator/UnknownParameterInformation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/UnsupportedApplicationParameterError.java b/src/main/java/com/rapidminer/operator/UnsupportedApplicationParameterError.java index 8bd3c2d6a..d8a66f0b2 100644 --- a/src/main/java/com/rapidminer/operator/UnsupportedApplicationParameterError.java +++ b/src/main/java/com/rapidminer/operator/UnsupportedApplicationParameterError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/UserData.java b/src/main/java/com/rapidminer/operator/UserData.java index 196067b84..cd459d631 100644 --- a/src/main/java/com/rapidminer/operator/UserData.java +++ b/src/main/java/com/rapidminer/operator/UserData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/UserError.java b/src/main/java/com/rapidminer/operator/UserError.java index c5ba7b861..7911f1889 100644 --- a/src/main/java/com/rapidminer/operator/UserError.java +++ b/src/main/java/com/rapidminer/operator/UserError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -156,8 +156,8 @@ public int getCode() { } /** - * Returns the ErrorIdentifier if the UserError was created with a constructor that specifies - * an error ID. Returns null if the UserError was created with a constructor that specifies an + * Returns the ErrorIdentifier if the UserError was created with a constructor that specifies + * an error ID. Returns null if the UserError was created with a constructor that specifies an * error code. */ public String getErrorIdentifier() { diff --git a/src/main/java/com/rapidminer/operator/Value.java b/src/main/java/com/rapidminer/operator/Value.java index f856b3b3f..0d91cfcd8 100644 --- a/src/main/java/com/rapidminer/operator/Value.java +++ b/src/main/java/com/rapidminer/operator/Value.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ValueDouble.java b/src/main/java/com/rapidminer/operator/ValueDouble.java index 9eb803dd9..f753e2429 100644 --- a/src/main/java/com/rapidminer/operator/ValueDouble.java +++ b/src/main/java/com/rapidminer/operator/ValueDouble.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ValueInterface.java b/src/main/java/com/rapidminer/operator/ValueInterface.java index 915d5f9c2..a611956f1 100644 --- a/src/main/java/com/rapidminer/operator/ValueInterface.java +++ b/src/main/java/com/rapidminer/operator/ValueInterface.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ValueString.java b/src/main/java/com/rapidminer/operator/ValueString.java index 56f8576c9..29e6cf375 100644 --- a/src/main/java/com/rapidminer/operator/ValueString.java +++ b/src/main/java/com/rapidminer/operator/ValueString.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ViewModel.java b/src/main/java/com/rapidminer/operator/ViewModel.java index feb0c5d41..6090e479f 100644 --- a/src/main/java/com/rapidminer/operator/ViewModel.java +++ b/src/main/java/com/rapidminer/operator/ViewModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/WrongNumberOfInnerOperatorsException.java b/src/main/java/com/rapidminer/operator/WrongNumberOfInnerOperatorsException.java index bf602af34..f1d50a6af 100644 --- a/src/main/java/com/rapidminer/operator/WrongNumberOfInnerOperatorsException.java +++ b/src/main/java/com/rapidminer/operator/WrongNumberOfInnerOperatorsException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/annotation/ExampleSetResourceConsumptionEstimator.java b/src/main/java/com/rapidminer/operator/annotation/ExampleSetResourceConsumptionEstimator.java index d1507c576..667619c5a 100644 --- a/src/main/java/com/rapidminer/operator/annotation/ExampleSetResourceConsumptionEstimator.java +++ b/src/main/java/com/rapidminer/operator/annotation/ExampleSetResourceConsumptionEstimator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/annotation/PolynomialExampleSetResourceConsumptionEstimator.java b/src/main/java/com/rapidminer/operator/annotation/PolynomialExampleSetResourceConsumptionEstimator.java index 4a12a50d8..68fe224c3 100644 --- a/src/main/java/com/rapidminer/operator/annotation/PolynomialExampleSetResourceConsumptionEstimator.java +++ b/src/main/java/com/rapidminer/operator/annotation/PolynomialExampleSetResourceConsumptionEstimator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/annotation/PolynomialFunction.java b/src/main/java/com/rapidminer/operator/annotation/PolynomialFunction.java index 1b3fd264e..cfb75591f 100644 --- a/src/main/java/com/rapidminer/operator/annotation/PolynomialFunction.java +++ b/src/main/java/com/rapidminer/operator/annotation/PolynomialFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/annotation/ResourceConsumer.java b/src/main/java/com/rapidminer/operator/annotation/ResourceConsumer.java index 2796c223c..c28e307e8 100644 --- a/src/main/java/com/rapidminer/operator/annotation/ResourceConsumer.java +++ b/src/main/java/com/rapidminer/operator/annotation/ResourceConsumer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/annotation/ResourceConsumptionEstimator.java b/src/main/java/com/rapidminer/operator/annotation/ResourceConsumptionEstimator.java index c16e0f6b3..a27bba3ff 100644 --- a/src/main/java/com/rapidminer/operator/annotation/ResourceConsumptionEstimator.java +++ b/src/main/java/com/rapidminer/operator/annotation/ResourceConsumptionEstimator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/associations/AssociationRulesApplier.java b/src/main/java/com/rapidminer/operator/associations/AssociationRulesApplier.java index e97953fb9..58ec6ce9b 100644 --- a/src/main/java/com/rapidminer/operator/associations/AssociationRulesApplier.java +++ b/src/main/java/com/rapidminer/operator/associations/AssociationRulesApplier.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/Centroid.java b/src/main/java/com/rapidminer/operator/clustering/Centroid.java index c46f57708..7f49440d0 100644 --- a/src/main/java/com/rapidminer/operator/clustering/Centroid.java +++ b/src/main/java/com/rapidminer/operator/clustering/Centroid.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -59,6 +59,13 @@ public void assignExample(double[] exampleValues) { } } + public void assignMultipleExamples(double[] summedExampleValuesAndNumberOfExamples) { + numberOfAssigned = (int) summedExampleValuesAndNumberOfExamples[summedExampleValuesAndNumberOfExamples.length - 1]; + for (int i = 0; i < summedExampleValuesAndNumberOfExamples.length - 1; i++) { + centroidSum[i] += summedExampleValuesAndNumberOfExamples[i]; + } + } + public boolean finishAssign() { double[] newCentroid = new double[centroid.length]; boolean stable = true; diff --git a/src/main/java/com/rapidminer/operator/clustering/CentroidClusterModel.java b/src/main/java/com/rapidminer/operator/clustering/CentroidClusterModel.java index b8373fa7b..f7061d466 100644 --- a/src/main/java/com/rapidminer/operator/clustering/CentroidClusterModel.java +++ b/src/main/java/com/rapidminer/operator/clustering/CentroidClusterModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/Cluster.java b/src/main/java/com/rapidminer/operator/clustering/Cluster.java index 4e168ad72..e12212750 100644 --- a/src/main/java/com/rapidminer/operator/clustering/Cluster.java +++ b/src/main/java/com/rapidminer/operator/clustering/Cluster.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/ClusterModel.java b/src/main/java/com/rapidminer/operator/clustering/ClusterModel.java index 2f0ec03a0..0a2050e41 100644 --- a/src/main/java/com/rapidminer/operator/clustering/ClusterModel.java +++ b/src/main/java/com/rapidminer/operator/clustering/ClusterModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -27,6 +27,7 @@ import com.rapidminer.example.ExampleSet; import com.rapidminer.example.set.ConditionedExampleSet; import com.rapidminer.example.set.NoMissingAttributeValueCondition; +import com.rapidminer.example.set.RemappedExampleSet; import com.rapidminer.example.table.AttributeFactory; import com.rapidminer.example.table.NominalMapping; import com.rapidminer.operator.AbstractModel; @@ -75,13 +76,14 @@ public ClusterModel(ExampleSet exampleSet, int k, boolean addClusterAsLabel, boo @Override public ExampleSet apply(ExampleSet exampleSet) throws OperatorException { - exampleSet = (ExampleSet) exampleSet.clone(); OperatorProgress progress = null; if (getShowProgress() && getOperator() != null && getOperator().getProgress() != null) { progress = getOperator().getProgress(); progress.setTotal(100); } + exampleSet = RemappedExampleSet.create(exampleSet, getTrainingHeader(), false, true); + Attributes attributes = exampleSet.getAttributes(); // additional checks diff --git a/src/main/java/com/rapidminer/operator/clustering/ClusterModel2ExampleSet.java b/src/main/java/com/rapidminer/operator/clustering/ClusterModel2ExampleSet.java index 5f1c09f5d..dcca5170e 100644 --- a/src/main/java/com/rapidminer/operator/clustering/ClusterModel2ExampleSet.java +++ b/src/main/java/com/rapidminer/operator/clustering/ClusterModel2ExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/ClusterModelInterface.java b/src/main/java/com/rapidminer/operator/clustering/ClusterModelInterface.java index bf0b348c8..d45fb5f42 100644 --- a/src/main/java/com/rapidminer/operator/clustering/ClusterModelInterface.java +++ b/src/main/java/com/rapidminer/operator/clustering/ClusterModelInterface.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/ClusterToPrediction.java b/src/main/java/com/rapidminer/operator/clustering/ClusterToPrediction.java index e230f5fe8..13b6f9ec9 100644 --- a/src/main/java/com/rapidminer/operator/clustering/ClusterToPrediction.java +++ b/src/main/java/com/rapidminer/operator/clustering/ClusterToPrediction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/DendogramHierarchicalClusterModel.java b/src/main/java/com/rapidminer/operator/clustering/DendogramHierarchicalClusterModel.java index c2ef3d9f5..f2a9a6001 100644 --- a/src/main/java/com/rapidminer/operator/clustering/DendogramHierarchicalClusterModel.java +++ b/src/main/java/com/rapidminer/operator/clustering/DendogramHierarchicalClusterModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/ExtractClusterPrototypes.java b/src/main/java/com/rapidminer/operator/clustering/ExtractClusterPrototypes.java index 6e73cedcb..97595784a 100644 --- a/src/main/java/com/rapidminer/operator/clustering/ExtractClusterPrototypes.java +++ b/src/main/java/com/rapidminer/operator/clustering/ExtractClusterPrototypes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/FlatFuzzyClusterModel.java b/src/main/java/com/rapidminer/operator/clustering/FlatFuzzyClusterModel.java index 1cb744a1b..92fdc075c 100644 --- a/src/main/java/com/rapidminer/operator/clustering/FlatFuzzyClusterModel.java +++ b/src/main/java/com/rapidminer/operator/clustering/FlatFuzzyClusterModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/FlattenClusterModel.java b/src/main/java/com/rapidminer/operator/clustering/FlattenClusterModel.java index 646a9db65..3cfc5e764 100644 --- a/src/main/java/com/rapidminer/operator/clustering/FlattenClusterModel.java +++ b/src/main/java/com/rapidminer/operator/clustering/FlattenClusterModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterLeafNode.java b/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterLeafNode.java index f3f9ff05b..947752999 100644 --- a/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterLeafNode.java +++ b/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterLeafNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterModel.java b/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterModel.java index 07b3d9453..859190aa1 100644 --- a/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterModel.java +++ b/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterNode.java b/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterNode.java index 35d5342c3..badaf1703 100644 --- a/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterNode.java +++ b/src/main/java/com/rapidminer/operator/clustering/HierarchicalClusterNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/AbstractClusterer.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/AbstractClusterer.java index 1ce9f8d9a..9cc72ea09 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/AbstractClusterer.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/AbstractClusterer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/AbstractLinkageMethod.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/AbstractLinkageMethod.java index a8052ff0b..8e225d18d 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/AbstractLinkageMethod.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/AbstractLinkageMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/Agglomeration.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/Agglomeration.java index ee017e2c0..c02d41fbd 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/Agglomeration.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/Agglomeration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/AgglomerativeClustering.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/AgglomerativeClustering.java index 1e3c991df..323df236c 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/AgglomerativeClustering.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/AgglomerativeClustering.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/AverageLinkageMethod.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/AverageLinkageMethod.java index 9bffa3aed..040c884e3 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/AverageLinkageMethod.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/AverageLinkageMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/CompleteLinkageMethod.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/CompleteLinkageMethod.java index 615a97bb2..7c92023a4 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/CompleteLinkageMethod.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/CompleteLinkageMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/DBScan.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/DBScan.java index aee2d6614..97080c644 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/DBScan.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/DBScan.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/DistanceMatrix.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/DistanceMatrix.java index 45051c8d8..117c953e4 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/DistanceMatrix.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/DistanceMatrix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/ExampleSet2ClusterModel.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/ExampleSet2ClusterModel.java index c174a0a60..61c0bec8d 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/ExampleSet2ClusterModel.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/ExampleSet2ClusterModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/FastKMeans.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/FastKMeans.java index c15677fff..e117e6d0d 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/FastKMeans.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/FastKMeans.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/KMeans.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/KMeans.java index 76673f1f9..9fdfbb6e5 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/KMeans.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/KMeans.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -48,7 +48,9 @@ * attribute if not present yet. * * @author Sebastian Land + * @deprecated since 8.1, replaced by the KMeans in the Concurrency extension */ +@Deprecated public class KMeans extends RMAbstractClusterer { /** The parameter name for "the maximal number of clusters" */ diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/KMedoids.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/KMedoids.java index 11ec61112..79a904953 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/KMedoids.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/KMedoids.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/KernelKMeans.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/KernelKMeans.java index a9d7c2f48..9e220e79b 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/KernelKMeans.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/KernelKMeans.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/RMAbstractClusterer.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/RMAbstractClusterer.java index 25ed58dad..c69787091 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/RMAbstractClusterer.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/RMAbstractClusterer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/RandomClustering.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/RandomClustering.java index 35a7551cb..b6cd5836b 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/RandomClustering.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/RandomClustering.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/SVCExampleSet.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/SVCExampleSet.java index 0b119a255..ac9dffba1 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/SVCExampleSet.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/SVCExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/SVClustering.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/SVClustering.java index 99988ad90..3d24b23b2 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/SVClustering.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/SVClustering.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/SVClusteringAlgorithm.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/SVClusteringAlgorithm.java index 989f01e74..0116b6c39 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/SVClusteringAlgorithm.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/SVClusteringAlgorithm.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/SingleLinkageMethod.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/SingleLinkageMethod.java index a49097412..ba4c0743e 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/SingleLinkageMethod.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/SingleLinkageMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/TopDownClustering.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/TopDownClustering.java index e96233453..2da571266 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/TopDownClustering.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/TopDownClustering.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/XMeans.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/XMeans.java index 3ac2989d2..26d9406dc 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/XMeans.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/XMeans.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/clustering/clusterer/soft/EMClusterer.java b/src/main/java/com/rapidminer/operator/clustering/clusterer/soft/EMClusterer.java index 4c61dce4c..bb8a96cd8 100644 --- a/src/main/java/com/rapidminer/operator/clustering/clusterer/soft/EMClusterer.java +++ b/src/main/java/com/rapidminer/operator/clustering/clusterer/soft/EMClusterer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/collections/CollectionIterationOperator.java b/src/main/java/com/rapidminer/operator/collections/CollectionIterationOperator.java index 4a2fac923..a1ec95aef 100644 --- a/src/main/java/com/rapidminer/operator/collections/CollectionIterationOperator.java +++ b/src/main/java/com/rapidminer/operator/collections/CollectionIterationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/collections/CollectionOperator.java b/src/main/java/com/rapidminer/operator/collections/CollectionOperator.java index a533b948d..f80f23a30 100644 --- a/src/main/java/com/rapidminer/operator/collections/CollectionOperator.java +++ b/src/main/java/com/rapidminer/operator/collections/CollectionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/collections/SelectionOperator.java b/src/main/java/com/rapidminer/operator/collections/SelectionOperator.java index 91996545b..1d9a6abae 100644 --- a/src/main/java/com/rapidminer/operator/collections/SelectionOperator.java +++ b/src/main/java/com/rapidminer/operator/collections/SelectionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/collections/UnfoldOperator.java b/src/main/java/com/rapidminer/operator/collections/UnfoldOperator.java index bae28943f..b2cabdb02 100644 --- a/src/main/java/com/rapidminer/operator/collections/UnfoldOperator.java +++ b/src/main/java/com/rapidminer/operator/collections/UnfoldOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/concurrency/internal/ParallelOperatorChain.java b/src/main/java/com/rapidminer/operator/concurrency/internal/ParallelOperatorChain.java index aa39124d4..73a91e5c7 100644 --- a/src/main/java/com/rapidminer/operator/concurrency/internal/ParallelOperatorChain.java +++ b/src/main/java/com/rapidminer/operator/concurrency/internal/ParallelOperatorChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/condition/AllInnerOperatorCondition.java b/src/main/java/com/rapidminer/operator/condition/AllInnerOperatorCondition.java index 3485b6775..ad4dd6f78 100644 --- a/src/main/java/com/rapidminer/operator/condition/AllInnerOperatorCondition.java +++ b/src/main/java/com/rapidminer/operator/condition/AllInnerOperatorCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/condition/CombinedInnerOperatorCondition.java b/src/main/java/com/rapidminer/operator/condition/CombinedInnerOperatorCondition.java index 38fe2fe20..89c58b54c 100644 --- a/src/main/java/com/rapidminer/operator/condition/CombinedInnerOperatorCondition.java +++ b/src/main/java/com/rapidminer/operator/condition/CombinedInnerOperatorCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/condition/FirstInnerOperatorCondition.java b/src/main/java/com/rapidminer/operator/condition/FirstInnerOperatorCondition.java index 1f6e18a0e..0087af97d 100644 --- a/src/main/java/com/rapidminer/operator/condition/FirstInnerOperatorCondition.java +++ b/src/main/java/com/rapidminer/operator/condition/FirstInnerOperatorCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/condition/InnerOperatorCondition.java b/src/main/java/com/rapidminer/operator/condition/InnerOperatorCondition.java index 963787530..69160abd8 100644 --- a/src/main/java/com/rapidminer/operator/condition/InnerOperatorCondition.java +++ b/src/main/java/com/rapidminer/operator/condition/InnerOperatorCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/condition/LastInnerOperatorCondition.java b/src/main/java/com/rapidminer/operator/condition/LastInnerOperatorCondition.java index ad71b88ee..2db318f97 100644 --- a/src/main/java/com/rapidminer/operator/condition/LastInnerOperatorCondition.java +++ b/src/main/java/com/rapidminer/operator/condition/LastInnerOperatorCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/condition/SimpleChainInnerOperatorCondition.java b/src/main/java/com/rapidminer/operator/condition/SimpleChainInnerOperatorCondition.java index f8551450c..fed6c06d3 100644 --- a/src/main/java/com/rapidminer/operator/condition/SimpleChainInnerOperatorCondition.java +++ b/src/main/java/com/rapidminer/operator/condition/SimpleChainInnerOperatorCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/condition/SpecificInnerOperatorCondition.java b/src/main/java/com/rapidminer/operator/condition/SpecificInnerOperatorCondition.java index a6e732e67..3d7461382 100644 --- a/src/main/java/com/rapidminer/operator/condition/SpecificInnerOperatorCondition.java +++ b/src/main/java/com/rapidminer/operator/condition/SpecificInnerOperatorCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/error/AttributeNotFoundError.java b/src/main/java/com/rapidminer/operator/error/AttributeNotFoundError.java index 2460a68ca..e05fc5dfb 100644 --- a/src/main/java/com/rapidminer/operator/error/AttributeNotFoundError.java +++ b/src/main/java/com/rapidminer/operator/error/AttributeNotFoundError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/error/AttributeWrongTypeError.java b/src/main/java/com/rapidminer/operator/error/AttributeWrongTypeError.java index 5a1852d82..dacd882c0 100644 --- a/src/main/java/com/rapidminer/operator/error/AttributeWrongTypeError.java +++ b/src/main/java/com/rapidminer/operator/error/AttributeWrongTypeError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/error/ParameterError.java b/src/main/java/com/rapidminer/operator/error/ParameterError.java index 00ce468af..6f984a7be 100644 --- a/src/main/java/com/rapidminer/operator/error/ParameterError.java +++ b/src/main/java/com/rapidminer/operator/error/ParameterError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/error/ProcessExecutionOperatorExceptionError.java b/src/main/java/com/rapidminer/operator/error/ProcessExecutionOperatorExceptionError.java index e01998a74..4d87acb36 100644 --- a/src/main/java/com/rapidminer/operator/error/ProcessExecutionOperatorExceptionError.java +++ b/src/main/java/com/rapidminer/operator/error/ProcessExecutionOperatorExceptionError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/error/ProcessExecutionUserErrorError.java b/src/main/java/com/rapidminer/operator/error/ProcessExecutionUserErrorError.java index 81bec5c55..4c2797e8a 100644 --- a/src/main/java/com/rapidminer/operator/error/ProcessExecutionUserErrorError.java +++ b/src/main/java/com/rapidminer/operator/error/ProcessExecutionUserErrorError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/execution/FlowCleaner.java b/src/main/java/com/rapidminer/operator/execution/FlowCleaner.java index 0eef6ff59..30f76f5dc 100644 --- a/src/main/java/com/rapidminer/operator/execution/FlowCleaner.java +++ b/src/main/java/com/rapidminer/operator/execution/FlowCleaner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/execution/FlowData.java b/src/main/java/com/rapidminer/operator/execution/FlowData.java index a1fa00e73..47f6e14b9 100644 --- a/src/main/java/com/rapidminer/operator/execution/FlowData.java +++ b/src/main/java/com/rapidminer/operator/execution/FlowData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/execution/ProcessFlowFilter.java b/src/main/java/com/rapidminer/operator/execution/ProcessFlowFilter.java index ccd8daedf..e5ffd11a4 100644 --- a/src/main/java/com/rapidminer/operator/execution/ProcessFlowFilter.java +++ b/src/main/java/com/rapidminer/operator/execution/ProcessFlowFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/execution/SimpleUnitExecutionFactory.java b/src/main/java/com/rapidminer/operator/execution/SimpleUnitExecutionFactory.java index e81cd0d86..353a3f75b 100644 --- a/src/main/java/com/rapidminer/operator/execution/SimpleUnitExecutionFactory.java +++ b/src/main/java/com/rapidminer/operator/execution/SimpleUnitExecutionFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/execution/SimpleUnitExecutor.java b/src/main/java/com/rapidminer/operator/execution/SimpleUnitExecutor.java index 396df37ad..8a3ac1c45 100644 --- a/src/main/java/com/rapidminer/operator/execution/SimpleUnitExecutor.java +++ b/src/main/java/com/rapidminer/operator/execution/SimpleUnitExecutor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/execution/UnitExecutionFactory.java b/src/main/java/com/rapidminer/operator/execution/UnitExecutionFactory.java index d426df236..867b181ef 100644 --- a/src/main/java/com/rapidminer/operator/execution/UnitExecutionFactory.java +++ b/src/main/java/com/rapidminer/operator/execution/UnitExecutionFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/execution/UnitExecutor.java b/src/main/java/com/rapidminer/operator/execution/UnitExecutor.java index e79d460d1..01010120f 100644 --- a/src/main/java/com/rapidminer/operator/execution/UnitExecutor.java +++ b/src/main/java/com/rapidminer/operator/execution/UnitExecutor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/AbstractFeatureProcessing.java b/src/main/java/com/rapidminer/operator/features/AbstractFeatureProcessing.java index 8c86665af..b4fdcf96a 100644 --- a/src/main/java/com/rapidminer/operator/features/AbstractFeatureProcessing.java +++ b/src/main/java/com/rapidminer/operator/features/AbstractFeatureProcessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/AttributeWeightsApplier.java b/src/main/java/com/rapidminer/operator/features/AttributeWeightsApplier.java index afcc180ca..e551ba8b6 100644 --- a/src/main/java/com/rapidminer/operator/features/AttributeWeightsApplier.java +++ b/src/main/java/com/rapidminer/operator/features/AttributeWeightsApplier.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/FeatureOperator.java b/src/main/java/com/rapidminer/operator/features/FeatureOperator.java index f714558df..46a350507 100644 --- a/src/main/java/com/rapidminer/operator/features/FeatureOperator.java +++ b/src/main/java/com/rapidminer/operator/features/FeatureOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/Individual.java b/src/main/java/com/rapidminer/operator/features/Individual.java index 6f17e06fd..09b67c414 100644 --- a/src/main/java/com/rapidminer/operator/features/Individual.java +++ b/src/main/java/com/rapidminer/operator/features/Individual.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/IndividualOperator.java b/src/main/java/com/rapidminer/operator/features/IndividualOperator.java index 3b0411a71..8b6fb7f91 100644 --- a/src/main/java/com/rapidminer/operator/features/IndividualOperator.java +++ b/src/main/java/com/rapidminer/operator/features/IndividualOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/KeepBest.java b/src/main/java/com/rapidminer/operator/features/KeepBest.java index 13bf489be..a805f41e8 100644 --- a/src/main/java/com/rapidminer/operator/features/KeepBest.java +++ b/src/main/java/com/rapidminer/operator/features/KeepBest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/Population.java b/src/main/java/com/rapidminer/operator/features/Population.java index 89fa102dd..48806c579 100644 --- a/src/main/java/com/rapidminer/operator/features/Population.java +++ b/src/main/java/com/rapidminer/operator/features/Population.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/PopulationEvaluator.java b/src/main/java/com/rapidminer/operator/features/PopulationEvaluator.java index a0be343e6..9f7803205 100644 --- a/src/main/java/com/rapidminer/operator/features/PopulationEvaluator.java +++ b/src/main/java/com/rapidminer/operator/features/PopulationEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/PopulationOperator.java b/src/main/java/com/rapidminer/operator/features/PopulationOperator.java index f73daa9b7..9e9604632 100644 --- a/src/main/java/com/rapidminer/operator/features/PopulationOperator.java +++ b/src/main/java/com/rapidminer/operator/features/PopulationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/PopulationPlotter.java b/src/main/java/com/rapidminer/operator/features/PopulationPlotter.java index 9b06e40e8..f49ddc207 100644 --- a/src/main/java/com/rapidminer/operator/features/PopulationPlotter.java +++ b/src/main/java/com/rapidminer/operator/features/PopulationPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/RedundanceRemoval.java b/src/main/java/com/rapidminer/operator/features/RedundanceRemoval.java index e69e6ae7e..05e7e0276 100644 --- a/src/main/java/com/rapidminer/operator/features/RedundanceRemoval.java +++ b/src/main/java/com/rapidminer/operator/features/RedundanceRemoval.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/SimplePopulationEvaluator.java b/src/main/java/com/rapidminer/operator/features/SimplePopulationEvaluator.java index 1a757afce..33babb546 100644 --- a/src/main/java/com/rapidminer/operator/features/SimplePopulationEvaluator.java +++ b/src/main/java/com/rapidminer/operator/features/SimplePopulationEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationCrossover.java b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationCrossover.java index 9e1f7fc82..6db761bf4 100644 --- a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationCrossover.java +++ b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationCrossover.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationIndividual.java b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationIndividual.java index 1582ef94e..66f05176b 100644 --- a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationIndividual.java +++ b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationIndividual.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationMutation.java b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationMutation.java index 7ce95e14c..0a82ef17a 100644 --- a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationMutation.java +++ b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationMutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationNonDominatedSortingSelection.java b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationNonDominatedSortingSelection.java index 49cf42a2a..c8e6fee1a 100644 --- a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationNonDominatedSortingSelection.java +++ b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationNonDominatedSortingSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationSelection.java b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationSelection.java index 41257dd1e..a3c06db1f 100644 --- a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationSelection.java +++ b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationTournamentSelection.java b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationTournamentSelection.java index 299d678a5..e7ad2b6e2 100644 --- a/src/main/java/com/rapidminer/operator/features/aggregation/AggregationTournamentSelection.java +++ b/src/main/java/com/rapidminer/operator/features/aggregation/AggregationTournamentSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/aggregation/EvolutionaryFeatureAggregation.java b/src/main/java/com/rapidminer/operator/features/aggregation/EvolutionaryFeatureAggregation.java index 0fe5514e8..901576f45 100644 --- a/src/main/java/com/rapidminer/operator/features/aggregation/EvolutionaryFeatureAggregation.java +++ b/src/main/java/com/rapidminer/operator/features/aggregation/EvolutionaryFeatureAggregation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/AGA.java b/src/main/java/com/rapidminer/operator/features/construction/AGA.java index ab2181cfa..53cadaf20 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/AGA.java +++ b/src/main/java/com/rapidminer/operator/features/construction/AGA.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/AbstractFeatureConstruction.java b/src/main/java/com/rapidminer/operator/features/construction/AbstractFeatureConstruction.java index c42eff497..7cbcab6de 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/AbstractFeatureConstruction.java +++ b/src/main/java/com/rapidminer/operator/features/construction/AbstractFeatureConstruction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/AbstractGeneratingGeneticAlgorithm.java b/src/main/java/com/rapidminer/operator/features/construction/AbstractGeneratingGeneticAlgorithm.java index dd89289de..64690098a 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/AbstractGeneratingGeneticAlgorithm.java +++ b/src/main/java/com/rapidminer/operator/features/construction/AbstractGeneratingGeneticAlgorithm.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/AttributeAggregationOperator.java b/src/main/java/com/rapidminer/operator/features/construction/AttributeAggregationOperator.java index 532ce1b50..c518529a0 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/AttributeAggregationOperator.java +++ b/src/main/java/com/rapidminer/operator/features/construction/AttributeAggregationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/AttributeConstruction.java b/src/main/java/com/rapidminer/operator/features/construction/AttributeConstruction.java index a83c54787..b519ce5ff 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/AttributeConstruction.java +++ b/src/main/java/com/rapidminer/operator/features/construction/AttributeConstruction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/AttributeGenerator.java b/src/main/java/com/rapidminer/operator/features/construction/AttributeGenerator.java index 754c33849..805d3d53f 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/AttributeGenerator.java +++ b/src/main/java/com/rapidminer/operator/features/construction/AttributeGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/CompleteFeatureGenerationOperator.java b/src/main/java/com/rapidminer/operator/features/construction/CompleteFeatureGenerationOperator.java index c6f4c2143..d2820d12c 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/CompleteFeatureGenerationOperator.java +++ b/src/main/java/com/rapidminer/operator/features/construction/CompleteFeatureGenerationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ConditionedFeatureGeneration.java b/src/main/java/com/rapidminer/operator/features/construction/ConditionedFeatureGeneration.java index 65233a9c8..6cf1c790e 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ConditionedFeatureGeneration.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ConditionedFeatureGeneration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ConstantGeneration.java b/src/main/java/com/rapidminer/operator/features/construction/ConstantGeneration.java index 02d0b4112..e5e8bec8c 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ConstantGeneration.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ConstantGeneration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/DirectedGGA.java b/src/main/java/com/rapidminer/operator/features/construction/DirectedGGA.java index 7862c3d65..7fc27636b 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/DirectedGGA.java +++ b/src/main/java/com/rapidminer/operator/features/construction/DirectedGGA.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/DirectedGeneratingMutation.java b/src/main/java/com/rapidminer/operator/features/construction/DirectedGeneratingMutation.java index 2ea6b506a..763d32b66 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/DirectedGeneratingMutation.java +++ b/src/main/java/com/rapidminer/operator/features/construction/DirectedGeneratingMutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/EquivalentAttributeRemoval.java b/src/main/java/com/rapidminer/operator/features/construction/EquivalentAttributeRemoval.java index d7fa96ff1..0ed11aa2c 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/EquivalentAttributeRemoval.java +++ b/src/main/java/com/rapidminer/operator/features/construction/EquivalentAttributeRemoval.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedFeatureOperator.java b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedFeatureOperator.java index 217dcede5..d25f4054d 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedFeatureOperator.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedFeatureOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedIndividual.java b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedIndividual.java index 2a0f506a8..4ef01d2bd 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedIndividual.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedIndividual.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedIndividualOperator.java b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedIndividualOperator.java index e51c1548e..6d0e414ce 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedIndividualOperator.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedIndividualOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedPopulation.java b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedPopulation.java index b7b539343..09b1946af 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedPopulation.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedPopulation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedPopulationOperator.java b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedPopulationOperator.java index 5f99851db..74a9f3f52 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedPopulationOperator.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedPopulationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedSelectionCrossover.java b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedSelectionCrossover.java index d998405a5..7b6e25594 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedSelectionCrossover.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedSelectionCrossover.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedSelectionMutation.java b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedSelectionMutation.java index 0be48c0de..7533c4fc5 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedSelectionMutation.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedSelectionMutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedTournamentSelection.java b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedTournamentSelection.java index c1608bcc7..72ee7e4b7 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedTournamentSelection.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ExampleSetBasedTournamentSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/FourierGGA.java b/src/main/java/com/rapidminer/operator/features/construction/FourierGGA.java index baed55201..9b1b5575b 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/FourierGGA.java +++ b/src/main/java/com/rapidminer/operator/features/construction/FourierGGA.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/FourierGeneratingMutation.java b/src/main/java/com/rapidminer/operator/features/construction/FourierGeneratingMutation.java index 80649fff1..530baed74 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/FourierGeneratingMutation.java +++ b/src/main/java/com/rapidminer/operator/features/construction/FourierGeneratingMutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/FourierGenerator.java b/src/main/java/com/rapidminer/operator/features/construction/FourierGenerator.java index 203a0a9c4..dcb8f506c 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/FourierGenerator.java +++ b/src/main/java/com/rapidminer/operator/features/construction/FourierGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/GaussFeatureConstructionOperator.java b/src/main/java/com/rapidminer/operator/features/construction/GaussFeatureConstructionOperator.java index 8e56c4d62..e8738cedc 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/GaussFeatureConstructionOperator.java +++ b/src/main/java/com/rapidminer/operator/features/construction/GaussFeatureConstructionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/GeneratingGeneticAlgorithm.java b/src/main/java/com/rapidminer/operator/features/construction/GeneratingGeneticAlgorithm.java index 0d34af5fe..8439348fc 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/GeneratingGeneticAlgorithm.java +++ b/src/main/java/com/rapidminer/operator/features/construction/GeneratingGeneticAlgorithm.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/GeneratingMutation.java b/src/main/java/com/rapidminer/operator/features/construction/GeneratingMutation.java index f7b86199d..38ff13704 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/GeneratingMutation.java +++ b/src/main/java/com/rapidminer/operator/features/construction/GeneratingMutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/LinearCombinationOperator.java b/src/main/java/com/rapidminer/operator/features/construction/LinearCombinationOperator.java index 94d040478..d1408b408 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/LinearCombinationOperator.java +++ b/src/main/java/com/rapidminer/operator/features/construction/LinearCombinationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/ProductGenerationOperator.java b/src/main/java/com/rapidminer/operator/features/construction/ProductGenerationOperator.java index aab5c3418..69dceea57 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/ProductGenerationOperator.java +++ b/src/main/java/com/rapidminer/operator/features/construction/ProductGenerationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/RemoveUselessAttributes.java b/src/main/java/com/rapidminer/operator/features/construction/RemoveUselessAttributes.java index 83fa2e6ed..a3aa99861 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/RemoveUselessAttributes.java +++ b/src/main/java/com/rapidminer/operator/features/construction/RemoveUselessAttributes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/UnbalancedCrossover.java b/src/main/java/com/rapidminer/operator/features/construction/UnbalancedCrossover.java index 756d7e722..c29360594 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/UnbalancedCrossover.java +++ b/src/main/java/com/rapidminer/operator/features/construction/UnbalancedCrossover.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/YAGGA.java b/src/main/java/com/rapidminer/operator/features/construction/YAGGA.java index 091331293..b09a6825c 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/YAGGA.java +++ b/src/main/java/com/rapidminer/operator/features/construction/YAGGA.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/construction/YAGGA2.java b/src/main/java/com/rapidminer/operator/features/construction/YAGGA2.java index d7d4ef448..4690f691c 100644 --- a/src/main/java/com/rapidminer/operator/features/construction/YAGGA2.java +++ b/src/main/java/com/rapidminer/operator/features/construction/YAGGA2.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/AbstractFeatureSelection.java b/src/main/java/com/rapidminer/operator/features/selection/AbstractFeatureSelection.java index 95d351de1..174904a44 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/AbstractFeatureSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/AbstractFeatureSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/AbstractGeneticAlgorithm.java b/src/main/java/com/rapidminer/operator/features/selection/AbstractGeneticAlgorithm.java index a5658490f..96332f158 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/AbstractGeneticAlgorithm.java +++ b/src/main/java/com/rapidminer/operator/features/selection/AbstractGeneticAlgorithm.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/AttributeWeightSelection.java b/src/main/java/com/rapidminer/operator/features/selection/AttributeWeightSelection.java index 9ef8ec1ef..82dd4ddcb 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/AttributeWeightSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/AttributeWeightSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/BackwardAttributeEliminationOperator.java b/src/main/java/com/rapidminer/operator/features/selection/BackwardAttributeEliminationOperator.java index eca3cb4de..bbee37f66 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/BackwardAttributeEliminationOperator.java +++ b/src/main/java/com/rapidminer/operator/features/selection/BackwardAttributeEliminationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/BackwardElimination.java b/src/main/java/com/rapidminer/operator/features/selection/BackwardElimination.java index e92e5053c..548e13499 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/BackwardElimination.java +++ b/src/main/java/com/rapidminer/operator/features/selection/BackwardElimination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/BestSelection.java b/src/main/java/com/rapidminer/operator/features/selection/BestSelection.java index 2423fe5fd..42f85940a 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/BestSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/BestSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/BoltzmannSelection.java b/src/main/java/com/rapidminer/operator/features/selection/BoltzmannSelection.java index b503a4878..de868f8dd 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/BoltzmannSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/BoltzmannSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/BruteForceSelection.java b/src/main/java/com/rapidminer/operator/features/selection/BruteForceSelection.java index 7f0691224..fb5903745 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/BruteForceSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/BruteForceSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/CutSelection.java b/src/main/java/com/rapidminer/operator/features/selection/CutSelection.java index f7e3c5dc5..713bc78b1 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/CutSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/CutSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/FeatureSelectionOperator.java b/src/main/java/com/rapidminer/operator/features/selection/FeatureSelectionOperator.java index bf2c2c4a8..68fe5245a 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/FeatureSelectionOperator.java +++ b/src/main/java/com/rapidminer/operator/features/selection/FeatureSelectionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/ForwardAttributeSelectionOperator.java b/src/main/java/com/rapidminer/operator/features/selection/ForwardAttributeSelectionOperator.java index 2f5e9f301..654f15dec 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/ForwardAttributeSelectionOperator.java +++ b/src/main/java/com/rapidminer/operator/features/selection/ForwardAttributeSelectionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/ForwardSelection.java b/src/main/java/com/rapidminer/operator/features/selection/ForwardSelection.java index 612b8e211..034c29d4f 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/ForwardSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/ForwardSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/ForwardSelectionOperator.java b/src/main/java/com/rapidminer/operator/features/selection/ForwardSelectionOperator.java index a2b7e0970..16e85c7cd 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/ForwardSelectionOperator.java +++ b/src/main/java/com/rapidminer/operator/features/selection/ForwardSelectionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/GeneticAlgorithm.java b/src/main/java/com/rapidminer/operator/features/selection/GeneticAlgorithm.java index b16f1634f..e65c59346 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/GeneticAlgorithm.java +++ b/src/main/java/com/rapidminer/operator/features/selection/GeneticAlgorithm.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/IterativeFeatureAdding.java b/src/main/java/com/rapidminer/operator/features/selection/IterativeFeatureAdding.java index b350604fa..e9fc1f924 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/IterativeFeatureAdding.java +++ b/src/main/java/com/rapidminer/operator/features/selection/IterativeFeatureAdding.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/NonDominatedSortingSelection.java b/src/main/java/com/rapidminer/operator/features/selection/NonDominatedSortingSelection.java index a4626e697..6381f9589 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/NonDominatedSortingSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/NonDominatedSortingSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/RandomSelection.java b/src/main/java/com/rapidminer/operator/features/selection/RandomSelection.java index 0ec85a19e..590970d47 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/RandomSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/RandomSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/RankSelection.java b/src/main/java/com/rapidminer/operator/features/selection/RankSelection.java index dd19d4bfb..833cd915f 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/RankSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/RankSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/RemoveCorrelatedFeatures.java b/src/main/java/com/rapidminer/operator/features/selection/RemoveCorrelatedFeatures.java index a2e870d33..bd53727fb 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/RemoveCorrelatedFeatures.java +++ b/src/main/java/com/rapidminer/operator/features/selection/RemoveCorrelatedFeatures.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/RemoveUselessFeatures.java b/src/main/java/com/rapidminer/operator/features/selection/RemoveUselessFeatures.java index 677533f39..bb0ce724c 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/RemoveUselessFeatures.java +++ b/src/main/java/com/rapidminer/operator/features/selection/RemoveUselessFeatures.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/RouletteWheel.java b/src/main/java/com/rapidminer/operator/features/selection/RouletteWheel.java index c1495acf5..1c1ade05b 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/RouletteWheel.java +++ b/src/main/java/com/rapidminer/operator/features/selection/RouletteWheel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/SaveIntermediateWeights.java b/src/main/java/com/rapidminer/operator/features/selection/SaveIntermediateWeights.java index 9dccb8feb..34267f7f6 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/SaveIntermediateWeights.java +++ b/src/main/java/com/rapidminer/operator/features/selection/SaveIntermediateWeights.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/SelectionCrossover.java b/src/main/java/com/rapidminer/operator/features/selection/SelectionCrossover.java index 097d446d0..a0109bcd9 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/SelectionCrossover.java +++ b/src/main/java/com/rapidminer/operator/features/selection/SelectionCrossover.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/SelectionMutation.java b/src/main/java/com/rapidminer/operator/features/selection/SelectionMutation.java index 53f06c498..fa7df3b9a 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/SelectionMutation.java +++ b/src/main/java/com/rapidminer/operator/features/selection/SelectionMutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/StochasticUniversalSampling.java b/src/main/java/com/rapidminer/operator/features/selection/StochasticUniversalSampling.java index 74f5f9d49..5bc3dd134 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/StochasticUniversalSampling.java +++ b/src/main/java/com/rapidminer/operator/features/selection/StochasticUniversalSampling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/SwitchingForwardSelection.java b/src/main/java/com/rapidminer/operator/features/selection/SwitchingForwardSelection.java index e0f850c51..f68787c3c 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/SwitchingForwardSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/SwitchingForwardSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/TournamentSelection.java b/src/main/java/com/rapidminer/operator/features/selection/TournamentSelection.java index e45c858fb..beca957b5 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/TournamentSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/TournamentSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/UniformSelection.java b/src/main/java/com/rapidminer/operator/features/selection/UniformSelection.java index 115f1c6bb..08a537cc5 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/UniformSelection.java +++ b/src/main/java/com/rapidminer/operator/features/selection/UniformSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/selection/WeightGuidedSelectionOperator.java b/src/main/java/com/rapidminer/operator/features/selection/WeightGuidedSelectionOperator.java index 7521286e6..2586fbfcb 100644 --- a/src/main/java/com/rapidminer/operator/features/selection/WeightGuidedSelectionOperator.java +++ b/src/main/java/com/rapidminer/operator/features/selection/WeightGuidedSelectionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/AbstractEigenvectorModel.java b/src/main/java/com/rapidminer/operator/features/transformation/AbstractEigenvectorModel.java index c0b85be82..2b67100b0 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/AbstractEigenvectorModel.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/AbstractEigenvectorModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/AbstractFeatureTransformation.java b/src/main/java/com/rapidminer/operator/features/transformation/AbstractFeatureTransformation.java index f0b30823f..ecc6d7fdb 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/AbstractFeatureTransformation.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/AbstractFeatureTransformation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/ComponentVector.java b/src/main/java/com/rapidminer/operator/features/transformation/ComponentVector.java index 4fe60b386..a4ff3a78d 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/ComponentVector.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/ComponentVector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/ComponentWeightsCreatable.java b/src/main/java/com/rapidminer/operator/features/transformation/ComponentWeightsCreatable.java index c41ee7dff..7fcc675f8 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/ComponentWeightsCreatable.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/ComponentWeightsCreatable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/DimensionalityReducer.java b/src/main/java/com/rapidminer/operator/features/transformation/DimensionalityReducer.java index e8955f7d1..d4116e7c0 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/DimensionalityReducer.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/DimensionalityReducer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/DimensionalityReducerModel.java b/src/main/java/com/rapidminer/operator/features/transformation/DimensionalityReducerModel.java index ed8b14041..8a68f8b04 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/DimensionalityReducerModel.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/DimensionalityReducerModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/Eigenvector.java b/src/main/java/com/rapidminer/operator/features/transformation/Eigenvector.java index 1821e6cd4..f24c56fd9 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/Eigenvector.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/Eigenvector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/FastICA.java b/src/main/java/com/rapidminer/operator/features/transformation/FastICA.java index b57b98e09..7e08df549 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/FastICA.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/FastICA.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/FastICAModel.java b/src/main/java/com/rapidminer/operator/features/transformation/FastICAModel.java index 534149d53..40e7b5a40 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/FastICAModel.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/FastICAModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/FourierTransform.java b/src/main/java/com/rapidminer/operator/features/transformation/FourierTransform.java index cee61af77..400313cdc 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/FourierTransform.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/FourierTransform.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/GHA.java b/src/main/java/com/rapidminer/operator/features/transformation/GHA.java index bfd176177..244818f5c 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/GHA.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/GHA.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/GHAModel.java b/src/main/java/com/rapidminer/operator/features/transformation/GHAModel.java index 5357e4fe6..3043b5142 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/GHAModel.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/GHAModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/JamaDimensionalityReduction.java b/src/main/java/com/rapidminer/operator/features/transformation/JamaDimensionalityReduction.java index 5d878c07a..4f415d468 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/JamaDimensionalityReduction.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/JamaDimensionalityReduction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/KernelPCA.java b/src/main/java/com/rapidminer/operator/features/transformation/KernelPCA.java index 1482a1dfd..ab36bc2c2 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/KernelPCA.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/KernelPCA.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/KernelPCAModel.java b/src/main/java/com/rapidminer/operator/features/transformation/KernelPCAModel.java index c47bef949..89ed91d81 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/KernelPCAModel.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/KernelPCAModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/PCA.java b/src/main/java/com/rapidminer/operator/features/transformation/PCA.java index e2e4fe85d..302b71236 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/PCA.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/PCA.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/PCAModel.java b/src/main/java/com/rapidminer/operator/features/transformation/PCAModel.java index c062cd221..28b6240f8 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/PCAModel.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/PCAModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/SOMDimensionalityReduction.java b/src/main/java/com/rapidminer/operator/features/transformation/SOMDimensionalityReduction.java index d588fedce..e36b65660 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/SOMDimensionalityReduction.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/SOMDimensionalityReduction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/SOMDimensionalityReductionModel.java b/src/main/java/com/rapidminer/operator/features/transformation/SOMDimensionalityReductionModel.java index 875511382..4d46d5787 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/SOMDimensionalityReductionModel.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/SOMDimensionalityReductionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/SVDModel.java b/src/main/java/com/rapidminer/operator/features/transformation/SVDModel.java index 220fad8a9..34f92ff1d 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/SVDModel.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/SVDModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/SVDReduction.java b/src/main/java/com/rapidminer/operator/features/transformation/SVDReduction.java index ec5e94ad5..4dd30a123 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/SVDReduction.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/SVDReduction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/transformation/WeightVector.java b/src/main/java/com/rapidminer/operator/features/transformation/WeightVector.java index 13a0a83f5..c94bb5b63 100644 --- a/src/main/java/com/rapidminer/operator/features/transformation/WeightVector.java +++ b/src/main/java/com/rapidminer/operator/features/transformation/WeightVector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/AbstractEntropyWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/AbstractEntropyWeighting.java index 869e68762..531b44e32 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/AbstractEntropyWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/AbstractEntropyWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/AbstractWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/AbstractWeighting.java index 1415daae9..e3fa4ea31 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/AbstractWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/AbstractWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/AttributeWeights2ExampleSet.java b/src/main/java/com/rapidminer/operator/features/weighting/AttributeWeights2ExampleSet.java index bf07edebe..76f6c9b7d 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/AttributeWeights2ExampleSet.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/AttributeWeights2ExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/BackwardWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/BackwardWeighting.java index 3706a3501..d4e2d029a 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/BackwardWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/BackwardWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/ChiSquaredWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/ChiSquaredWeighting.java index 1da9a9308..03bdd49fb 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/ChiSquaredWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/ChiSquaredWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/ComponentWeights.java b/src/main/java/com/rapidminer/operator/features/weighting/ComponentWeights.java index a53a2e3cb..e9a120d01 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/ComponentWeights.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/ComponentWeights.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/CorpusBasedFeatureWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/CorpusBasedFeatureWeighting.java index 981a1c667..43f4e2262 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/CorpusBasedFeatureWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/CorpusBasedFeatureWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/CorrelationWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/CorrelationWeighting.java index c7a72239f..3ebcc8218 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/CorrelationWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/CorrelationWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/EvolutionaryWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/EvolutionaryWeighting.java index f25324d12..8a40177de 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/EvolutionaryWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/EvolutionaryWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/ExampleSet2AttributeWeights.java b/src/main/java/com/rapidminer/operator/features/weighting/ExampleSet2AttributeWeights.java index a3dee44a6..d6fa83806 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/ExampleSet2AttributeWeights.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/ExampleSet2AttributeWeights.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/FeatureWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/FeatureWeighting.java index 68120d943..9b7ca8848 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/FeatureWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/FeatureWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/ForestBasedWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/ForestBasedWeighting.java index f4bca1c6e..fe777bb54 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/ForestBasedWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/ForestBasedWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/ForwardWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/ForwardWeighting.java index 1e1ceedb9..096b7ec38 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/ForwardWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/ForwardWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/GiniWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/GiniWeighting.java index 6b75ec4e6..34db1918c 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/GiniWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/GiniWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/InfoGainRatioWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/InfoGainRatioWeighting.java index 9c37e8a03..22656c2bb 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/InfoGainRatioWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/InfoGainRatioWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/InfoGainWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/InfoGainWeighting.java index fc8aa1180..788845a5c 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/InfoGainWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/InfoGainWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/InteractiveAttributeWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/InteractiveAttributeWeighting.java index a3a836519..102396c01 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/InteractiveAttributeWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/InteractiveAttributeWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/NameBasedWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/NameBasedWeighting.java index 064624292..fcd4faac4 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/NameBasedWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/NameBasedWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/OneRErrorWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/OneRErrorWeighting.java index e3b42dc71..90fac902d 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/OneRErrorWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/OneRErrorWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/PCAWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/PCAWeighting.java index 570f0821f..fdd9b2718 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/PCAWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/PCAWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/PSOWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/PSOWeighting.java index dc467efd2..7d4bf2cd3 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/PSOWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/PSOWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/ProcessLog2AttributeWeights.java b/src/main/java/com/rapidminer/operator/features/weighting/ProcessLog2AttributeWeights.java index 90a0d1994..f654faf67 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/ProcessLog2AttributeWeights.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/ProcessLog2AttributeWeights.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/ReliefWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/ReliefWeighting.java index c247853df..a8b739d3c 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/ReliefWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/ReliefWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/SVMWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/SVMWeighting.java index ea02060bf..a29ca6fe7 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/SVMWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/SVMWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/SimpleWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/SimpleWeighting.java index 04b65ad05..e58fe035f 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/SimpleWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/SimpleWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/StandardDeviationWeighting.java b/src/main/java/com/rapidminer/operator/features/weighting/StandardDeviationWeighting.java index fe458ac1e..3ebbc2e76 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/StandardDeviationWeighting.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/StandardDeviationWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/SymmetricalUncertaintyOperator.java b/src/main/java/com/rapidminer/operator/features/weighting/SymmetricalUncertaintyOperator.java index 63330ea3a..fd5905609 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/SymmetricalUncertaintyOperator.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/SymmetricalUncertaintyOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/VarianceAdaption.java b/src/main/java/com/rapidminer/operator/features/weighting/VarianceAdaption.java index 7adb8ab61..29edf85bc 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/VarianceAdaption.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/VarianceAdaption.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/features/weighting/WeightingMutation.java b/src/main/java/com/rapidminer/operator/features/weighting/WeightingMutation.java index 86ef7c193..42b4d9b3a 100644 --- a/src/main/java/com/rapidminer/operator/features/weighting/WeightingMutation.java +++ b/src/main/java/com/rapidminer/operator/features/weighting/WeightingMutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/filesystem/CopyFileOperator.java b/src/main/java/com/rapidminer/operator/filesystem/CopyFileOperator.java index f58400970..bb4c18511 100644 --- a/src/main/java/com/rapidminer/operator/filesystem/CopyFileOperator.java +++ b/src/main/java/com/rapidminer/operator/filesystem/CopyFileOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/filesystem/CreateDirectoryOperator.java b/src/main/java/com/rapidminer/operator/filesystem/CreateDirectoryOperator.java index bc1457d50..9476f546f 100644 --- a/src/main/java/com/rapidminer/operator/filesystem/CreateDirectoryOperator.java +++ b/src/main/java/com/rapidminer/operator/filesystem/CreateDirectoryOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/filesystem/DeleteFileOperator.java b/src/main/java/com/rapidminer/operator/filesystem/DeleteFileOperator.java index 8443f220f..c080d5e97 100644 --- a/src/main/java/com/rapidminer/operator/filesystem/DeleteFileOperator.java +++ b/src/main/java/com/rapidminer/operator/filesystem/DeleteFileOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/filesystem/MoveFileOperator.java b/src/main/java/com/rapidminer/operator/filesystem/MoveFileOperator.java index 20e40c90b..c648e7bcf 100644 --- a/src/main/java/com/rapidminer/operator/filesystem/MoveFileOperator.java +++ b/src/main/java/com/rapidminer/operator/filesystem/MoveFileOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/filesystem/RenameFileOperator.java b/src/main/java/com/rapidminer/operator/filesystem/RenameFileOperator.java index 43eb8fa63..6140716ef 100644 --- a/src/main/java/com/rapidminer/operator/filesystem/RenameFileOperator.java +++ b/src/main/java/com/rapidminer/operator/filesystem/RenameFileOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/CheckerboardClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/CheckerboardClassificationFunction.java index ce8dd36b2..6e42646d2 100644 --- a/src/main/java/com/rapidminer/operator/generator/CheckerboardClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/CheckerboardClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/ChurnReductionExampleSetGenerator.java b/src/main/java/com/rapidminer/operator/generator/ChurnReductionExampleSetGenerator.java index 6651b526c..36bb5d08b 100644 --- a/src/main/java/com/rapidminer/operator/generator/ChurnReductionExampleSetGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/ChurnReductionExampleSetGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/ClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/ClassificationFunction.java index 78085b9cf..daffe19c0 100644 --- a/src/main/java/com/rapidminer/operator/generator/ClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/ClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/Cluster.java b/src/main/java/com/rapidminer/operator/generator/Cluster.java index 5182ee7ef..3ae399b13 100644 --- a/src/main/java/com/rapidminer/operator/generator/Cluster.java +++ b/src/main/java/com/rapidminer/operator/generator/Cluster.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/ClusterFunction.java b/src/main/java/com/rapidminer/operator/generator/ClusterFunction.java index d298d0ff0..1520503f5 100644 --- a/src/main/java/com/rapidminer/operator/generator/ClusterFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/ClusterFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/ComplicatedFunction.java b/src/main/java/com/rapidminer/operator/generator/ComplicatedFunction.java index 86e6f8331..b9e37505f 100644 --- a/src/main/java/com/rapidminer/operator/generator/ComplicatedFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/ComplicatedFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/ComplicatedFunction2.java b/src/main/java/com/rapidminer/operator/generator/ComplicatedFunction2.java index 8347410be..cb5fa9cbf 100644 --- a/src/main/java/com/rapidminer/operator/generator/ComplicatedFunction2.java +++ b/src/main/java/com/rapidminer/operator/generator/ComplicatedFunction2.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/DirectMailingExampleSetGenerator.java b/src/main/java/com/rapidminer/operator/generator/DirectMailingExampleSetGenerator.java index a9063e11a..fd952f57e 100644 --- a/src/main/java/com/rapidminer/operator/generator/DirectMailingExampleSetGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/DirectMailingExampleSetGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/Dot.java b/src/main/java/com/rapidminer/operator/generator/Dot.java index cd55a9dc2..8f8254042 100644 --- a/src/main/java/com/rapidminer/operator/generator/Dot.java +++ b/src/main/java/com/rapidminer/operator/generator/Dot.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/DrillerOscillationFunction.java b/src/main/java/com/rapidminer/operator/generator/DrillerOscillationFunction.java index 37ade451d..54428faec 100644 --- a/src/main/java/com/rapidminer/operator/generator/DrillerOscillationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/DrillerOscillationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/ExampleSetGenerator.java b/src/main/java/com/rapidminer/operator/generator/ExampleSetGenerator.java index a9e9b7aab..3cfc2c179 100644 --- a/src/main/java/com/rapidminer/operator/generator/ExampleSetGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/ExampleSetGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/GaussianFunction.java b/src/main/java/com/rapidminer/operator/generator/GaussianFunction.java index 36f817c0c..af5f91e7b 100644 --- a/src/main/java/com/rapidminer/operator/generator/GaussianFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/GaussianFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/GaussianMixtureFunction.java b/src/main/java/com/rapidminer/operator/generator/GaussianMixtureFunction.java index 9ef253186..946f3810c 100644 --- a/src/main/java/com/rapidminer/operator/generator/GaussianMixtureFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/GaussianMixtureFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/GlobalAndLocalPatternsFunction.java b/src/main/java/com/rapidminer/operator/generator/GlobalAndLocalPatternsFunction.java index a62442719..c10a02ce5 100644 --- a/src/main/java/com/rapidminer/operator/generator/GlobalAndLocalPatternsFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/GlobalAndLocalPatternsFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/GridFunction.java b/src/main/java/com/rapidminer/operator/generator/GridFunction.java index a9c402e43..eceaafbc6 100644 --- a/src/main/java/com/rapidminer/operator/generator/GridFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/GridFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/InteractionClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/InteractionClassificationFunction.java index 2e0eccc95..7e8bd6bc3 100644 --- a/src/main/java/com/rapidminer/operator/generator/InteractionClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/InteractionClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/MassiveDataGenerator.java b/src/main/java/com/rapidminer/operator/generator/MassiveDataGenerator.java index e14cd89fe..bbba6e7d4 100644 --- a/src/main/java/com/rapidminer/operator/generator/MassiveDataGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/MassiveDataGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/MultiClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/MultiClassificationFunction.java index c603b3b87..6aa3cbf49 100644 --- a/src/main/java/com/rapidminer/operator/generator/MultiClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/MultiClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/MultipleLabelGenerator.java b/src/main/java/com/rapidminer/operator/generator/MultipleLabelGenerator.java index c33abdf68..7536ffe2d 100644 --- a/src/main/java/com/rapidminer/operator/generator/MultipleLabelGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/MultipleLabelGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/NominalExampleSetGenerator.java b/src/main/java/com/rapidminer/operator/generator/NominalExampleSetGenerator.java index 6d2f49420..ddade941d 100644 --- a/src/main/java/com/rapidminer/operator/generator/NominalExampleSetGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/NominalExampleSetGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/NonLinearFunction.java b/src/main/java/com/rapidminer/operator/generator/NonLinearFunction.java index 955341c5d..62180120b 100644 --- a/src/main/java/com/rapidminer/operator/generator/NonLinearFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/NonLinearFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/OneThirdClassification.java b/src/main/java/com/rapidminer/operator/generator/OneThirdClassification.java index 9424e04d3..41fffa4d7 100644 --- a/src/main/java/com/rapidminer/operator/generator/OneThirdClassification.java +++ b/src/main/java/com/rapidminer/operator/generator/OneThirdClassification.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/OneVariableNonLinearFunction.java b/src/main/java/com/rapidminer/operator/generator/OneVariableNonLinearFunction.java index fd8f1cf85..7d2cd75e7 100644 --- a/src/main/java/com/rapidminer/operator/generator/OneVariableNonLinearFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/OneVariableNonLinearFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/PolynomialClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/PolynomialClassificationFunction.java index 26c9a4f48..ddb3379c7 100644 --- a/src/main/java/com/rapidminer/operator/generator/PolynomialClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/PolynomialClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/PolynomialFunction.java b/src/main/java/com/rapidminer/operator/generator/PolynomialFunction.java index 57a1ec4f5..6b94fd1f2 100644 --- a/src/main/java/com/rapidminer/operator/generator/PolynomialFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/PolynomialFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/QuadraticClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/QuadraticClassificationFunction.java index 3cd47fada..7bfce7508 100644 --- a/src/main/java/com/rapidminer/operator/generator/QuadraticClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/QuadraticClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/RandomClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/RandomClassificationFunction.java index da66e098d..311378886 100644 --- a/src/main/java/com/rapidminer/operator/generator/RandomClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/RandomClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/RandomDotsClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/RandomDotsClassificationFunction.java index 9b2310ca1..8ed96c8fc 100644 --- a/src/main/java/com/rapidminer/operator/generator/RandomDotsClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/RandomDotsClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/RandomFunction.java b/src/main/java/com/rapidminer/operator/generator/RandomFunction.java index 4562e55ce..b197cdaf7 100644 --- a/src/main/java/com/rapidminer/operator/generator/RandomFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/RandomFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/RegressionFunction.java b/src/main/java/com/rapidminer/operator/generator/RegressionFunction.java index c7c9cc6a2..0d204072c 100644 --- a/src/main/java/com/rapidminer/operator/generator/RegressionFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/RegressionFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/RingClusteringFunction.java b/src/main/java/com/rapidminer/operator/generator/RingClusteringFunction.java index 517cda290..a02e0fd93 100644 --- a/src/main/java/com/rapidminer/operator/generator/RingClusteringFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/RingClusteringFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SalesExampleSetGenerator.java b/src/main/java/com/rapidminer/operator/generator/SalesExampleSetGenerator.java index 295646758..439eb7892 100644 --- a/src/main/java/com/rapidminer/operator/generator/SalesExampleSetGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/SalesExampleSetGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SimpleNonLinearClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/SimpleNonLinearClassificationFunction.java index 799a30669..614984ae3 100644 --- a/src/main/java/com/rapidminer/operator/generator/SimpleNonLinearClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SimpleNonLinearClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SimplePolynomialClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/SimplePolynomialClassificationFunction.java index 0ddb9f317..0b85ff8b3 100644 --- a/src/main/java/com/rapidminer/operator/generator/SimplePolynomialClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SimplePolynomialClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SimpleSinusFunction.java b/src/main/java/com/rapidminer/operator/generator/SimpleSinusFunction.java index 5f51aa9df..0657de6d0 100644 --- a/src/main/java/com/rapidminer/operator/generator/SimpleSinusFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SimpleSinusFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SimpleSuperpositionFunction.java b/src/main/java/com/rapidminer/operator/generator/SimpleSuperpositionFunction.java index 504a86fff..76c1e43d9 100644 --- a/src/main/java/com/rapidminer/operator/generator/SimpleSuperpositionFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SimpleSuperpositionFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SincFunction.java b/src/main/java/com/rapidminer/operator/generator/SincFunction.java index 8c1fe7c8a..7153f4192 100644 --- a/src/main/java/com/rapidminer/operator/generator/SincFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SincFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SinusClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/SinusClassificationFunction.java index 31cfeb2a7..603f54544 100644 --- a/src/main/java/com/rapidminer/operator/generator/SinusClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SinusClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SinusFrequencyFunction.java b/src/main/java/com/rapidminer/operator/generator/SinusFrequencyFunction.java index 100ed7b51..f05b379af 100644 --- a/src/main/java/com/rapidminer/operator/generator/SinusFrequencyFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SinusFrequencyFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SinusFunction.java b/src/main/java/com/rapidminer/operator/generator/SinusFunction.java index 51262f0a4..2fd3ee17c 100644 --- a/src/main/java/com/rapidminer/operator/generator/SinusFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SinusFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SinusWithTrendFunction.java b/src/main/java/com/rapidminer/operator/generator/SinusWithTrendFunction.java index ca0ee3333..d730e09ae 100644 --- a/src/main/java/com/rapidminer/operator/generator/SinusWithTrendFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SinusWithTrendFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SpiralClusteringFunction.java b/src/main/java/com/rapidminer/operator/generator/SpiralClusteringFunction.java index be9926978..7ff08da0a 100644 --- a/src/main/java/com/rapidminer/operator/generator/SpiralClusteringFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SpiralClusteringFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SquarePulseFunction.java b/src/main/java/com/rapidminer/operator/generator/SquarePulseFunction.java index 5ebad8227..ee918dca0 100644 --- a/src/main/java/com/rapidminer/operator/generator/SquarePulseFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SquarePulseFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SumClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/SumClassificationFunction.java index 632b4e577..09669ed70 100644 --- a/src/main/java/com/rapidminer/operator/generator/SumClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SumClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/SumFunction.java b/src/main/java/com/rapidminer/operator/generator/SumFunction.java index 6f72ec5bd..90c7ad840 100644 --- a/src/main/java/com/rapidminer/operator/generator/SumFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/SumFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/TargetFunction.java b/src/main/java/com/rapidminer/operator/generator/TargetFunction.java index 8027c84b8..da48289cb 100644 --- a/src/main/java/com/rapidminer/operator/generator/TargetFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/TargetFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/TeamProfitExampleSetGenerator.java b/src/main/java/com/rapidminer/operator/generator/TeamProfitExampleSetGenerator.java index d870112f0..e165097e1 100644 --- a/src/main/java/com/rapidminer/operator/generator/TeamProfitExampleSetGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/TeamProfitExampleSetGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/TransactionClustersExampleSetGenerator.java b/src/main/java/com/rapidminer/operator/generator/TransactionClustersExampleSetGenerator.java index eee744f35..8abf0694d 100644 --- a/src/main/java/com/rapidminer/operator/generator/TransactionClustersExampleSetGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/TransactionClustersExampleSetGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/TransactionDatasetFunction.java b/src/main/java/com/rapidminer/operator/generator/TransactionDatasetFunction.java index bd8756527..7e823bd1c 100644 --- a/src/main/java/com/rapidminer/operator/generator/TransactionDatasetFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/TransactionDatasetFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/TransfersExampleSetGenerator.java b/src/main/java/com/rapidminer/operator/generator/TransfersExampleSetGenerator.java index 87db2fb0c..e1b3dfa68 100644 --- a/src/main/java/com/rapidminer/operator/generator/TransfersExampleSetGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/TransfersExampleSetGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/TriangularFunction.java b/src/main/java/com/rapidminer/operator/generator/TriangularFunction.java index 00ae1ccbc..5e22ee529 100644 --- a/src/main/java/com/rapidminer/operator/generator/TriangularFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/TriangularFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/TwoGaussiansClassificationFunction.java b/src/main/java/com/rapidminer/operator/generator/TwoGaussiansClassificationFunction.java index 13881ae28..f3d912ec1 100644 --- a/src/main/java/com/rapidminer/operator/generator/TwoGaussiansClassificationFunction.java +++ b/src/main/java/com/rapidminer/operator/generator/TwoGaussiansClassificationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/UpSellingExampleSetGenerator.java b/src/main/java/com/rapidminer/operator/generator/UpSellingExampleSetGenerator.java index 9ba9fef88..97103fff4 100644 --- a/src/main/java/com/rapidminer/operator/generator/UpSellingExampleSetGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/UpSellingExampleSetGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/generator/UserSpecificationDataGenerator.java b/src/main/java/com/rapidminer/operator/generator/UserSpecificationDataGenerator.java index 04408c943..e31144c18 100644 --- a/src/main/java/com/rapidminer/operator/generator/UserSpecificationDataGenerator.java +++ b/src/main/java/com/rapidminer/operator/generator/UserSpecificationDataGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/internal/ProcessEmbeddingOperator.java b/src/main/java/com/rapidminer/operator/internal/ProcessEmbeddingOperator.java index 51003cea2..b8119f00c 100644 --- a/src/main/java/com/rapidminer/operator/internal/ProcessEmbeddingOperator.java +++ b/src/main/java/com/rapidminer/operator/internal/ProcessEmbeddingOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/AbstractDataReader.java b/src/main/java/com/rapidminer/operator/io/AbstractDataReader.java index 48825918a..6aa8abfa3 100644 --- a/src/main/java/com/rapidminer/operator/io/AbstractDataReader.java +++ b/src/main/java/com/rapidminer/operator/io/AbstractDataReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/AbstractExampleSetWriter.java b/src/main/java/com/rapidminer/operator/io/AbstractExampleSetWriter.java index 9cb9e9309..3713a1a7a 100644 --- a/src/main/java/com/rapidminer/operator/io/AbstractExampleSetWriter.java +++ b/src/main/java/com/rapidminer/operator/io/AbstractExampleSetWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/AbstractExampleSource.java b/src/main/java/com/rapidminer/operator/io/AbstractExampleSource.java index 53069385d..47f535e49 100644 --- a/src/main/java/com/rapidminer/operator/io/AbstractExampleSource.java +++ b/src/main/java/com/rapidminer/operator/io/AbstractExampleSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/AbstractModelLoader.java b/src/main/java/com/rapidminer/operator/io/AbstractModelLoader.java index 404cb736e..ced1545f2 100644 --- a/src/main/java/com/rapidminer/operator/io/AbstractModelLoader.java +++ b/src/main/java/com/rapidminer/operator/io/AbstractModelLoader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/AbstractReader.java b/src/main/java/com/rapidminer/operator/io/AbstractReader.java index 2a6ae8c92..f07aebb09 100644 --- a/src/main/java/com/rapidminer/operator/io/AbstractReader.java +++ b/src/main/java/com/rapidminer/operator/io/AbstractReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/AbstractStreamWriter.java b/src/main/java/com/rapidminer/operator/io/AbstractStreamWriter.java index 575a9b74d..15dd53937 100644 --- a/src/main/java/com/rapidminer/operator/io/AbstractStreamWriter.java +++ b/src/main/java/com/rapidminer/operator/io/AbstractStreamWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/AbstractWriter.java b/src/main/java/com/rapidminer/operator/io/AbstractWriter.java index e24fe26e4..f0e903a94 100644 --- a/src/main/java/com/rapidminer/operator/io/AbstractWriter.java +++ b/src/main/java/com/rapidminer/operator/io/AbstractWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/AppendingExampleSetWriter.java b/src/main/java/com/rapidminer/operator/io/AppendingExampleSetWriter.java index e3e1a76b6..bb12ca273 100644 --- a/src/main/java/com/rapidminer/operator/io/AppendingExampleSetWriter.java +++ b/src/main/java/com/rapidminer/operator/io/AppendingExampleSetWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/BytewiseExampleSource.java b/src/main/java/com/rapidminer/operator/io/BytewiseExampleSource.java index b546e7bd0..5a8d1112f 100644 --- a/src/main/java/com/rapidminer/operator/io/BytewiseExampleSource.java +++ b/src/main/java/com/rapidminer/operator/io/BytewiseExampleSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/CSVExampleSetWriter.java b/src/main/java/com/rapidminer/operator/io/CSVExampleSetWriter.java index dcb0b0033..f771f2b55 100644 --- a/src/main/java/com/rapidminer/operator/io/CSVExampleSetWriter.java +++ b/src/main/java/com/rapidminer/operator/io/CSVExampleSetWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/CSVExampleSource.java b/src/main/java/com/rapidminer/operator/io/CSVExampleSource.java index fa9e97f71..f96664f17 100644 --- a/src/main/java/com/rapidminer/operator/io/CSVExampleSource.java +++ b/src/main/java/com/rapidminer/operator/io/CSVExampleSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/ExampleSetWriter.java b/src/main/java/com/rapidminer/operator/io/ExampleSetWriter.java index a9a886c71..423ccbfc8 100644 --- a/src/main/java/com/rapidminer/operator/io/ExampleSetWriter.java +++ b/src/main/java/com/rapidminer/operator/io/ExampleSetWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/ExampleSource.java b/src/main/java/com/rapidminer/operator/io/ExampleSource.java index 91153cf53..71b5488f6 100644 --- a/src/main/java/com/rapidminer/operator/io/ExampleSource.java +++ b/src/main/java/com/rapidminer/operator/io/ExampleSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -24,8 +24,6 @@ import java.util.List; import java.util.Map; -import javax.xml.parsers.ParserConfigurationException; - import org.xml.sax.SAXException; import com.rapidminer.example.Attribute; @@ -52,6 +50,8 @@ import com.rapidminer.parameter.ParameterTypeString; import com.rapidminer.parameter.conditions.BooleanParameterCondition; import com.rapidminer.tools.RandomGenerator; +import com.rapidminer.tools.XMLException; +import com.rapidminer.tools.XMLParserException; import com.rapidminer.tools.att.AttributeDataSource; import com.rapidminer.tools.att.AttributeDataSources; import com.rapidminer.tools.att.AttributeSet; @@ -178,12 +178,10 @@ public MetaData getGeneratedMetaData() throws OperatorException { AttributeDataSources attributeDataSources; try { attributeDataSources = AttributeDataSource.createAttributeDataSources(attributeFile, true, this); + } catch (XMLParserException | XMLException e) { + throw new UserError(this, e, 401, e.getMessage()); } catch (IOException e) { throw new UserError(this, e, 302, new Object[] { attributeFile, e.getMessage() }); - } catch (com.rapidminer.tools.XMLException e) { - throw new UserError(this, e, 401, e.getMessage()); - } catch (ParserConfigurationException e) { - throw new UserError(this, e, 401, e.toString()); } catch (SAXException e) { throw new UserError(this, e, 401, e.toString()); } @@ -235,12 +233,10 @@ commentCharacters, getParameterAsBoolean(PARAMETER_USE_QUOTES), RandomGenerator.getRandomGenerator( getParameterAsBoolean(RandomGenerator.PARAMETER_USE_LOCAL_RANDOM_SEED), getParameterAsInt(RandomGenerator.PARAMETER_LOCAL_RANDOM_SEED))); + } catch (XMLParserException | XMLException e) { + throw new UserError(this, e, 401, e.getMessage()); } catch (IOException e) { throw new UserError(this, e, 302, new Object[] { attributeFile, e.getMessage() }); - } catch (com.rapidminer.tools.XMLException e) { - throw new UserError(this, e, 401, e.getMessage()); - } catch (ParserConfigurationException e) { - throw new UserError(this, e, 401, e.toString()); } catch (SAXException e) { throw new UserError(this, e, 401, e.toString()); } diff --git a/src/main/java/com/rapidminer/operator/io/ExcelExampleSetWriter.java b/src/main/java/com/rapidminer/operator/io/ExcelExampleSetWriter.java index 0a3da5d7a..9e72ea2ea 100644 --- a/src/main/java/com/rapidminer/operator/io/ExcelExampleSetWriter.java +++ b/src/main/java/com/rapidminer/operator/io/ExcelExampleSetWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -419,7 +419,7 @@ private static void writeXLSXDataSheet(SXSSFWorkbook wb, Sheet sheet, String dat ExampleSet exampleSet, Operator op) throws WriteException, ProcessStoppedException { Font headerFont = wb.createFont(); - headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD); + headerFont.setBold(true); CellStyle headerStyle = wb.createCellStyle(); headerStyle.setFont(headerFont); @@ -440,7 +440,7 @@ private static void writeXLSXDataSheet(SXSSFWorkbook wb, Sheet sheet, String dat // body font Font bodyFont = wb.createFont(); - bodyFont.setBoldweight(Font.BOLDWEIGHT_NORMAL); + bodyFont.setBold(false); CreationHelper createHelper = wb.getCreationHelper(); diff --git a/src/main/java/com/rapidminer/operator/io/IOContainerReader.java b/src/main/java/com/rapidminer/operator/io/IOContainerReader.java index 598874b76..4162e7eae 100644 --- a/src/main/java/com/rapidminer/operator/io/IOContainerReader.java +++ b/src/main/java/com/rapidminer/operator/io/IOContainerReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/OutputTypes.java b/src/main/java/com/rapidminer/operator/io/OutputTypes.java index 5c59ed85b..97cb4931c 100644 --- a/src/main/java/com/rapidminer/operator/io/OutputTypes.java +++ b/src/main/java/com/rapidminer/operator/io/OutputTypes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/RepositorySource.java b/src/main/java/com/rapidminer/operator/io/RepositorySource.java index 2e8cb2c7d..40d7272b8 100644 --- a/src/main/java/com/rapidminer/operator/io/RepositorySource.java +++ b/src/main/java/com/rapidminer/operator/io/RepositorySource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/RepositoryStorer.java b/src/main/java/com/rapidminer/operator/io/RepositoryStorer.java index 65571f6bb..b1ac6e8dc 100644 --- a/src/main/java/com/rapidminer/operator/io/RepositoryStorer.java +++ b/src/main/java/com/rapidminer/operator/io/RepositoryStorer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/ResultWriter.java b/src/main/java/com/rapidminer/operator/io/ResultWriter.java index 76fa5dfa3..495bff04f 100644 --- a/src/main/java/com/rapidminer/operator/io/ResultWriter.java +++ b/src/main/java/com/rapidminer/operator/io/ResultWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/SimpleExampleSource.java b/src/main/java/com/rapidminer/operator/io/SimpleExampleSource.java index 322e14c24..dc05c007c 100644 --- a/src/main/java/com/rapidminer/operator/io/SimpleExampleSource.java +++ b/src/main/java/com/rapidminer/operator/io/SimpleExampleSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/SpecialFormatExampleSetWriter.java b/src/main/java/com/rapidminer/operator/io/SpecialFormatExampleSetWriter.java index 285507ac3..56839470a 100644 --- a/src/main/java/com/rapidminer/operator/io/SpecialFormatExampleSetWriter.java +++ b/src/main/java/com/rapidminer/operator/io/SpecialFormatExampleSetWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/io/URLExampleSource.java b/src/main/java/com/rapidminer/operator/io/URLExampleSource.java index cc03b1404..d6af593a9 100644 --- a/src/main/java/com/rapidminer/operator/io/URLExampleSource.java +++ b/src/main/java/com/rapidminer/operator/io/URLExampleSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/AbstractLearner.java b/src/main/java/com/rapidminer/operator/learner/AbstractLearner.java index f05196115..095e4ba01 100644 --- a/src/main/java/com/rapidminer/operator/learner/AbstractLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/AbstractLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/CapabilityCheck.java b/src/main/java/com/rapidminer/operator/learner/CapabilityCheck.java index c60c95794..e2ce34995 100644 --- a/src/main/java/com/rapidminer/operator/learner/CapabilityCheck.java +++ b/src/main/java/com/rapidminer/operator/learner/CapabilityCheck.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/CapabilityProvider.java b/src/main/java/com/rapidminer/operator/learner/CapabilityProvider.java index 01f7df971..35a4ba00f 100644 --- a/src/main/java/com/rapidminer/operator/learner/CapabilityProvider.java +++ b/src/main/java/com/rapidminer/operator/learner/CapabilityProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/FormulaProvider.java b/src/main/java/com/rapidminer/operator/learner/FormulaProvider.java index 343af875b..7f258efbf 100644 --- a/src/main/java/com/rapidminer/operator/learner/FormulaProvider.java +++ b/src/main/java/com/rapidminer/operator/learner/FormulaProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/Learner.java b/src/main/java/com/rapidminer/operator/learner/Learner.java index f7010057e..fc6f5697e 100644 --- a/src/main/java/com/rapidminer/operator/learner/Learner.java +++ b/src/main/java/com/rapidminer/operator/learner/Learner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/PredictionModel.java b/src/main/java/com/rapidminer/operator/learner/PredictionModel.java index 2a3324a9f..fb6ca8b74 100644 --- a/src/main/java/com/rapidminer/operator/learner/PredictionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/PredictionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/SimpleBinaryPredictionModel.java b/src/main/java/com/rapidminer/operator/learner/SimpleBinaryPredictionModel.java index 631acc48d..076f3b07c 100644 --- a/src/main/java/com/rapidminer/operator/learner/SimpleBinaryPredictionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/SimpleBinaryPredictionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/SimplePredictionModel.java b/src/main/java/com/rapidminer/operator/learner/SimplePredictionModel.java index 34a5a4411..489be5eb0 100644 --- a/src/main/java/com/rapidminer/operator/learner/SimplePredictionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/SimplePredictionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/UpdateablePredictionModel.java b/src/main/java/com/rapidminer/operator/learner/UpdateablePredictionModel.java index 4bf7f0e1f..ec66e3185 100644 --- a/src/main/java/com/rapidminer/operator/learner/UpdateablePredictionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/UpdateablePredictionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/AssociationRule.java b/src/main/java/com/rapidminer/operator/learner/associations/AssociationRule.java index 6e33e83a5..7de135003 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/AssociationRule.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/AssociationRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/AssociationRuleGenerator.java b/src/main/java/com/rapidminer/operator/learner/associations/AssociationRuleGenerator.java index 9f193c259..5b8824a48 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/AssociationRuleGenerator.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/AssociationRuleGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/AssociationRules.java b/src/main/java/com/rapidminer/operator/learner/associations/AssociationRules.java index 164bdb59a..65b6309f5 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/AssociationRules.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/AssociationRules.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/BooleanAttributeItem.java b/src/main/java/com/rapidminer/operator/learner/associations/BooleanAttributeItem.java index 75e6e2abc..94027f167 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/BooleanAttributeItem.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/BooleanAttributeItem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSet.java b/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSet.java index 97d3e67c3..bdec9d590 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSet.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetAttributeCreator.java b/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetAttributeCreator.java index 8275a0d92..566577d09 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetAttributeCreator.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetAttributeCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetUnificator.java b/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetUnificator.java index 5e3b77787..275675f95 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetUnificator.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetUnificator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSets.java b/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSets.java index b7b341088..941be521e 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSets.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSets.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetsToData.java b/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetsToData.java index 3d2f4ae15..b80a69b71 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetsToData.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/FrequentItemSetsToData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/Item.java b/src/main/java/com/rapidminer/operator/learner/associations/Item.java index 53b0f3e01..36a022735 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/Item.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/Item.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/PowerSet.java b/src/main/java/com/rapidminer/operator/learner/associations/PowerSet.java index df49b51e0..5a61cff60 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/PowerSet.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/PowerSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPGrowth.java b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPGrowth.java index ccfd80507..8658c241e 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPGrowth.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPGrowth.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPTree.java b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPTree.java index 49c448d9b..48e62744c 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPTree.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPTreeNode.java b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPTreeNode.java index bfe73d100..c4f2e9022 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPTreeNode.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FPTreeNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FrequencyStack.java b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FrequencyStack.java index ff91c70a1..b372f1fa9 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FrequencyStack.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/FrequencyStack.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/Header.java b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/Header.java index 139517826..16d24832b 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/Header.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/Header.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/ListFrequencyStack.java b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/ListFrequencyStack.java index 1f29e35e3..db39f3e94 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/ListFrequencyStack.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/fpgrowth/ListFrequencyStack.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/CountingInformations.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/CountingInformations.java index 3523161cb..bfc1c15ff 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/CountingInformations.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/CountingInformations.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/DataSequence.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/DataSequence.java index 4170217cf..c44adae5e 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/DataSequence.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/DataSequence.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/GSPOperator.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/GSPOperator.java index c9b298df4..34b36df8a 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/GSPOperator.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/GSPOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/GSPSet.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/GSPSet.java index bdeeeca7d..831f55d5a 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/GSPSet.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/GSPSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeInnerNode.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeInnerNode.java index fa960d124..647b0301d 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeInnerNode.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeInnerNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeLeafNode.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeLeafNode.java index 103440702..975a4b244 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeLeafNode.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeLeafNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeNode.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeNode.java index b8c367a4f..9b20d40c4 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeNode.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeRootNode.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeRootNode.java index d951ddffb..53b2db955 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeRootNode.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/HashTreeRootNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/Item.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/Item.java index e3171011d..372187609 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/Item.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/Item.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/Sequence.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/Sequence.java index c308e18f0..c596dff0a 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/Sequence.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/Sequence.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/Transaction.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/Transaction.java index 999040067..4ee239bc7 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/Transaction.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/Transaction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/associations/gsp/TransactionSet.java b/src/main/java/com/rapidminer/operator/learner/associations/gsp/TransactionSet.java index 9e3708053..c8eed20c7 100644 --- a/src/main/java/com/rapidminer/operator/learner/associations/gsp/TransactionSet.java +++ b/src/main/java/com/rapidminer/operator/learner/associations/gsp/TransactionSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/bayes/DiscriminantModel.java b/src/main/java/com/rapidminer/operator/learner/bayes/DiscriminantModel.java index e301cc9f2..745afa22f 100644 --- a/src/main/java/com/rapidminer/operator/learner/bayes/DiscriminantModel.java +++ b/src/main/java/com/rapidminer/operator/learner/bayes/DiscriminantModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/bayes/DistributionModel.java b/src/main/java/com/rapidminer/operator/learner/bayes/DistributionModel.java index b54430d32..943c8a96c 100644 --- a/src/main/java/com/rapidminer/operator/learner/bayes/DistributionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/bayes/DistributionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/bayes/KernelDistributionModel.java b/src/main/java/com/rapidminer/operator/learner/bayes/KernelDistributionModel.java index 0bcd0d372..1cae4b28f 100644 --- a/src/main/java/com/rapidminer/operator/learner/bayes/KernelDistributionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/bayes/KernelDistributionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/bayes/KernelNaiveBayes.java b/src/main/java/com/rapidminer/operator/learner/bayes/KernelNaiveBayes.java index 856356a13..dd7bdd8f2 100644 --- a/src/main/java/com/rapidminer/operator/learner/bayes/KernelNaiveBayes.java +++ b/src/main/java/com/rapidminer/operator/learner/bayes/KernelNaiveBayes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/bayes/LinearDiscriminantAnalysis.java b/src/main/java/com/rapidminer/operator/learner/bayes/LinearDiscriminantAnalysis.java index 17df07259..15bb44165 100644 --- a/src/main/java/com/rapidminer/operator/learner/bayes/LinearDiscriminantAnalysis.java +++ b/src/main/java/com/rapidminer/operator/learner/bayes/LinearDiscriminantAnalysis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/bayes/NaiveBayes.java b/src/main/java/com/rapidminer/operator/learner/bayes/NaiveBayes.java index 1e6c4782d..8c705b665 100644 --- a/src/main/java/com/rapidminer/operator/learner/bayes/NaiveBayes.java +++ b/src/main/java/com/rapidminer/operator/learner/bayes/NaiveBayes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/bayes/QuadraticDiscriminantAnalysis.java b/src/main/java/com/rapidminer/operator/learner/bayes/QuadraticDiscriminantAnalysis.java index 0eb7e031b..d2f8262a5 100644 --- a/src/main/java/com/rapidminer/operator/learner/bayes/QuadraticDiscriminantAnalysis.java +++ b/src/main/java/com/rapidminer/operator/learner/bayes/QuadraticDiscriminantAnalysis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/bayes/RegularizedDiscriminantAnalysis.java b/src/main/java/com/rapidminer/operator/learner/bayes/RegularizedDiscriminantAnalysis.java index 4fe7a2a76..b049fae0f 100644 --- a/src/main/java/com/rapidminer/operator/learner/bayes/RegularizedDiscriminantAnalysis.java +++ b/src/main/java/com/rapidminer/operator/learner/bayes/RegularizedDiscriminantAnalysis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -36,6 +36,7 @@ import com.rapidminer.operator.learner.AbstractLearner; import com.rapidminer.operator.learner.PredictionModel; import com.rapidminer.parameter.ParameterType; +import com.rapidminer.parameter.ParameterTypeBoolean; import com.rapidminer.parameter.ParameterTypeDouble; import com.rapidminer.parameter.UndefinedParameterError; import com.rapidminer.tools.math.MathFunctions; @@ -62,6 +63,8 @@ public class RegularizedDiscriminantAnalysis extends AbstractLearner { /** The parameter name of the alpha parameter */ public static final String PARAMETER_ALPHA = "alpha"; + public static final String PARAMETER_APPROXIMATE_INVERSE = "approximate_covariance_inverse"; + public RegularizedDiscriminantAnalysis(OperatorDescription description) { super(description); } @@ -223,8 +226,12 @@ protected static Matrix[] getRegularizedInverseCovarianceMatrices(ExampleSet exa protected static Matrix[] getLinearInverseCovarianceMatrices(ExampleSet exampleSet, String[] labels, Operator op) throws OperatorException { boolean checkForStop = op != null; + boolean approximateInverse = op == null || op.getParameterAsBoolean(PARAMETER_APPROXIMATE_INVERSE); Matrix[] classInverseCovariances = new Matrix[labels.length]; - Matrix inverse = MathFunctions.invertMatrix(CovarianceMatrix.getCovarianceMatrix(exampleSet, op)); + Matrix inverse = MathFunctions.invertMatrix(CovarianceMatrix.getCovarianceMatrix(exampleSet, op), approximateInverse); + if (inverse == null){ + throw new UserError(op, "regularized_discriminant_analysis.singular_covariance_matrix"); + } for (int i = 0; i < labels.length; i++) { if (checkForStop) { op.checkForStop(); @@ -249,6 +256,7 @@ protected static Matrix[] getLinearInverseCovarianceMatrices(ExampleSet exampleS protected static Matrix[] getQuadraticInverseCovarianceMatrices(ExampleSet exampleSet, String[] labels, Operator op) throws OperatorException { boolean checkForStop = op != null; + boolean approximateInverse = op == null || op.getParameterAsBoolean(PARAMETER_APPROXIMATE_INVERSE); Matrix[] classInverseCovariances = new Matrix[labels.length]; Attribute labelAttribute = exampleSet.getAttributes().getLabel(); SplittedExampleSet labelSet = SplittedExampleSet.splitByAttribute(exampleSet, exampleSet.getAttributes().getLabel()); @@ -265,7 +273,10 @@ protected static Matrix[] getQuadraticInverseCovarianceMatrices(ExampleSet examp op.checkForStop(); } // calculate inverse matrix - Matrix inverse = CovarianceMatrix.getCovarianceMatrix(labelSet, op).inverse(); + Matrix inverse = MathFunctions.invertMatrix(CovarianceMatrix.getCovarianceMatrix(labelSet, op), approximateInverse); + if (inverse == null){ + throw new UserError(op, "regularized_discriminant_analysis.singular_covariance_matrix"); + } classInverseCovariances[labelIndex] = inverse; labelIndex++; } @@ -336,6 +347,8 @@ public List getParameterTypes() { 0d, 1d, 0.5d, false)); } + ParameterType type = new ParameterTypeBoolean(PARAMETER_APPROXIMATE_INVERSE, "Indicate whether covariance matrix inverse should be approximated if a direct inverse does not exist.", true, true); + list.add(type); return list; } diff --git a/src/main/java/com/rapidminer/operator/learner/bayes/SimpleDistributionModel.java b/src/main/java/com/rapidminer/operator/learner/bayes/SimpleDistributionModel.java index 2e448f5fa..f4b83342a 100644 --- a/src/main/java/com/rapidminer/operator/learner/bayes/SimpleDistributionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/bayes/SimpleDistributionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/FastLargeMargin.java b/src/main/java/com/rapidminer/operator/learner/functions/FastLargeMargin.java index 6af94ecfa..8bfabc95a 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/FastLargeMargin.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/FastLargeMargin.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/FastMarginModel.java b/src/main/java/com/rapidminer/operator/learner/functions/FastMarginModel.java index 66c237bc2..d6aaef536 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/FastMarginModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/FastMarginModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/HyperplaneModel.java b/src/main/java/com/rapidminer/operator/learner/functions/HyperplaneModel.java index adcdeb6b1..237ffd386 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/HyperplaneModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/HyperplaneModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/LinearRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/functions/LinearRegressionModel.java index a7400483c..483d94d22 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/LinearRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/LinearRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegression.java b/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegression.java index 6388ed7cc..e579c8c42 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegressionModel.java index 44e330ca3..91faab14b 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegressionOptimization.java b/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegressionOptimization.java index 8339f41e0..1ccb52443 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegressionOptimization.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/LogisticRegressionOptimization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/Perceptron.java b/src/main/java/com/rapidminer/operator/learner/functions/Perceptron.java index 23c7e396f..8af5f6563 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/Perceptron.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/Perceptron.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/PolynomialRegression.java b/src/main/java/com/rapidminer/operator/learner/functions/PolynomialRegression.java index 2ef8e2283..a98d0aa9a 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/PolynomialRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/PolynomialRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/PolynomialRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/functions/PolynomialRegressionModel.java index 3ce66794d..24d3b15cd 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/PolynomialRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/PolynomialRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/SeeminglyUnrelatedRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/functions/SeeminglyUnrelatedRegressionModel.java index 7c1dc7777..b508a707e 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/SeeminglyUnrelatedRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/SeeminglyUnrelatedRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/SeeminglyUnrelatedRegressionOperator.java b/src/main/java/com/rapidminer/operator/learner/functions/SeeminglyUnrelatedRegressionOperator.java index e12356053..35f81f16a 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/SeeminglyUnrelatedRegressionOperator.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/SeeminglyUnrelatedRegressionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/VectorLinearRegression.java b/src/main/java/com/rapidminer/operator/learner/functions/VectorLinearRegression.java index 1274578c9..4823a1785 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/VectorLinearRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/VectorLinearRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/VectorRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/functions/VectorRegressionModel.java index 370cb7e52..038601301 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/VectorRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/VectorRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractKernelBasedLearner.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractKernelBasedLearner.java index 10f59bc32..d2eed3e74 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractKernelBasedLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractKernelBasedLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractMySVMLearner.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractMySVMLearner.java index 117f7026f..4953d396e 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractMySVMLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractMySVMLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractMySVMModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractMySVMModel.java index 9aa81b393..53bda8653 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractMySVMModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/AbstractMySVMModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/GPLearner.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/GPLearner.java index f1349300e..6a392933a 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/GPLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/GPLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/GPModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/GPModel.java index b390face9..a86d3e102 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/GPModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/GPModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/JMySVMLearner.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/JMySVMLearner.java index b644fc7cf..5517fe656 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/JMySVMLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/JMySVMLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/JMySVMModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/JMySVMModel.java index abf1c6a79..c3d7d5783 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/JMySVMModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/JMySVMModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegression.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegression.java index ddc8bde80..0f004276f 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegressionModel.java index cb14e9444..b88cdc9a2 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegressionOptimization.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegressionOptimization.java index 2e099498d..7c8a24e13 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegressionOptimization.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelLogisticRegressionOptimization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelModel.java index 6ea35dec7..be8c3f88a 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/KernelModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/LibSVMLearner.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/LibSVMLearner.java index 139c73123..f45895bac 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/LibSVMLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/LibSVMLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/LibSVMModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/LibSVMModel.java index b9979e3c0..d768e6cd5 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/LibSVMModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/LibSVMModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/LinearMySVMLearner.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/LinearMySVMLearner.java index 19ff20033..a9e515b42 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/LinearMySVMLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/LinearMySVMLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/LinearMySVMModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/LinearMySVMModel.java index 3076c5a60..143fc018c 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/LinearMySVMModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/LinearMySVMModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/MyKLRLearner.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/MyKLRLearner.java index 36cdbaa3e..5e5e1d8a4 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/MyKLRLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/MyKLRLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -67,7 +67,7 @@ public AbstractMySVMModel createSVMModel(ExampleSet exampleSet, SVMExamples sVME @Override public SVMInterface createSVM(Attribute label, Kernel kernel, SVMExamples sVMExamples, com.rapidminer.example.ExampleSet rapidMinerExamples) throws OperatorException { - Tools.hasNominalLabels(rapidMinerExamples, "MyKLR"); + Tools.hasNominalLabels(rapidMinerExamples, "MyKLR"); return new KLR(this); } diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/MyKLRModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/MyKLRModel.java index 8cad2e8dc..9ccbf9aab 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/MyKLRModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/MyKLRModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/RVMLearner.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/RVMLearner.java index aba473efa..d46b2f97d 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/RVMLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/RVMLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/RVMModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/RVMModel.java index 5a7c9f777..556b485d3 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/RVMModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/RVMModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/SupportVector.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/SupportVector.java index 8cf71c2c6..cf1bd24a1 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/SupportVector.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/SupportVector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/ClassificationEvoOptimization.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/ClassificationEvoOptimization.java index 29d7041bc..bf48bb884 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/ClassificationEvoOptimization.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/ClassificationEvoOptimization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/ClassificationOptimizationFunction.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/ClassificationOptimizationFunction.java index 6b2157dbf..6f51bd515 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/ClassificationOptimizationFunction.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/ClassificationOptimizationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoOptimization.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoOptimization.java index f39b378d4..260193a7c 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoOptimization.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoOptimization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoSVM.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoSVM.java index df5b71a3f..37150d40f 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoSVM.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoSVM.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoSVMModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoSVMModel.java index c86d78187..8dd2cd814 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoSVMModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/EvoSVMModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/OptimizationFunction.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/OptimizationFunction.java index fc5906688..01f6556c1 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/OptimizationFunction.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/OptimizationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/PSOSVM.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/PSOSVM.java index bd9a20943..ca07c88b7 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/PSOSVM.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/PSOSVM.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/PSOSVMOptimization.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/PSOSVMOptimization.java index 7100b3bbc..23a1fac5e 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/PSOSVMOptimization.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/PSOSVMOptimization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/RegressionEvoOptimization.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/RegressionEvoOptimization.java index 8ba69d810..212d8a05b 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/RegressionEvoOptimization.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/RegressionEvoOptimization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/RegressionOptimizationFunction.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/RegressionOptimizationFunction.java index 551dcb933..cfa122cc6 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/RegressionOptimizationFunction.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/evosvm/RegressionOptimizationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/GPBase.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/GPBase.java index 0b06b6716..6af20dd6c 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/GPBase.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/GPBase.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Model.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Model.java index b1328ca0c..6c4c994b9 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Model.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Model.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Parameter.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Parameter.java index 697e9e372..56f89f24b 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Parameter.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Parameter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Problem.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Problem.java index fddee1699..e7a72a012 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Problem.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Problem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Regression.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Regression.java index 8aec3fa56..0b3e6fe4e 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Regression.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/Regression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/RegressionProblem.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/RegressionProblem.java index cda225184..4c60cc836 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/RegressionProblem.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/gaussianprocess/RegressionProblem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/hyperhyper/HyperHyper.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/hyperhyper/HyperHyper.java index dec9a9653..bb0f15adf 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/hyperhyper/HyperHyper.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/hyperhyper/HyperHyper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/hyperhyper/HyperModel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/hyperhyper/HyperModel.java index 41333a51f..986762ec8 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/hyperhyper/HyperModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/hyperhyper/HyperModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/examples/SVMExample.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/examples/SVMExample.java index 85795a09c..307603c8f 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/examples/SVMExample.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/examples/SVMExample.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/examples/SVMExamples.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/examples/SVMExamples.java index 0da8ca6bd..0f618f16e 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/examples/SVMExamples.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/examples/SVMExamples.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/Kernel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/Kernel.java index a7b1ee40d..55497556f 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/Kernel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/Kernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelAnova.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelAnova.java index 9c7d2d431..00ac0a10f 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelAnova.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelAnova.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelDot.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelDot.java index b8761334d..064f12c2c 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelDot.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelDot.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelEpanechnikov.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelEpanechnikov.java index 7e3754e61..7bea63f53 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelEpanechnikov.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelEpanechnikov.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelGaussianCombination.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelGaussianCombination.java index a6d7e71ca..784e556c9 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelGaussianCombination.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelGaussianCombination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelMultiquadric.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelMultiquadric.java index 17c8a006e..7a5279f65 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelMultiquadric.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelMultiquadric.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelNeural.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelNeural.java index a5c28cab0..ecb7210b1 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelNeural.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelNeural.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelPolynomial.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelPolynomial.java index 4219c0e38..e11855478 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelPolynomial.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelPolynomial.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelRadial.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelRadial.java index b9f6e6fbb..88c9263a5 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelRadial.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/kernel/KernelRadial.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/optimizer/QuadraticProblem.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/optimizer/QuadraticProblem.java index 8198b2e85..49b98b316 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/optimizer/QuadraticProblem.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/optimizer/QuadraticProblem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/optimizer/QuadraticProblemSMO.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/optimizer/QuadraticProblemSMO.java index 0d7632263..0c2c8c91e 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/optimizer/QuadraticProblemSMO.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/optimizer/QuadraticProblemSMO.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVM.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVM.java index cee97619f..23988269c 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVM.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVM.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMInterface.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMInterface.java index 6a4864c88..afa92ec39 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMInterface.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMInterface.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMpattern.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMpattern.java index a960a8ece..4ceecbe01 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMpattern.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMpattern.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMregression.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMregression.java index aaa26ebf8..e64d2b5b8 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMregression.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/svm/SVMregression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/Cache.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/Cache.java index ac47f8876..040e03bba 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/Cache.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/Cache.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/Heap.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/Heap.java index a7accfd18..cea653774 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/Heap.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/Heap.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/MaxHeap.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/MaxHeap.java index 6b0e22e80..902a0fb56 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/MaxHeap.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/MaxHeap.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/MinHeap.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/MinHeap.java index 8d68d089d..ed01da9f0 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/MinHeap.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/jmysvm/util/MinHeap.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/logistic/KLR.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/logistic/KLR.java index 3ccfe0809..3d608fc5e 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/logistic/KLR.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/logistic/KLR.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/ClassificationProblem.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/ClassificationProblem.java index 8596a7fbc..a8ab1b532 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/ClassificationProblem.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/ClassificationProblem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/ConstructiveRegression.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/ConstructiveRegression.java index d5d518770..4cdada014 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/ConstructiveRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/ConstructiveRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Model.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Model.java index 58eba89fa..487ada5a3 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Model.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Model.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Parameter.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Parameter.java index a79613124..b88cece29 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Parameter.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Parameter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Problem.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Problem.java index be982c05c..6dabf495e 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Problem.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/Problem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMBase.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMBase.java index 603376c4f..767138013 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMBase.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMBase.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMClassification.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMClassification.java index d77bd6f9b..5c6af3c3e 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMClassification.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMClassification.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMRegression.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMRegression.java index 858d772e5..c0bad0337 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RVMRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RegressionProblem.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RegressionProblem.java index b601cda9f..f39917a9c 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RegressionProblem.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/RegressionProblem.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/Kernel.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/Kernel.java index b56550673..9760910a1 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/Kernel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/Kernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelBasisFunction.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelBasisFunction.java index f676b174d..f604ba190 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelBasisFunction.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelBasisFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelCauchy.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelCauchy.java index 4f69a067a..22552bb25 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelCauchy.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelCauchy.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelEpanechnikov.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelEpanechnikov.java index 9e2bc0c6e..79c83f568 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelEpanechnikov.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelEpanechnikov.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelGaussianCombination.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelGaussianCombination.java index 634d920c4..7094e59d3 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelGaussianCombination.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelGaussianCombination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelLaplace.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelLaplace.java index 69d750853..b5b985d06 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelLaplace.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelLaplace.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelMultiquadric.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelMultiquadric.java index 1c00220f4..a292540a9 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelMultiquadric.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelMultiquadric.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelPoly.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelPoly.java index b5e94c354..0a0f59fb3 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelPoly.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelPoly.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelRadial.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelRadial.java index 090634326..7429faad1 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelRadial.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelRadial.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelSigmoid.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelSigmoid.java index d2ec1be6a..60015fb5b 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelSigmoid.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/kernel/KernelSigmoid.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/util/SECholeskyDecomposition.java b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/util/SECholeskyDecomposition.java index 37add7026..da3e157a7 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/util/SECholeskyDecomposition.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/kernel/rvm/util/SECholeskyDecomposition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/linear/GreedyLinearRegressionMethod.java b/src/main/java/com/rapidminer/operator/learner/functions/linear/GreedyLinearRegressionMethod.java index b15aef810..6f7d91f31 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/linear/GreedyLinearRegressionMethod.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/linear/GreedyLinearRegressionMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -23,9 +23,9 @@ import com.rapidminer.parameter.ParameterType; import com.rapidminer.parameter.UndefinedParameterError; -import java.util.Collections; -import java.util.List; - +import java.util.Collections; +import java.util.List; + /** * This class implements an internal forward selection for the linear regression. It uses the Akaike diff --git a/src/main/java/com/rapidminer/operator/learner/functions/linear/IterativeTTestLinearRegressionMethod.java b/src/main/java/com/rapidminer/operator/learner/functions/linear/IterativeTTestLinearRegressionMethod.java index d0688ebcd..e748990ac 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/linear/IterativeTTestLinearRegressionMethod.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/linear/IterativeTTestLinearRegressionMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -50,7 +50,7 @@ public class IterativeTTestLinearRegressionMethod extends TTestLinearRegressionM public LinearRegressionResult applyMethod(LinearRegression regression, boolean useBias, double ridge, ExampleSet exampleSet, boolean[] isUsedAttribute, int numberOfExamples, int numberOfUsedAttributes, double[] means, double labelMean, double[] standardDeviations, double labelStandardDeviation, - double[] coefficientsOnFullData, double errorOnFullData) throws UndefinedParameterError, ProcessStoppedException { + double[] coefficientsOnFullData, double errorOnFullData) throws UndefinedParameterError, ProcessStoppedException { int maxIterations = regression.getParameterAsInt(PARAMETER_MAX_ITERATIONS); double alphaForward = regression.getParameterAsDouble(PARAMETER_FORWARD_SELECTION_THRESHOLD); double alphaBackward = regression.getParameterAsDouble(PARAMETER_BACKWARD_SELECTION_THRESHOLD); diff --git a/src/main/java/com/rapidminer/operator/learner/functions/linear/LinearRegression.java b/src/main/java/com/rapidminer/operator/learner/functions/linear/LinearRegression.java index 4aed1e9bb..12491cccd 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/linear/LinearRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/linear/LinearRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -697,7 +697,7 @@ private double regressionPrediction(Example example, boolean[] selectedAttribute } } - dependent = new Matrix(exampleSet.size(), 1); + dependent = new Matrix(exampleSet.size(), 1); int exampleIndex = 0; for (Example example : exampleSet) { dependent.set(exampleIndex, 0, example.getLabel()); diff --git a/src/main/java/com/rapidminer/operator/learner/functions/linear/LinearRegressionMethod.java b/src/main/java/com/rapidminer/operator/learner/functions/linear/LinearRegressionMethod.java index 8934d0fac..d775489ff 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/linear/LinearRegressionMethod.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/linear/LinearRegressionMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/linear/M5PLinearRegressionMethod.java b/src/main/java/com/rapidminer/operator/learner/functions/linear/M5PLinearRegressionMethod.java index 737c764ad..b81f7ca7c 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/linear/M5PLinearRegressionMethod.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/linear/M5PLinearRegressionMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -58,9 +58,9 @@ public LinearRegressionResult applyMethod(LinearRegression regression, boolean u int coefficientIndex = 0; for (int i = 0; i < isUsedAttribute.length; i++) { if (isUsedAttribute[i]) { - double standardizedCoefficient = Math.abs(coefficientsOnFullData[coefficientIndex] - * standardDeviations[i] / labelStandardDeviation); - if ((coefficientIndex == 0) || (standardizedCoefficient < minStadardizedCoefficient)) { + double standardizedCoefficient = Math.abs(coefficientsOnFullData[coefficientIndex] + * standardDeviations[i] / labelStandardDeviation); + if ((coefficientIndex == 0) || (standardizedCoefficient < minStadardizedCoefficient)) { minStadardizedCoefficient = standardizedCoefficient; attribute2Deselect = i; } diff --git a/src/main/java/com/rapidminer/operator/learner/functions/linear/PlainLinearRegressionMethod.java b/src/main/java/com/rapidminer/operator/learner/functions/linear/PlainLinearRegressionMethod.java index 7aa76f5c5..96f859bfc 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/linear/PlainLinearRegressionMethod.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/linear/PlainLinearRegressionMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/linear/TTestLinearRegressionMethod.java b/src/main/java/com/rapidminer/operator/learner/functions/linear/TTestLinearRegressionMethod.java index a754cfdb1..458e7afa8 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/linear/TTestLinearRegressionMethod.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/linear/TTestLinearRegressionMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -113,8 +113,8 @@ protected double getPValue(double coefficient, int attributeIndex, LinearRegress double labelStandardDeviation, FDistribution fdistribution, double generalCorrelation) throws UndefinedParameterError, ProcessStoppedException { double tolerance = regression.getTolerance(exampleSet, isUsedAttribute, attributeIndex, ridge, useBias); - double standardError = Math.sqrt((1.0d - generalCorrelation) - / (tolerance * (exampleSet.size() - exampleSet.getAttributes().size() - 1.0d))) + double standardError = Math.sqrt((1.0d - generalCorrelation) + / (tolerance * (exampleSet.size() - exampleSet.getAttributes().size() - 1.0d))) * labelStandardDeviation / standardDeviations[attributeIndex]; // calculating other statistics diff --git a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ActivationFunction.java b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ActivationFunction.java index 9451334ca..5bde9d75d 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ActivationFunction.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ActivationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetLearner.java b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetLearner.java index 7363fdbf3..1c1695d83 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetModel.java b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetModel.java index 8448a4005..7928777a0 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetModel.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetVisualizer.java b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetVisualizer.java index 0db00c48a..c78a62b64 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetVisualizer.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/ImprovedNeuralNetVisualizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/InnerNode.java b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/InnerNode.java index 69da4f309..0641ea3b3 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/InnerNode.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/InnerNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/InputNode.java b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/InputNode.java index 99fab50c8..69b84b787 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/InputNode.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/InputNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/LinearFunction.java b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/LinearFunction.java index c6fbc8c30..e1f96f90b 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/LinearFunction.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/LinearFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/Node.java b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/Node.java index b7280d684..3a59079f1 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/Node.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/Node.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/OutputNode.java b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/OutputNode.java index ff724990f..b1fc24c98 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/OutputNode.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/OutputNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/SigmoidFunction.java b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/SigmoidFunction.java index abe1c8ccd..842c8f003 100644 --- a/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/SigmoidFunction.java +++ b/src/main/java/com/rapidminer/operator/learner/functions/neuralnet/SigmoidFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/IGSSResult.java b/src/main/java/com/rapidminer/operator/learner/igss/IGSSResult.java index 11c9fb270..e7ae331e7 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/IGSSResult.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/IGSSResult.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/IteratingGSS.java b/src/main/java/com/rapidminer/operator/learner/igss/IteratingGSS.java index c0e8514e9..321bb8aee 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/IteratingGSS.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/IteratingGSS.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/Result.java b/src/main/java/com/rapidminer/operator/learner/igss/Result.java index 3f62ebffc..5cb339cbc 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/Result.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/Result.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/GSSModel.java b/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/GSSModel.java index a390b7009..a116c3ec2 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/GSSModel.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/GSSModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Hypothesis.java b/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Hypothesis.java index 8342d37db..3caf3cd92 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Hypothesis.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Hypothesis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Literal.java b/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Literal.java index 423bf2b33..5e7e4cf55 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Literal.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Literal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Rule.java b/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Rule.java index 62dbbc4ff..7e76470f5 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Rule.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/hypothesis/Rule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/utility/AbstractUtility.java b/src/main/java/com/rapidminer/operator/learner/igss/utility/AbstractUtility.java index d44eaac53..52312d80b 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/utility/AbstractUtility.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/utility/AbstractUtility.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/utility/Accuracy.java b/src/main/java/com/rapidminer/operator/learner/igss/utility/Accuracy.java index a3d1ec61f..27ceec461 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/utility/Accuracy.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/utility/Accuracy.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/utility/Binomial.java b/src/main/java/com/rapidminer/operator/learner/igss/utility/Binomial.java index a71b9743f..4908b187c 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/utility/Binomial.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/utility/Binomial.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/utility/Coverage.java b/src/main/java/com/rapidminer/operator/learner/igss/utility/Coverage.java index 9677a621f..74f385a2f 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/utility/Coverage.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/utility/Coverage.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/utility/InstanceAveraging.java b/src/main/java/com/rapidminer/operator/learner/igss/utility/InstanceAveraging.java index 38b2bfed1..ec536a36c 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/utility/InstanceAveraging.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/utility/InstanceAveraging.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/utility/Linear.java b/src/main/java/com/rapidminer/operator/learner/igss/utility/Linear.java index 23c74a3fe..643af8c93 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/utility/Linear.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/utility/Linear.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/utility/Squared.java b/src/main/java/com/rapidminer/operator/learner/igss/utility/Squared.java index ca74c1953..045bce675 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/utility/Squared.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/utility/Squared.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/utility/Utility.java b/src/main/java/com/rapidminer/operator/learner/igss/utility/Utility.java index a5c522b6a..b4b3485d3 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/utility/Utility.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/utility/Utility.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/igss/utility/WRAcc.java b/src/main/java/com/rapidminer/operator/learner/igss/utility/WRAcc.java index 63fbc0da5..cc99768bc 100644 --- a/src/main/java/com/rapidminer/operator/learner/igss/utility/WRAcc.java +++ b/src/main/java/com/rapidminer/operator/learner/igss/utility/WRAcc.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/lazy/AttributeBasedVotingLearner.java b/src/main/java/com/rapidminer/operator/learner/lazy/AttributeBasedVotingLearner.java index b7bc92a11..a9814a749 100644 --- a/src/main/java/com/rapidminer/operator/learner/lazy/AttributeBasedVotingLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/lazy/AttributeBasedVotingLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/lazy/AttributeBasedVotingModel.java b/src/main/java/com/rapidminer/operator/learner/lazy/AttributeBasedVotingModel.java index 776c89eb6..ef9bd7b6d 100644 --- a/src/main/java/com/rapidminer/operator/learner/lazy/AttributeBasedVotingModel.java +++ b/src/main/java/com/rapidminer/operator/learner/lazy/AttributeBasedVotingModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/lazy/AttributeDefaultModel.java b/src/main/java/com/rapidminer/operator/learner/lazy/AttributeDefaultModel.java index 7a3a330a2..e89e83b50 100644 --- a/src/main/java/com/rapidminer/operator/learner/lazy/AttributeDefaultModel.java +++ b/src/main/java/com/rapidminer/operator/learner/lazy/AttributeDefaultModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/lazy/DefaultLearner.java b/src/main/java/com/rapidminer/operator/learner/lazy/DefaultLearner.java index 5e0c3b147..afd76d271 100644 --- a/src/main/java/com/rapidminer/operator/learner/lazy/DefaultLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/lazy/DefaultLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/lazy/DefaultModel.java b/src/main/java/com/rapidminer/operator/learner/lazy/DefaultModel.java index 0f6c7e6a4..f8410bfe7 100644 --- a/src/main/java/com/rapidminer/operator/learner/lazy/DefaultModel.java +++ b/src/main/java/com/rapidminer/operator/learner/lazy/DefaultModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/lazy/KNNClassificationModel.java b/src/main/java/com/rapidminer/operator/learner/lazy/KNNClassificationModel.java index 12812a15f..8359386ad 100644 --- a/src/main/java/com/rapidminer/operator/learner/lazy/KNNClassificationModel.java +++ b/src/main/java/com/rapidminer/operator/learner/lazy/KNNClassificationModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/lazy/KNNLearner.java b/src/main/java/com/rapidminer/operator/learner/lazy/KNNLearner.java index 1f606ed27..e4acb85ad 100644 --- a/src/main/java/com/rapidminer/operator/learner/lazy/KNNLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/lazy/KNNLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/lazy/KNNRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/lazy/KNNRegressionModel.java index e5ee50774..8edbb518f 100644 --- a/src/main/java/com/rapidminer/operator/learner/lazy/KNNRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/lazy/KNNRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/local/AtLeastNeighborhood.java b/src/main/java/com/rapidminer/operator/learner/local/AtLeastNeighborhood.java index 46fdc538d..b0385aecc 100644 --- a/src/main/java/com/rapidminer/operator/learner/local/AtLeastNeighborhood.java +++ b/src/main/java/com/rapidminer/operator/learner/local/AtLeastNeighborhood.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/local/DistanceNeighborhood.java b/src/main/java/com/rapidminer/operator/learner/local/DistanceNeighborhood.java index 9de842018..fd90cfa45 100644 --- a/src/main/java/com/rapidminer/operator/learner/local/DistanceNeighborhood.java +++ b/src/main/java/com/rapidminer/operator/learner/local/DistanceNeighborhood.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/local/LocalPolynomialRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/local/LocalPolynomialRegressionModel.java index 1a8c47e62..4ae445412 100644 --- a/src/main/java/com/rapidminer/operator/learner/local/LocalPolynomialRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/local/LocalPolynomialRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/local/LocalPolynomialRegressionOperator.java b/src/main/java/com/rapidminer/operator/learner/local/LocalPolynomialRegressionOperator.java index 403125e95..2325fa1c3 100644 --- a/src/main/java/com/rapidminer/operator/learner/local/LocalPolynomialRegressionOperator.java +++ b/src/main/java/com/rapidminer/operator/learner/local/LocalPolynomialRegressionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/local/NearestNeighborNeighborhood.java b/src/main/java/com/rapidminer/operator/learner/local/NearestNeighborNeighborhood.java index 29b28757b..3606ef72f 100644 --- a/src/main/java/com/rapidminer/operator/learner/local/NearestNeighborNeighborhood.java +++ b/src/main/java/com/rapidminer/operator/learner/local/NearestNeighborNeighborhood.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/local/Neighborhood.java b/src/main/java/com/rapidminer/operator/learner/local/Neighborhood.java index 754890cb1..3110778a2 100644 --- a/src/main/java/com/rapidminer/operator/learner/local/Neighborhood.java +++ b/src/main/java/com/rapidminer/operator/learner/local/Neighborhood.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/local/Neighborhoods.java b/src/main/java/com/rapidminer/operator/learner/local/Neighborhoods.java index a511d40ee..351df9330 100644 --- a/src/main/java/com/rapidminer/operator/learner/local/Neighborhoods.java +++ b/src/main/java/com/rapidminer/operator/learner/local/Neighborhoods.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/local/RelativeNeighborhood.java b/src/main/java/com/rapidminer/operator/learner/local/RelativeNeighborhood.java index e48208fb6..0e06fc0f1 100644 --- a/src/main/java/com/rapidminer/operator/learner/local/RelativeNeighborhood.java +++ b/src/main/java/com/rapidminer/operator/learner/local/RelativeNeighborhood.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/AbstractMetaLearner.java b/src/main/java/com/rapidminer/operator/learner/meta/AbstractMetaLearner.java index fab7964fa..97069e3ab 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/AbstractMetaLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/AbstractMetaLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/AbstractStacking.java b/src/main/java/com/rapidminer/operator/learner/meta/AbstractStacking.java index c1b079a2a..3e9c80e76 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/AbstractStacking.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/AbstractStacking.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/AdaBoost.java b/src/main/java/com/rapidminer/operator/learner/meta/AdaBoost.java index ec5dddc3d..365a82d8d 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/AdaBoost.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/AdaBoost.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/AdaBoostModel.java b/src/main/java/com/rapidminer/operator/learner/meta/AdaBoostModel.java index 7f1cfc773..b5cfa1889 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/AdaBoostModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/AdaBoostModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/AdaBoostPerformanceMeasures.java b/src/main/java/com/rapidminer/operator/learner/meta/AdaBoostPerformanceMeasures.java index e91c6fbdc..e35fec8a0 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/AdaBoostPerformanceMeasures.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/AdaBoostPerformanceMeasures.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/AdditiveRegression.java b/src/main/java/com/rapidminer/operator/learner/meta/AdditiveRegression.java index bb364de20..d210ee448 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/AdditiveRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/AdditiveRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/AdditiveRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/meta/AdditiveRegressionModel.java index f502e8899..5e9031505 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/AdditiveRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/AdditiveRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/Bagging.java b/src/main/java/com/rapidminer/operator/learner/meta/Bagging.java index 7ae2d2aae..0286512e6 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/Bagging.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/Bagging.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/BaggingModel.java b/src/main/java/com/rapidminer/operator/learner/meta/BaggingModel.java index 38dcdd6b1..562e96541 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/BaggingModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/BaggingModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/BayBoostBaseModelInfo.java b/src/main/java/com/rapidminer/operator/learner/meta/BayBoostBaseModelInfo.java index 801b77292..8168c3ee7 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/BayBoostBaseModelInfo.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/BayBoostBaseModelInfo.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/BayBoostModel.java b/src/main/java/com/rapidminer/operator/learner/meta/BayBoostModel.java index be75a6730..8de81bf04 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/BayBoostModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/BayBoostModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/BayBoostStream.java b/src/main/java/com/rapidminer/operator/learner/meta/BayBoostStream.java index 3899a298c..c67c70f76 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/BayBoostStream.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/BayBoostStream.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/BayesianBoosting.java b/src/main/java/com/rapidminer/operator/learner/meta/BayesianBoosting.java index a8dfe669a..012c0713c 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/BayesianBoosting.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/BayesianBoosting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/Binary2MultiClassLearner.java b/src/main/java/com/rapidminer/operator/learner/meta/Binary2MultiClassLearner.java index 21491fd62..276388e92 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/Binary2MultiClassLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/Binary2MultiClassLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/Binary2MultiClassModel.java b/src/main/java/com/rapidminer/operator/learner/meta/Binary2MultiClassModel.java index 171470554..853bdbf83 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/Binary2MultiClassModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/Binary2MultiClassModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/ClassificationByRegression.java b/src/main/java/com/rapidminer/operator/learner/meta/ClassificationByRegression.java index 7b4108213..b740fb944 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/ClassificationByRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/ClassificationByRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/ConfidenceVoteModel.java b/src/main/java/com/rapidminer/operator/learner/meta/ConfidenceVoteModel.java index 245fc852d..b090ccf98 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/ConfidenceVoteModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/ConfidenceVoteModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/ContingencyMatrix.java b/src/main/java/com/rapidminer/operator/learner/meta/ContingencyMatrix.java index 8ecd35cb0..9be23f74f 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/ContingencyMatrix.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/ContingencyMatrix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/CostBasedThresholdLearner.java b/src/main/java/com/rapidminer/operator/learner/meta/CostBasedThresholdLearner.java index 3849f22bf..da0f76435 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/CostBasedThresholdLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/CostBasedThresholdLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/DelegationModel.java b/src/main/java/com/rapidminer/operator/learner/meta/DelegationModel.java index 0ac4da6d8..3f3016fc3 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/DelegationModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/DelegationModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalLearner.java b/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalLearner.java index 30057a6da..b05c723c9 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalModel.java b/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalModel.java index 6d28d0ede..7292096be 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalMultiClassLearner.java b/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalMultiClassLearner.java index 0e35622c2..594ae553a 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalMultiClassLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalMultiClassLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalMultiClassModel.java b/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalMultiClassModel.java index dfee65a12..9c1cf910d 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalMultiClassModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/HierarchicalMultiClassModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/MetaCost.java b/src/main/java/com/rapidminer/operator/learner/meta/MetaCost.java index 6b4c5c062..df7b88001 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/MetaCost.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/MetaCost.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/MetaCostModel.java b/src/main/java/com/rapidminer/operator/learner/meta/MetaCostModel.java index 154d7b581..1d833745e 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/MetaCostModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/MetaCostModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/MetaModel.java b/src/main/java/com/rapidminer/operator/learner/meta/MetaModel.java index 840c7a030..9f235d54a 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/MetaModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/MetaModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/MultiModelByRegression.java b/src/main/java/com/rapidminer/operator/learner/meta/MultiModelByRegression.java index dd1317492..95bc5b64a 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/MultiModelByRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/MultiModelByRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/RelativeRegression.java b/src/main/java/com/rapidminer/operator/learner/meta/RelativeRegression.java index bd58c2bc5..4a5e2703e 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/RelativeRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/RelativeRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/RelativeRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/meta/RelativeRegressionModel.java index 54cd04c5c..fb77d96fe 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/RelativeRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/RelativeRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/SDEnsemble.java b/src/main/java/com/rapidminer/operator/learner/meta/SDEnsemble.java index cacec5970..cd4e56e3c 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/SDEnsemble.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/SDEnsemble.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/SDReweightMeasures.java b/src/main/java/com/rapidminer/operator/learner/meta/SDReweightMeasures.java index 8c12d4b9a..dcabd1d18 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/SDReweightMeasures.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/SDReweightMeasures.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/SDRulesetInduction.java b/src/main/java/com/rapidminer/operator/learner/meta/SDRulesetInduction.java index c5e7f5051..3e0b9dddd 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/SDRulesetInduction.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/SDRulesetInduction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/SimpleVoteModel.java b/src/main/java/com/rapidminer/operator/learner/meta/SimpleVoteModel.java index a327aac30..04eff8e40 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/SimpleVoteModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/SimpleVoteModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/Stacking.java b/src/main/java/com/rapidminer/operator/learner/meta/Stacking.java index 14812de57..7d236bbb7 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/Stacking.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/Stacking.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/StackingModel.java b/src/main/java/com/rapidminer/operator/learner/meta/StackingModel.java index a2639d102..391d6cece 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/StackingModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/StackingModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/ThresholdModel.java b/src/main/java/com/rapidminer/operator/learner/meta/ThresholdModel.java index fb3939fac..9044e9395 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/ThresholdModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/ThresholdModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/TransformedRegression.java b/src/main/java/com/rapidminer/operator/learner/meta/TransformedRegression.java index 677f37616..e21a647ca 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/TransformedRegression.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/TransformedRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/TransformedRegressionModel.java b/src/main/java/com/rapidminer/operator/learner/meta/TransformedRegressionModel.java index cb0a080ab..0a122b287 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/TransformedRegressionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/TransformedRegressionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/Tree2RuleConverter.java b/src/main/java/com/rapidminer/operator/learner/meta/Tree2RuleConverter.java index bbb2a754c..3c5a1f9ae 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/Tree2RuleConverter.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/Tree2RuleConverter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/Vote.java b/src/main/java/com/rapidminer/operator/learner/meta/Vote.java index 75485fbf2..efd6394b6 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/Vote.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/Vote.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/meta/WeightedPerformanceMeasures.java b/src/main/java/com/rapidminer/operator/learner/meta/WeightedPerformanceMeasures.java index e9a0fc6e0..53c91d5d9 100644 --- a/src/main/java/com/rapidminer/operator/learner/meta/WeightedPerformanceMeasures.java +++ b/src/main/java/com/rapidminer/operator/learner/meta/WeightedPerformanceMeasures.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/AbstractCriterion.java b/src/main/java/com/rapidminer/operator/learner/rules/AbstractCriterion.java index a89d92a02..f8dbb72db 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/AbstractCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/AbstractCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/AccuracyCriterion.java b/src/main/java/com/rapidminer/operator/learner/rules/AccuracyCriterion.java index 3d499706b..519c066f6 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/AccuracyCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/AccuracyCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/BestRuleInduction.java b/src/main/java/com/rapidminer/operator/learner/rules/BestRuleInduction.java index 99c8fd7a1..b26a8393b 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/BestRuleInduction.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/BestRuleInduction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/ConjunctiveRuleModel.java b/src/main/java/com/rapidminer/operator/learner/rules/ConjunctiveRuleModel.java index 40d6d713a..fd7807445 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/ConjunctiveRuleModel.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/ConjunctiveRuleModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/Criterion.java b/src/main/java/com/rapidminer/operator/learner/rules/Criterion.java index a5fe6bd9b..375353a1c 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/Criterion.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/Criterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/InfoGainCriterion.java b/src/main/java/com/rapidminer/operator/learner/rules/InfoGainCriterion.java index ef74c3fd1..8087e6445 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/InfoGainCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/InfoGainCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/NumericalSplitter.java b/src/main/java/com/rapidminer/operator/learner/rules/NumericalSplitter.java index 410972c2c..ae6c5e784 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/NumericalSplitter.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/NumericalSplitter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/Rule.java b/src/main/java/com/rapidminer/operator/learner/rules/Rule.java index e277fb37e..bc60f16a3 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/Rule.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/Rule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/RuleLearner.java b/src/main/java/com/rapidminer/operator/learner/rules/RuleLearner.java index a34d86fb9..de58d5251 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/RuleLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/RuleLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/RuleModel.java b/src/main/java/com/rapidminer/operator/learner/rules/RuleModel.java index 6683b845c..97615711a 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/RuleModel.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/RuleModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/SimpleRuleLearner.java b/src/main/java/com/rapidminer/operator/learner/rules/SimpleRuleLearner.java index 057489579..06df1b180 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/SimpleRuleLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/SimpleRuleLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/SingleRuleLearner.java b/src/main/java/com/rapidminer/operator/learner/rules/SingleRuleLearner.java index 6818bfd68..d8f838a6c 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/SingleRuleLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/SingleRuleLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/Split.java b/src/main/java/com/rapidminer/operator/learner/rules/Split.java index 5aaa20440..278e92ed2 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/Split.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/Split.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/rules/TermDetermination.java b/src/main/java/com/rapidminer/operator/learner/rules/TermDetermination.java index 419d7a2ff..28f571ccb 100644 --- a/src/main/java/com/rapidminer/operator/learner/rules/TermDetermination.java +++ b/src/main/java/com/rapidminer/operator/learner/rules/TermDetermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/RuleSet.java b/src/main/java/com/rapidminer/operator/learner/subgroups/RuleSet.java index 6f82bb710..f091ef182 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/RuleSet.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/RuleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/SubgroupDiscovery.java b/src/main/java/com/rapidminer/operator/learner/subgroups/SubgroupDiscovery.java index dfa56dddc..d7b798fc4 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/SubgroupDiscovery.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/SubgroupDiscovery.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Hypothesis.java b/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Hypothesis.java index ae2650dbb..876cd200a 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Hypothesis.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Hypothesis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Literal.java b/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Literal.java index 0a3c58453..479b67baf 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Literal.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Literal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Rule.java b/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Rule.java index f765f7f5a..c85cea9d5 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Rule.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/hypothesis/Rule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Accuracy.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Accuracy.java index 818353fbb..5724af68f 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Accuracy.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Accuracy.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Bias.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Bias.java index 8b2df37f4..eb995a98c 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Bias.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Bias.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Binomial.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Binomial.java index 01a930152..fdceb6be5 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Binomial.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Binomial.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Coverage.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Coverage.java index cfb8f76eb..91d57ecb4 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Coverage.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Coverage.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Lift.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Lift.java index 1080b2fc5..346f890c0 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Lift.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Lift.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Odds.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Odds.java index 21188b613..64a8091bf 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Odds.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Odds.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/OddsRatio.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/OddsRatio.java index bf2b8d735..586cd0fb9 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/OddsRatio.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/OddsRatio.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Precision.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Precision.java index d75d2e39f..7a33f3813 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Precision.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Precision.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Squared.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Squared.java index 71528ab0a..14f457592 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Squared.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/Squared.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/UtilityFunction.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/UtilityFunction.java index c40bb2c8d..132bf0e80 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/UtilityFunction.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/UtilityFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/WRAcc.java b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/WRAcc.java index 329bcc680..f8042f860 100644 --- a/src/main/java/com/rapidminer/operator/learner/subgroups/utility/WRAcc.java +++ b/src/main/java/com/rapidminer/operator/learner/subgroups/utility/WRAcc.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/AbstractParallelTreeBuilder.java b/src/main/java/com/rapidminer/operator/learner/tree/AbstractParallelTreeBuilder.java index c19ac00fd..e80fa7e1d 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/AbstractParallelTreeBuilder.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/AbstractParallelTreeBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/AbstractParallelTreeLearner.java b/src/main/java/com/rapidminer/operator/learner/tree/AbstractParallelTreeLearner.java index 3cab4b998..4d52f2934 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/AbstractParallelTreeLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/AbstractParallelTreeLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/AbstractSplitCondition.java b/src/main/java/com/rapidminer/operator/learner/tree/AbstractSplitCondition.java index c57d46be7..a2ca951e3 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/AbstractSplitCondition.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/AbstractSplitCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/AbstractTreeLearner.java b/src/main/java/com/rapidminer/operator/learner/tree/AbstractTreeLearner.java index 91446fefd..43e9d847e 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/AbstractTreeLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/AbstractTreeLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/AttributePreprocessing.java b/src/main/java/com/rapidminer/operator/learner/tree/AttributePreprocessing.java index 87153d5b3..8ab1239fb 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/AttributePreprocessing.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/AttributePreprocessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/Benefit.java b/src/main/java/com/rapidminer/operator/learner/tree/Benefit.java index 4b68b81da..f57f584e4 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/Benefit.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/Benefit.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/BenefitCalculator.java b/src/main/java/com/rapidminer/operator/learner/tree/BenefitCalculator.java index 7930f7b78..f9d9ea38f 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/BenefitCalculator.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/BenefitCalculator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/CHAIDLearner.java b/src/main/java/com/rapidminer/operator/learner/tree/CHAIDLearner.java index c07ea41e7..b31dfc61b 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/CHAIDLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/CHAIDLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnEmptyTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnEmptyTermination.java index e84e416e6..9fc5e8dd7 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnEmptyTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnEmptyTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnExampleTable.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnExampleTable.java index c0d72b4c5..80271ae9d 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnExampleTable.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnExampleTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnFrequencyCalculator.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnFrequencyCalculator.java index 749d9d50b..0f0ef0974 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnFrequencyCalculator.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnFrequencyCalculator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnMaxDepthTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnMaxDepthTermination.java index 329fd68ca..72f18654f 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnMaxDepthTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnMaxDepthTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnMinSizeTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnMinSizeTermination.java index e5dd65e2e..63b2ce021 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnMinSizeTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnMinSizeTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnNoAttributeLeftTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnNoAttributeLeftTermination.java index 8994ddc04..641783b8a 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnNoAttributeLeftTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnNoAttributeLeftTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnNumericalRandomSplitter.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnNumericalRandomSplitter.java index 9c70418a8..98ef0055e 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnNumericalRandomSplitter.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnNumericalRandomSplitter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnNumericalSplitter.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnNumericalSplitter.java index ff25c5d2d..30d8be542 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnNumericalSplitter.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnNumericalSplitter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnSingleLabelTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnSingleLabelTermination.java index f789959b8..d624835d6 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnSingleLabelTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnSingleLabelTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnSingleValueTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnSingleValueTermination.java index 019914be3..c21550a5c 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnSingleValueTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnSingleValueTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ColumnTerminator.java b/src/main/java/com/rapidminer/operator/learner/tree/ColumnTerminator.java index 3ae298e0a..beb3773b4 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ColumnTerminator.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ColumnTerminator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ConcurrentTreeBuilder.java b/src/main/java/com/rapidminer/operator/learner/tree/ConcurrentTreeBuilder.java index 707be1719..ee0820774 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ConcurrentTreeBuilder.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ConcurrentTreeBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ConfigurableRandomForestModel.java b/src/main/java/com/rapidminer/operator/learner/tree/ConfigurableRandomForestModel.java index 17aceb29d..394b06694 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ConfigurableRandomForestModel.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ConfigurableRandomForestModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ContainsSplitCondition.java b/src/main/java/com/rapidminer/operator/learner/tree/ContainsSplitCondition.java index 51362f23f..7cccb2496 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ContainsSplitCondition.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ContainsSplitCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/DecisionStumpLearner.java b/src/main/java/com/rapidminer/operator/learner/tree/DecisionStumpLearner.java index 97cc460dd..35e752599 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/DecisionStumpLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/DecisionStumpLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/DecisionTreeLeafCreator.java b/src/main/java/com/rapidminer/operator/learner/tree/DecisionTreeLeafCreator.java index 7a3a5a0a9..76ecba97c 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/DecisionTreeLeafCreator.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/DecisionTreeLeafCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/DecisionTreeLearner.java b/src/main/java/com/rapidminer/operator/learner/tree/DecisionTreeLearner.java index d17373901..2ed93f59a 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/DecisionTreeLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/DecisionTreeLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/Edge.java b/src/main/java/com/rapidminer/operator/learner/tree/Edge.java index 358b9acea..33bee1de2 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/Edge.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/Edge.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/EmptyTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/EmptyTermination.java index 1223d2e2b..1407fd0aa 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/EmptyTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/EmptyTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/FrequencyCalculator.java b/src/main/java/com/rapidminer/operator/learner/tree/FrequencyCalculator.java index f419257c7..1d33477b2 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/FrequencyCalculator.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/FrequencyCalculator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/GreaterSplitCondition.java b/src/main/java/com/rapidminer/operator/learner/tree/GreaterSplitCondition.java index 17fa3d18d..8368184ce 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/GreaterSplitCondition.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/GreaterSplitCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ID3Learner.java b/src/main/java/com/rapidminer/operator/learner/tree/ID3Learner.java index 851f3fbca..6ab482937 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ID3Learner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ID3Learner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ID3NumericalLearner.java b/src/main/java/com/rapidminer/operator/learner/tree/ID3NumericalLearner.java index 429b58ca9..6c671a9db 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ID3NumericalLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ID3NumericalLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/LeafCreator.java b/src/main/java/com/rapidminer/operator/learner/tree/LeafCreator.java index 8dc1d403c..5ef668cd9 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/LeafCreator.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/LeafCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/LessEqualsSplitCondition.java b/src/main/java/com/rapidminer/operator/learner/tree/LessEqualsSplitCondition.java index feedbdb30..379e8e649 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/LessEqualsSplitCondition.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/LessEqualsSplitCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/MaxDepthTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/MaxDepthTermination.java index 39a6c472b..3f210ba03 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/MaxDepthTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/MaxDepthTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/MinSizeTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/MinSizeTermination.java index a99d8e4b5..346328c30 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/MinSizeTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/MinSizeTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/MinimalGainHandler.java b/src/main/java/com/rapidminer/operator/learner/tree/MinimalGainHandler.java index 328d3454e..f0be3ccea 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/MinimalGainHandler.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/MinimalGainHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/MultiCriterionDecisionStumps.java b/src/main/java/com/rapidminer/operator/learner/tree/MultiCriterionDecisionStumps.java index 0f29aa4c7..16e8ec4ab 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/MultiCriterionDecisionStumps.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/MultiCriterionDecisionStumps.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/MultiwayDecisionTree.java b/src/main/java/com/rapidminer/operator/learner/tree/MultiwayDecisionTree.java index b0453ea90..7bf59ddaf 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/MultiwayDecisionTree.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/MultiwayDecisionTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/NoAttributeLeftTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/NoAttributeLeftTermination.java index e1e97db53..92e567ff2 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/NoAttributeLeftTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/NoAttributeLeftTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/NominalSplitCondition.java b/src/main/java/com/rapidminer/operator/learner/tree/NominalSplitCondition.java index 22af8beca..38507baf2 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/NominalSplitCondition.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/NominalSplitCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/NonParallelBootstrappingTreeBuilder.java b/src/main/java/com/rapidminer/operator/learner/tree/NonParallelBootstrappingTreeBuilder.java index c0bfa185c..4e97f158e 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/NonParallelBootstrappingTreeBuilder.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/NonParallelBootstrappingTreeBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/NonParallelPreprocessingTreeBuilder.java b/src/main/java/com/rapidminer/operator/learner/tree/NonParallelPreprocessingTreeBuilder.java index f2ea07c8a..3d713af1d 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/NonParallelPreprocessingTreeBuilder.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/NonParallelPreprocessingTreeBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/NonParallelTreeBuilder.java b/src/main/java/com/rapidminer/operator/learner/tree/NonParallelTreeBuilder.java index dda9d83ea..edaa10c03 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/NonParallelTreeBuilder.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/NonParallelTreeBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/NotContainsSplitCondition.java b/src/main/java/com/rapidminer/operator/learner/tree/NotContainsSplitCondition.java index 1d29b5028..e975af74a 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/NotContainsSplitCondition.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/NotContainsSplitCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/NumericalMissingSplitCondition.java b/src/main/java/com/rapidminer/operator/learner/tree/NumericalMissingSplitCondition.java index 71822e29f..ff5ea2db8 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/NumericalMissingSplitCondition.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/NumericalMissingSplitCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/NumericalSplitter.java b/src/main/java/com/rapidminer/operator/learner/tree/NumericalSplitter.java index 0bd6947c4..efb3c7501 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/NumericalSplitter.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/NumericalSplitter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ParallelBenefit.java b/src/main/java/com/rapidminer/operator/learner/tree/ParallelBenefit.java index 6a92e9951..fc0f30842 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ParallelBenefit.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ParallelBenefit.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/ParallelDecisionTreeLeafCreator.java b/src/main/java/com/rapidminer/operator/learner/tree/ParallelDecisionTreeLeafCreator.java index da7b20de8..81acf74a5 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/ParallelDecisionTreeLeafCreator.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/ParallelDecisionTreeLeafCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -57,7 +57,9 @@ public void changeTreeToLeaf(Tree node, ColumnExampleTable columnTable, int[] se average += labelColumn[selected] * weight; count += weight; } - average /= count; + if (count != 0) { + average /= count; + } } ((RegressionTree) node).setLeaf(average); node.addCount(COUNT, selectedExamples.length); diff --git a/src/main/java/com/rapidminer/operator/learner/tree/PessimisticPruner.java b/src/main/java/com/rapidminer/operator/learner/tree/PessimisticPruner.java index 4d4045bb0..1443ad4c9 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/PessimisticPruner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/PessimisticPruner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/Pruner.java b/src/main/java/com/rapidminer/operator/learner/tree/Pruner.java index 35495cda2..4200c1e9a 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/Pruner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/Pruner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/RandomAttributeSubsetPreprocessing.java b/src/main/java/com/rapidminer/operator/learner/tree/RandomAttributeSubsetPreprocessing.java index e40aa9a55..2890f9397 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/RandomAttributeSubsetPreprocessing.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/RandomAttributeSubsetPreprocessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/RandomBenefitCalculator.java b/src/main/java/com/rapidminer/operator/learner/tree/RandomBenefitCalculator.java index eb4798e86..43bef35a0 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/RandomBenefitCalculator.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/RandomBenefitCalculator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/RandomForestLearner.java b/src/main/java/com/rapidminer/operator/learner/tree/RandomForestLearner.java index e25236353..fea640b89 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/RandomForestLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/RandomForestLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/RandomForestModel.java b/src/main/java/com/rapidminer/operator/learner/tree/RandomForestModel.java index 136576015..4d5808a93 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/RandomForestModel.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/RandomForestModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/RandomSubsetPreprocessing.java b/src/main/java/com/rapidminer/operator/learner/tree/RandomSubsetPreprocessing.java index e5f8e6c09..50e0b9aad 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/RandomSubsetPreprocessing.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/RandomSubsetPreprocessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/RandomTreeLearner.java b/src/main/java/com/rapidminer/operator/learner/tree/RandomTreeLearner.java index bc5511b09..c10a612ee 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/RandomTreeLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/RandomTreeLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/RegressionTree.java b/src/main/java/com/rapidminer/operator/learner/tree/RegressionTree.java index 912ff3412..5de4d5930 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/RegressionTree.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/RegressionTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/RegressionTreeModel.java b/src/main/java/com/rapidminer/operator/learner/tree/RegressionTreeModel.java index 0e7be3e29..38e2fa64e 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/RegressionTreeModel.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/RegressionTreeModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/RelevanceTreeLearner.java b/src/main/java/com/rapidminer/operator/learner/tree/RelevanceTreeLearner.java index 80f275330..2ddfea2f9 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/RelevanceTreeLearner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/RelevanceTreeLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/SelectionCreator.java b/src/main/java/com/rapidminer/operator/learner/tree/SelectionCreator.java index 709db37c8..d019aa27b 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/SelectionCreator.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/SelectionCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/SingleLabelTermination.java b/src/main/java/com/rapidminer/operator/learner/tree/SingleLabelTermination.java index 1b0a852e7..d0e5003f2 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/SingleLabelTermination.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/SingleLabelTermination.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/SplitCondition.java b/src/main/java/com/rapidminer/operator/learner/tree/SplitCondition.java index 7b237a16a..ff9234dd2 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/SplitCondition.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/SplitCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/SplitPreprocessing.java b/src/main/java/com/rapidminer/operator/learner/tree/SplitPreprocessing.java index bfbe5d5f1..48a549d94 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/SplitPreprocessing.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/SplitPreprocessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/Terminator.java b/src/main/java/com/rapidminer/operator/learner/tree/Terminator.java index b570764e5..cb72715d8 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/Terminator.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/Terminator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/Tree.java b/src/main/java/com/rapidminer/operator/learner/tree/Tree.java index 94ff6583d..9d867e4e1 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/Tree.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/Tree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/TreeBuilder.java b/src/main/java/com/rapidminer/operator/learner/tree/TreeBuilder.java index 09295f6ed..8c62f080e 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/TreeBuilder.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/TreeBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/TreeModel.java b/src/main/java/com/rapidminer/operator/learner/tree/TreeModel.java index 4ac0e35c4..f27f6ae50 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/TreeModel.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/TreeModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/TreePredictionModel.java b/src/main/java/com/rapidminer/operator/learner/tree/TreePredictionModel.java index e75f7ca42..8dbe6a4d3 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/TreePredictionModel.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/TreePredictionModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/TreebasedPessimisticPruner.java b/src/main/java/com/rapidminer/operator/learner/tree/TreebasedPessimisticPruner.java index 5b6ac215c..9cfe9e1e1 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/TreebasedPessimisticPruner.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/TreebasedPessimisticPruner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/AbstractColumnCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/AbstractColumnCriterion.java index f118cbd30..bafe285d9 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/AbstractColumnCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/AbstractColumnCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/AbstractCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/AbstractCriterion.java index 9e71faa34..721818d56 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/AbstractCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/AbstractCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/AccuracyColumnCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/AccuracyColumnCriterion.java index 1c5fbba56..45b5d9cdd 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/AccuracyColumnCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/AccuracyColumnCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/AccuracyCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/AccuracyCriterion.java index ac03ec938..4a78f4e2e 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/AccuracyCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/AccuracyCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/ColumnCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/ColumnCriterion.java index 8c7a54f4d..e4cb58f24 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/ColumnCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/ColumnCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/Criterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/Criterion.java index 54e7e8c81..e6096f794 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/Criterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/Criterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/GainRatioColumnCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/GainRatioColumnCriterion.java index 86e6dbd5d..d88c24eb8 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/GainRatioColumnCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/GainRatioColumnCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/GainRatioCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/GainRatioCriterion.java index 676d053cb..b948810c1 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/GainRatioCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/GainRatioCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/GiniIndexColumnCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/GiniIndexColumnCriterion.java index a4f56a8f3..202fe1f6f 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/GiniIndexColumnCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/GiniIndexColumnCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/GiniIndexCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/GiniIndexCriterion.java index f6049bfc3..2ff4166ee 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/GiniIndexCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/GiniIndexCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/InfoGainColumnCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/InfoGainColumnCriterion.java index 7d98096a5..236cc10d2 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/InfoGainColumnCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/InfoGainColumnCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/InfoGainCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/InfoGainCriterion.java index 757b21e2a..18b0f233f 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/InfoGainCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/InfoGainCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/LeastSquareColumnCriterion.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/LeastSquareColumnCriterion.java index c71fbf2e5..53342f4c7 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/LeastSquareColumnCriterion.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/LeastSquareColumnCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/learner/tree/criterions/WeightDistribution.java b/src/main/java/com/rapidminer/operator/learner/tree/criterions/WeightDistribution.java index c222870d6..293596679 100644 --- a/src/main/java/com/rapidminer/operator/learner/tree/criterions/WeightDistribution.java +++ b/src/main/java/com/rapidminer/operator/learner/tree/criterions/WeightDistribution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/libraries/AbstractOperatorLibrary.java b/src/main/java/com/rapidminer/operator/libraries/AbstractOperatorLibrary.java index d1a1c7c68..706309b14 100644 --- a/src/main/java/com/rapidminer/operator/libraries/AbstractOperatorLibrary.java +++ b/src/main/java/com/rapidminer/operator/libraries/AbstractOperatorLibrary.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/libraries/LibraryOperatorDescription.java b/src/main/java/com/rapidminer/operator/libraries/LibraryOperatorDescription.java index 3a7107357..fdda95c58 100644 --- a/src/main/java/com/rapidminer/operator/libraries/LibraryOperatorDescription.java +++ b/src/main/java/com/rapidminer/operator/libraries/LibraryOperatorDescription.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/libraries/OperatorLibrary.java b/src/main/java/com/rapidminer/operator/libraries/OperatorLibrary.java index 0adb490f6..2c00571fd 100644 --- a/src/main/java/com/rapidminer/operator/libraries/OperatorLibrary.java +++ b/src/main/java/com/rapidminer/operator/libraries/OperatorLibrary.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/libraries/OperatorLibraryDocBundle.java b/src/main/java/com/rapidminer/operator/libraries/OperatorLibraryDocBundle.java index 35907bbbd..547504635 100644 --- a/src/main/java/com/rapidminer/operator/libraries/OperatorLibraryDocBundle.java +++ b/src/main/java/com/rapidminer/operator/libraries/OperatorLibraryDocBundle.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/macros/UnsetMacroOperator.java b/src/main/java/com/rapidminer/operator/macros/UnsetMacroOperator.java index 6037bc078..317b29e71 100644 --- a/src/main/java/com/rapidminer/operator/macros/UnsetMacroOperator.java +++ b/src/main/java/com/rapidminer/operator/macros/UnsetMacroOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/AbsoluteSplitChain.java b/src/main/java/com/rapidminer/operator/meta/AbsoluteSplitChain.java index 068eac482..378cdc9af 100644 --- a/src/main/java/com/rapidminer/operator/meta/AbsoluteSplitChain.java +++ b/src/main/java/com/rapidminer/operator/meta/AbsoluteSplitChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/AbstractFileIterator.java b/src/main/java/com/rapidminer/operator/meta/AbstractFileIterator.java index cee90cba6..46e5815bd 100644 --- a/src/main/java/com/rapidminer/operator/meta/AbstractFileIterator.java +++ b/src/main/java/com/rapidminer/operator/meta/AbstractFileIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/AbstractIteratingOperatorChain.java b/src/main/java/com/rapidminer/operator/meta/AbstractIteratingOperatorChain.java index 9ff852c8f..d1d8fb166 100644 --- a/src/main/java/com/rapidminer/operator/meta/AbstractIteratingOperatorChain.java +++ b/src/main/java/com/rapidminer/operator/meta/AbstractIteratingOperatorChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/AbstractRepositoryIterator.java b/src/main/java/com/rapidminer/operator/meta/AbstractRepositoryIterator.java index 1db0a1407..e3a44f652 100644 --- a/src/main/java/com/rapidminer/operator/meta/AbstractRepositoryIterator.java +++ b/src/main/java/com/rapidminer/operator/meta/AbstractRepositoryIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/AbstractSplitChain.java b/src/main/java/com/rapidminer/operator/meta/AbstractSplitChain.java index d097fcb06..aa8e0de34 100644 --- a/src/main/java/com/rapidminer/operator/meta/AbstractSplitChain.java +++ b/src/main/java/com/rapidminer/operator/meta/AbstractSplitChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/AverageBuilder.java b/src/main/java/com/rapidminer/operator/meta/AverageBuilder.java index c38105924..7944e6982 100644 --- a/src/main/java/com/rapidminer/operator/meta/AverageBuilder.java +++ b/src/main/java/com/rapidminer/operator/meta/AverageBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/BatchProcessing.java b/src/main/java/com/rapidminer/operator/meta/BatchProcessing.java index ff0adf553..5fb3bb8c1 100644 --- a/src/main/java/com/rapidminer/operator/meta/BatchProcessing.java +++ b/src/main/java/com/rapidminer/operator/meta/BatchProcessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ClusterIterator.java b/src/main/java/com/rapidminer/operator/meta/ClusterIterator.java index a3f6895f8..0eea233d3 100644 --- a/src/main/java/com/rapidminer/operator/meta/ClusterIterator.java +++ b/src/main/java/com/rapidminer/operator/meta/ClusterIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ESParameterOptimization.java b/src/main/java/com/rapidminer/operator/meta/ESParameterOptimization.java index 34dc639f2..d94a21040 100644 --- a/src/main/java/com/rapidminer/operator/meta/ESParameterOptimization.java +++ b/src/main/java/com/rapidminer/operator/meta/ESParameterOptimization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/EvolutionaryParameterOptimizationOperator.java b/src/main/java/com/rapidminer/operator/meta/EvolutionaryParameterOptimizationOperator.java index b408853aa..7ca0d9d9d 100644 --- a/src/main/java/com/rapidminer/operator/meta/EvolutionaryParameterOptimizationOperator.java +++ b/src/main/java/com/rapidminer/operator/meta/EvolutionaryParameterOptimizationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ExampleIterator.java b/src/main/java/com/rapidminer/operator/meta/ExampleIterator.java index 783a7b220..3d343f192 100644 --- a/src/main/java/com/rapidminer/operator/meta/ExampleIterator.java +++ b/src/main/java/com/rapidminer/operator/meta/ExampleIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ExampleSetIterator.java b/src/main/java/com/rapidminer/operator/meta/ExampleSetIterator.java index 378ffdc66..467f0e702 100644 --- a/src/main/java/com/rapidminer/operator/meta/ExampleSetIterator.java +++ b/src/main/java/com/rapidminer/operator/meta/ExampleSetIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ExceptionHandling.java b/src/main/java/com/rapidminer/operator/meta/ExceptionHandling.java index 6bcf76563..3a5653466 100644 --- a/src/main/java/com/rapidminer/operator/meta/ExceptionHandling.java +++ b/src/main/java/com/rapidminer/operator/meta/ExceptionHandling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/FeatureIterator.java b/src/main/java/com/rapidminer/operator/meta/FeatureIterator.java index 6c1db6418..b1b2203c7 100644 --- a/src/main/java/com/rapidminer/operator/meta/FeatureIterator.java +++ b/src/main/java/com/rapidminer/operator/meta/FeatureIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/FeatureSubsetIteration.java b/src/main/java/com/rapidminer/operator/meta/FeatureSubsetIteration.java index bcf1742d6..8c60fb040 100644 --- a/src/main/java/com/rapidminer/operator/meta/FeatureSubsetIteration.java +++ b/src/main/java/com/rapidminer/operator/meta/FeatureSubsetIteration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/FileIterator.java b/src/main/java/com/rapidminer/operator/meta/FileIterator.java index dfac801e9..fe3d27f60 100644 --- a/src/main/java/com/rapidminer/operator/meta/FileIterator.java +++ b/src/main/java/com/rapidminer/operator/meta/FileIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/GridSearchParameterOptimizationOperator.java b/src/main/java/com/rapidminer/operator/meta/GridSearchParameterOptimizationOperator.java index 12ab3d420..e12623e69 100644 --- a/src/main/java/com/rapidminer/operator/meta/GridSearchParameterOptimizationOperator.java +++ b/src/main/java/com/rapidminer/operator/meta/GridSearchParameterOptimizationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/IteratingOperatorChain.java b/src/main/java/com/rapidminer/operator/meta/IteratingOperatorChain.java index c31d491fc..d62ed2f76 100644 --- a/src/main/java/com/rapidminer/operator/meta/IteratingOperatorChain.java +++ b/src/main/java/com/rapidminer/operator/meta/IteratingOperatorChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/LearningCurveOperator.java b/src/main/java/com/rapidminer/operator/meta/LearningCurveOperator.java index c693d6fd7..d95e234dd 100644 --- a/src/main/java/com/rapidminer/operator/meta/LearningCurveOperator.java +++ b/src/main/java/com/rapidminer/operator/meta/LearningCurveOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/MultipleLabelIterator.java b/src/main/java/com/rapidminer/operator/meta/MultipleLabelIterator.java index 0db905a5a..578ad73d9 100644 --- a/src/main/java/com/rapidminer/operator/meta/MultipleLabelIterator.java +++ b/src/main/java/com/rapidminer/operator/meta/MultipleLabelIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/OperatorEnabler.java b/src/main/java/com/rapidminer/operator/meta/OperatorEnabler.java index be3af910c..fb2a7381a 100644 --- a/src/main/java/com/rapidminer/operator/meta/OperatorEnabler.java +++ b/src/main/java/com/rapidminer/operator/meta/OperatorEnabler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/OperatorSelector.java b/src/main/java/com/rapidminer/operator/meta/OperatorSelector.java index 052a5feed..8e37f63ee 100644 --- a/src/main/java/com/rapidminer/operator/meta/OperatorSelector.java +++ b/src/main/java/com/rapidminer/operator/meta/OperatorSelector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -74,7 +74,7 @@ public void transformMD() { getSubprocess(i).transformMetaData(); } } - if ((operatorIndex >= 0) && (operatorIndex < getNumberOfSubprocesses())) { + if ((operatorIndex >= 0) && (operatorIndex < getNumberOfSubprocesses())) { getSubprocess(operatorIndex).transformMetaData(); } } catch (Exception e) { diff --git a/src/main/java/com/rapidminer/operator/meta/ParameterCloner.java b/src/main/java/com/rapidminer/operator/meta/ParameterCloner.java index 3a38c2be0..d1a41f655 100644 --- a/src/main/java/com/rapidminer/operator/meta/ParameterCloner.java +++ b/src/main/java/com/rapidminer/operator/meta/ParameterCloner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ParameterConfigurator.java b/src/main/java/com/rapidminer/operator/meta/ParameterConfigurator.java index 7e09fb973..30044db25 100644 --- a/src/main/java/com/rapidminer/operator/meta/ParameterConfigurator.java +++ b/src/main/java/com/rapidminer/operator/meta/ParameterConfigurator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ParameterIteratingOperatorChain.java b/src/main/java/com/rapidminer/operator/meta/ParameterIteratingOperatorChain.java index 125fb824b..6fb019dc9 100644 --- a/src/main/java/com/rapidminer/operator/meta/ParameterIteratingOperatorChain.java +++ b/src/main/java/com/rapidminer/operator/meta/ParameterIteratingOperatorChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -64,24 +64,24 @@ * * @author Tobias Malbrecht */ -public abstract class ParameterIteratingOperatorChain extends OperatorChain implements ParameterConfigurator { +public abstract class ParameterIteratingOperatorChain extends OperatorChain implements ParameterConfigurator { /** Last version where errors in the inner process were not handled properly. */ public static final OperatorVersion CHANGE_6_0_3_ERROR_HANDLING = new OperatorVersion(6, 0, 3); - /** @deprecated since 8.0. Use {@link ParameterConfigurator#PARAMETER_PARAMETERS} instead */ - @Deprecated - public static final String PARAMETER_PARAMETERS = ParameterConfigurator.PARAMETER_PARAMETERS; - /** @deprecated since 8.0. Use {@link ParameterConfigurator#PARAMETER_VALUES} instead */ - @Deprecated - public static final String PARAMETER_VALUES = ParameterConfigurator.PARAMETER_VALUES; + /** @deprecated since 8.0. Use {@link ParameterConfigurator#PARAMETER_PARAMETERS} instead */ + @Deprecated + public static final String PARAMETER_PARAMETERS = ParameterConfigurator.PARAMETER_PARAMETERS; + /** @deprecated since 8.0. Use {@link ParameterConfigurator#PARAMETER_VALUES} instead */ + @Deprecated + public static final String PARAMETER_VALUES = ParameterConfigurator.PARAMETER_VALUES; - /** @deprecated since 8.0. Use {@link ParameterConfigurator#VALUE_MODE_DISCRETE} instead */ - @Deprecated - public static final int VALUE_MODE_DISCRETE = ParameterConfigurator.VALUE_MODE_DISCRETE; - /** @deprecated since 8.0. Use {@link ParameterConfigurator#VALUE_MODE_CONTINUOUS} instead */ - @Deprecated - public static final int VALUE_MODE_CONTINUOUS = ParameterConfigurator.VALUE_MODE_CONTINUOUS; + /** @deprecated since 8.0. Use {@link ParameterConfigurator#VALUE_MODE_DISCRETE} instead */ + @Deprecated + public static final int VALUE_MODE_DISCRETE = ParameterConfigurator.VALUE_MODE_DISCRETE; + /** @deprecated since 8.0. Use {@link ParameterConfigurator#VALUE_MODE_CONTINUOUS} instead */ + @Deprecated + public static final int VALUE_MODE_CONTINUOUS = ParameterConfigurator.VALUE_MODE_CONTINUOUS; private static final int PARAMETER_VALUES_ARRAY_LENGTH_RANGE = 2; @@ -140,7 +140,7 @@ protected InputPort getPerformanceInnerSink() { /** * Parses a parameter list and creates the corresponding data structures. */ - @Override + @Override public List parseParameterValues(List parameterList) throws OperatorException { if (getProcess() == null) { getLogger().warning("Cannot parse parameters while operator is not attached to a process."); @@ -170,20 +170,20 @@ public List parseParameterValues(List parameterList) String[] parameterValuesArray = parameterValuesString.substring(startIndex + 1, endIndex).trim() .split("[;:,]"); switch (parameterValuesArray.length) { - case PARAMETER_VALUES_ARRAY_LENGTH_RANGE: { - // value range: [minValue;maxValue] + case PARAMETER_VALUES_ARRAY_LENGTH_RANGE: { + // value range: [minValue;maxValue] parameterValues = new ParameterValueRange(operator, parameterType, parameterValuesArray[0], parameterValuesArray[1]); } break; - case PARAMETER_VALUES_ARRAY_LENGTH_GRID: { - // value grid: [minValue;maxValue;stepSize] + case PARAMETER_VALUES_ARRAY_LENGTH_GRID: { + // value grid: [minValue;maxValue;stepSize] parameterValues = new ParameterValueGrid(operator, parameterType, parameterValuesArray[0], parameterValuesArray[1], parameterValuesArray[2]); } break; - case PARAMETER_VALUES_ARRAY_LENGTH_SCALED_GRID: { - // value grid: [minValue;maxValue;noOfSteps;scale] + case PARAMETER_VALUES_ARRAY_LENGTH_SCALED_GRID: { + // value grid: [minValue;maxValue;noOfSteps;scale] parameterValues = new ParameterValueGrid(operator, parameterType, parameterValuesArray[0], parameterValuesArray[1], parameterValuesArray[2], parameterValuesArray[3]); } @@ -307,11 +307,11 @@ public List getParameterTypes() { ParameterType type = new ParameterTypeConfiguration(ConfigureParameterOptimizationDialogCreator.class, this); type.setExpert(false); types.add(type); - type = new ParameterTypeList(ParameterConfigurator.PARAMETER_PARAMETERS, "The parameters.", + type = new ParameterTypeList(ParameterConfigurator.PARAMETER_PARAMETERS, "The parameters.", new ParameterTypeTupel(PARAMETER_OPERATOR_PARAMETER_PAIR, "The operator and it's parameter", - new ParameterTypeInnerOperator(PARAMETER_OPERATOR, "The operator."), - new ParameterTypeString(PARAMETER_PARAMETER, "The parameter.")), - new ParameterTypeParameterValue(ParameterConfigurator.PARAMETER_VALUES, + new ParameterTypeInnerOperator(PARAMETER_OPERATOR, "The operator."), + new ParameterTypeString(PARAMETER_PARAMETER, "The parameter.")), + new ParameterTypeParameterValue(ParameterConfigurator.PARAMETER_VALUES, "The value specifications for the parameters.")); type.setHidden(true); types.add(type); @@ -339,7 +339,7 @@ public OperatorVersion[] getIncompatibleVersionChanges() { public int checkProperties() { boolean parametersPresent = false; try { - List list = parseParameterValues(getParameterList(ParameterConfigurator.PARAMETER_PARAMETERS)); + List list = parseParameterValues(getParameterList(ParameterConfigurator.PARAMETER_PARAMETERS)); if (list != null && list.size() > 0) { parametersPresent = true; } diff --git a/src/main/java/com/rapidminer/operator/meta/ParameterIteration.java b/src/main/java/com/rapidminer/operator/meta/ParameterIteration.java index 624d8b26d..ce12db86c 100644 --- a/src/main/java/com/rapidminer/operator/meta/ParameterIteration.java +++ b/src/main/java/com/rapidminer/operator/meta/ParameterIteration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ParameterOptimizationOperator.java b/src/main/java/com/rapidminer/operator/meta/ParameterOptimizationOperator.java index c4d950a37..964c5500e 100644 --- a/src/main/java/com/rapidminer/operator/meta/ParameterOptimizationOperator.java +++ b/src/main/java/com/rapidminer/operator/meta/ParameterOptimizationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ParameterSet.java b/src/main/java/com/rapidminer/operator/meta/ParameterSet.java index 3f3e374dd..ee68200c5 100644 --- a/src/main/java/com/rapidminer/operator/meta/ParameterSet.java +++ b/src/main/java/com/rapidminer/operator/meta/ParameterSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,13 +18,6 @@ */ package com.rapidminer.operator.meta; -import com.rapidminer.Process; -import com.rapidminer.RapidMiner; -import com.rapidminer.operator.Operator; -import com.rapidminer.operator.ResultObjectAdapter; -import com.rapidminer.operator.performance.PerformanceVector; -import com.rapidminer.tools.Tools; - import java.io.File; import java.io.FileWriter; import java.io.IOException; @@ -37,7 +30,6 @@ import java.util.List; import java.util.Map; -import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; @@ -46,6 +38,14 @@ import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import com.rapidminer.Process; +import com.rapidminer.RapidMiner; +import com.rapidminer.io.process.XMLTools; +import com.rapidminer.operator.Operator; +import com.rapidminer.operator.ResultObjectAdapter; +import com.rapidminer.operator.performance.PerformanceVector; +import com.rapidminer.tools.Tools; + /** * A set of parameters generated by a ParameterOptimizationOperator. @@ -184,9 +184,9 @@ public static ParameterSet readParameterSet(InputStream in) throws IOException { ParameterSet parameterSet = new ParameterSet(); Document document = null; try { - document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in); - } catch (SAXException | ParserConfigurationException e1) { - throw new IOException(e1.getMessage()); + document = XMLTools.createDocumentBuilder().parse(in); + } catch (SAXException e) { + throw new IOException(e.getMessage()); } Element parametersElement = document.getDocumentElement(); diff --git a/src/main/java/com/rapidminer/operator/meta/ParameterSetter.java b/src/main/java/com/rapidminer/operator/meta/ParameterSetter.java index aab5260a0..76bcb0d92 100644 --- a/src/main/java/com/rapidminer/operator/meta/ParameterSetter.java +++ b/src/main/java/com/rapidminer/operator/meta/ParameterSetter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ParameterValue.java b/src/main/java/com/rapidminer/operator/meta/ParameterValue.java index efbb28057..7e44c0188 100644 --- a/src/main/java/com/rapidminer/operator/meta/ParameterValue.java +++ b/src/main/java/com/rapidminer/operator/meta/ParameterValue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/PartialExampleSetLearner.java b/src/main/java/com/rapidminer/operator/meta/PartialExampleSetLearner.java index 1bb4e29ae..493fad849 100644 --- a/src/main/java/com/rapidminer/operator/meta/PartialExampleSetLearner.java +++ b/src/main/java/com/rapidminer/operator/meta/PartialExampleSetLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/QuadraticParameterOptimizationOperator.java b/src/main/java/com/rapidminer/operator/meta/QuadraticParameterOptimizationOperator.java index aa7a277c1..a6165f101 100644 --- a/src/main/java/com/rapidminer/operator/meta/QuadraticParameterOptimizationOperator.java +++ b/src/main/java/com/rapidminer/operator/meta/QuadraticParameterOptimizationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/RandomOptimizationChain.java b/src/main/java/com/rapidminer/operator/meta/RandomOptimizationChain.java index cbce1dd03..2d82a8f70 100644 --- a/src/main/java/com/rapidminer/operator/meta/RandomOptimizationChain.java +++ b/src/main/java/com/rapidminer/operator/meta/RandomOptimizationChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/RatioSplitChain.java b/src/main/java/com/rapidminer/operator/meta/RatioSplitChain.java index a3769bcc8..5ed5ec588 100644 --- a/src/main/java/com/rapidminer/operator/meta/RatioSplitChain.java +++ b/src/main/java/com/rapidminer/operator/meta/RatioSplitChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/RepeatUntilOperatorChain.java b/src/main/java/com/rapidminer/operator/meta/RepeatUntilOperatorChain.java index c068538ac..5309b4c13 100644 --- a/src/main/java/com/rapidminer/operator/meta/RepeatUntilOperatorChain.java +++ b/src/main/java/com/rapidminer/operator/meta/RepeatUntilOperatorChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/RepositoryIterator.java b/src/main/java/com/rapidminer/operator/meta/RepositoryIterator.java index fbbff8cdd..d519037a6 100644 --- a/src/main/java/com/rapidminer/operator/meta/RepositoryIterator.java +++ b/src/main/java/com/rapidminer/operator/meta/RepositoryIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ThrowExceptionOperator.java b/src/main/java/com/rapidminer/operator/meta/ThrowExceptionOperator.java index 6219cc3c7..616557383 100644 --- a/src/main/java/com/rapidminer/operator/meta/ThrowExceptionOperator.java +++ b/src/main/java/com/rapidminer/operator/meta/ThrowExceptionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ValueIteration.java b/src/main/java/com/rapidminer/operator/meta/ValueIteration.java index 614728789..2f69bfa40 100644 --- a/src/main/java/com/rapidminer/operator/meta/ValueIteration.java +++ b/src/main/java/com/rapidminer/operator/meta/ValueIteration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ValueSubgroupIteration.java b/src/main/java/com/rapidminer/operator/meta/ValueSubgroupIteration.java index 64fb26f67..b0e59484d 100644 --- a/src/main/java/com/rapidminer/operator/meta/ValueSubgroupIteration.java +++ b/src/main/java/com/rapidminer/operator/meta/ValueSubgroupIteration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/XVPrediction.java b/src/main/java/com/rapidminer/operator/meta/XVPrediction.java index b5e6fd6ee..94c9e8239 100644 --- a/src/main/java/com/rapidminer/operator/meta/XVPrediction.java +++ b/src/main/java/com/rapidminer/operator/meta/XVPrediction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/ZippedFileIterator.java b/src/main/java/com/rapidminer/operator/meta/ZippedFileIterator.java index ab3f4a488..e5d4e5239 100644 --- a/src/main/java/com/rapidminer/operator/meta/ZippedFileIterator.java +++ b/src/main/java/com/rapidminer/operator/meta/ZippedFileIterator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/AttributeAvailableCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/AttributeAvailableCondition.java index fd12daea7..4850f7801 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/AttributeAvailableCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/AttributeAvailableCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/DataValueCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/DataValueCondition.java index c7f9a864b..fc1ed5dfb 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/DataValueCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/DataValueCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/ExpressionCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/ExpressionCondition.java index 77e8d6ad0..30837512f 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/ExpressionCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/ExpressionCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/FileExistsCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/FileExistsCondition.java index bfad5181d..d33f1b788 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/FileExistsCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/FileExistsCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/InputExistsCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/InputExistsCondition.java index 82ca261c7..c0f6ea688 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/InputExistsCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/InputExistsCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/MacroDefinedCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/MacroDefinedCondition.java index c8cd0881c..afcd2a7b7 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/MacroDefinedCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/MacroDefinedCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/MaxFitnessCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/MaxFitnessCondition.java index d138a03cc..55c56a212 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/MaxFitnessCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/MaxFitnessCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/MaxNumberOfAttributesCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/MaxNumberOfAttributesCondition.java index a501472fc..b9e389097 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/MaxNumberOfAttributesCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/MaxNumberOfAttributesCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/MaxNumberOfExamplesCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/MaxNumberOfExamplesCondition.java index ee767f956..5d588d7cb 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/MaxNumberOfExamplesCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/MaxNumberOfExamplesCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/MaxPerformanceValueCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/MaxPerformanceValueCondition.java index 88c9646ea..688c77b0f 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/MaxPerformanceValueCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/MaxPerformanceValueCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/MinFitnessCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/MinFitnessCondition.java index 066a6628e..07ae43170 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/MinFitnessCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/MinFitnessCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/MinNumberOfAttributesCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/MinNumberOfAttributesCondition.java index 21c2aeb06..1aa34c93c 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/MinNumberOfAttributesCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/MinNumberOfAttributesCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/MinNumberOfExamplesCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/MinNumberOfExamplesCondition.java index d949099ac..d61b310ec 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/MinNumberOfExamplesCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/MinNumberOfExamplesCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/MinPerformanceValueCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/MinPerformanceValueCondition.java index ed956790d..c5dafdc28 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/MinPerformanceValueCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/MinPerformanceValueCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/meta/branch/ProcessBranch.java b/src/main/java/com/rapidminer/operator/meta/branch/ProcessBranch.java index 3b4fe76f0..99ae11ce1 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/ProcessBranch.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/ProcessBranch.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -244,8 +244,8 @@ public List getParameterTypes() { type = new ParameterTypeString(PARAMETER_CONDITION_VALUE, "A condition parameter which might be desired for some condition checks.", true); type.setExpert(false); - type.registerDependencyCondition(new NonEqualStringCondition(this, PARAMETER_CONDITION_TYPE, true, - CONDITION_INPUT_EXISTS)); + type.registerDependencyCondition(new NonEqualStringCondition(this, PARAMETER_CONDITION_TYPE, true, + CONDITION_INPUT_EXISTS)); // Only show condition parameter in for CONDITION_EXPRESSION in case version is at most 6.4 // (version <= 6.4 && type == expression) || ( type != expression) diff --git a/src/main/java/com/rapidminer/operator/meta/branch/ProcessBranchCondition.java b/src/main/java/com/rapidminer/operator/meta/branch/ProcessBranchCondition.java index 8af838991..a79b10702 100644 --- a/src/main/java/com/rapidminer/operator/meta/branch/ProcessBranchCondition.java +++ b/src/main/java/com/rapidminer/operator/meta/branch/ProcessBranchCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/AbstractDataImportWizard.java b/src/main/java/com/rapidminer/operator/nio/AbstractDataImportWizard.java index 4b4bc3826..83b4c2be6 100644 --- a/src/main/java/com/rapidminer/operator/nio/AbstractDataImportWizard.java +++ b/src/main/java/com/rapidminer/operator/nio/AbstractDataImportWizard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/AnnotationCellEditor.java b/src/main/java/com/rapidminer/operator/nio/AnnotationCellEditor.java index 5f7570916..d6bde0f3c 100644 --- a/src/main/java/com/rapidminer/operator/nio/AnnotationCellEditor.java +++ b/src/main/java/com/rapidminer/operator/nio/AnnotationCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/AnnotationDeclarationWizardStep.java b/src/main/java/com/rapidminer/operator/nio/AnnotationDeclarationWizardStep.java index 0103ed0cc..6bc6417a2 100644 --- a/src/main/java/com/rapidminer/operator/nio/AnnotationDeclarationWizardStep.java +++ b/src/main/java/com/rapidminer/operator/nio/AnnotationDeclarationWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/AnnotationTableModel.java b/src/main/java/com/rapidminer/operator/nio/AnnotationTableModel.java index 305d8f647..d02779b13 100644 --- a/src/main/java/com/rapidminer/operator/nio/AnnotationTableModel.java +++ b/src/main/java/com/rapidminer/operator/nio/AnnotationTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/CSVExampleSource.java b/src/main/java/com/rapidminer/operator/nio/CSVExampleSource.java index fb5d1e9b7..4fb9beb08 100644 --- a/src/main/java/com/rapidminer/operator/nio/CSVExampleSource.java +++ b/src/main/java/com/rapidminer/operator/nio/CSVExampleSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/CSVExampleSourceConfigurationWizardCreator.java b/src/main/java/com/rapidminer/operator/nio/CSVExampleSourceConfigurationWizardCreator.java index 164d75e8a..160470073 100644 --- a/src/main/java/com/rapidminer/operator/nio/CSVExampleSourceConfigurationWizardCreator.java +++ b/src/main/java/com/rapidminer/operator/nio/CSVExampleSourceConfigurationWizardCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/CSVFileSelectionWizardStep.java b/src/main/java/com/rapidminer/operator/nio/CSVFileSelectionWizardStep.java index 6607506c1..fda6f5559 100644 --- a/src/main/java/com/rapidminer/operator/nio/CSVFileSelectionWizardStep.java +++ b/src/main/java/com/rapidminer/operator/nio/CSVFileSelectionWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/CSVImportWizard.java b/src/main/java/com/rapidminer/operator/nio/CSVImportWizard.java index dcfd1f067..643881541 100644 --- a/src/main/java/com/rapidminer/operator/nio/CSVImportWizard.java +++ b/src/main/java/com/rapidminer/operator/nio/CSVImportWizard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/CSVSyntaxConfigurationWizardStep.java b/src/main/java/com/rapidminer/operator/nio/CSVSyntaxConfigurationWizardStep.java index f08459bb0..c44b2ddbc 100644 --- a/src/main/java/com/rapidminer/operator/nio/CSVSyntaxConfigurationWizardStep.java +++ b/src/main/java/com/rapidminer/operator/nio/CSVSyntaxConfigurationWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/ErrorTableModel.java b/src/main/java/com/rapidminer/operator/nio/ErrorTableModel.java index c32d6acc0..c8548168a 100644 --- a/src/main/java/com/rapidminer/operator/nio/ErrorTableModel.java +++ b/src/main/java/com/rapidminer/operator/nio/ErrorTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/ExcelExampleSource.java b/src/main/java/com/rapidminer/operator/nio/ExcelExampleSource.java index a52892af3..329de894f 100644 --- a/src/main/java/com/rapidminer/operator/nio/ExcelExampleSource.java +++ b/src/main/java/com/rapidminer/operator/nio/ExcelExampleSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -36,9 +36,12 @@ import com.rapidminer.operator.nio.model.ExcelResultSetConfiguration; import com.rapidminer.operator.nio.model.xlsx.XlsxResultSet; import com.rapidminer.parameter.ParameterType; +import com.rapidminer.parameter.ParameterTypeCategory; import com.rapidminer.parameter.ParameterTypeConfiguration; import com.rapidminer.parameter.ParameterTypeInt; import com.rapidminer.parameter.ParameterTypeString; +import com.rapidminer.parameter.conditions.EqualStringCondition; +import com.rapidminer.parameter.conditions.NonEqualStringCondition; import com.rapidminer.tools.io.Encoding; @@ -75,11 +78,36 @@ public class ExcelExampleSource extends AbstractDataResultSetReader { */ public static final String PARAMETER_EXCEL_FILE = "excel_file"; + /** + * The parameter name for "The sheet selection mode." + */ + public static final String PARAMETER_SHEET_SELECTION = "sheet_selection"; + /** * The parameter name for "The number of the sheet which should be imported." */ public static final String PARAMETER_SHEET_NUMBER = "sheet_number"; + /** + * The parameter name for "The name of the sheet which should be imported." + */ + public static final String PARAMETER_SHEET_NAME = "sheet_name"; + + /** + * {@link #SHEET_SELECTION_MODES} index - select by number + */ + public static final int SHEET_SELECT_BY_INDEX = 0; + + /** + * {@link #SHEET_SELECTION_MODES} index - select by name + */ + public static final int SHEET_SELECT_BY_NAME = 1; + + /** + * Selection modes for sheets + */ + private static final String[] SHEET_SELECTION_MODES = {PARAMETER_SHEET_NUMBER.replace("_", " "), PARAMETER_SHEET_NAME.replace("_", " ")}; + /** * The parameter name for "Indicates which column should be used for the label attribute * (0: no label)" @@ -167,9 +195,20 @@ public List getParameterTypes() { types.add(type); types.add(makeFileParameterType()); + ParameterTypeCategory sheetSelection = new ParameterTypeCategory(PARAMETER_SHEET_SELECTION, + "Select the sheet by index or by name.", + SHEET_SELECTION_MODES, SHEET_SELECT_BY_INDEX); + types.add(sheetSelection); + + ParameterTypeString selectBySheetName = new ParameterTypeString(PARAMETER_SHEET_NAME, "The name of the sheet which should be imported.", true, false); + selectBySheetName.registerDependencyCondition(new EqualStringCondition(this, PARAMETER_SHEET_SELECTION, false, String.valueOf(SHEET_SELECT_BY_NAME), SHEET_SELECTION_MODES[SHEET_SELECT_BY_NAME])); + types.add(selectBySheetName); + + ParameterTypeInt selectBySheetNumber = new ParameterTypeInt(PARAMETER_SHEET_NUMBER, "The number of the sheet which should be imported.", 1, + Integer.MAX_VALUE, 1, false); + selectBySheetNumber.registerDependencyCondition(new NonEqualStringCondition(this, PARAMETER_SHEET_SELECTION, false, String.valueOf(SHEET_SELECT_BY_NAME), SHEET_SELECTION_MODES[SHEET_SELECT_BY_NAME])); + types.add(selectBySheetNumber); - types.add(new ParameterTypeInt(PARAMETER_SHEET_NUMBER, "The number of the sheet which should be imported.", 1, - Integer.MAX_VALUE, 1, false)); types.add(new ParameterTypeString(PARAMETER_IMPORTED_CELL_RANGE, "Cells to import, in Excel notation, e.g. B2:D25 or B2 for an open interval.", "A1")); diff --git a/src/main/java/com/rapidminer/operator/nio/ExcelExampleSourceConfigurationWizardCreator.java b/src/main/java/com/rapidminer/operator/nio/ExcelExampleSourceConfigurationWizardCreator.java index 759c99021..6722b7586 100644 --- a/src/main/java/com/rapidminer/operator/nio/ExcelExampleSourceConfigurationWizardCreator.java +++ b/src/main/java/com/rapidminer/operator/nio/ExcelExampleSourceConfigurationWizardCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/ExcelFileSelectionWizardStep.java b/src/main/java/com/rapidminer/operator/nio/ExcelFileSelectionWizardStep.java index b3e3bc183..81cfa3c77 100644 --- a/src/main/java/com/rapidminer/operator/nio/ExcelFileSelectionWizardStep.java +++ b/src/main/java/com/rapidminer/operator/nio/ExcelFileSelectionWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/ExcelFormatExampleSource.java b/src/main/java/com/rapidminer/operator/nio/ExcelFormatExampleSource.java index c7c00fd47..35835903e 100644 --- a/src/main/java/com/rapidminer/operator/nio/ExcelFormatExampleSource.java +++ b/src/main/java/com/rapidminer/operator/nio/ExcelFormatExampleSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/ExcelImportWizard.java b/src/main/java/com/rapidminer/operator/nio/ExcelImportWizard.java index 3c3ba5ce5..1e7446491 100644 --- a/src/main/java/com/rapidminer/operator/nio/ExcelImportWizard.java +++ b/src/main/java/com/rapidminer/operator/nio/ExcelImportWizard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/ExcelSheetSelectionWizardStep.java b/src/main/java/com/rapidminer/operator/nio/ExcelSheetSelectionWizardStep.java index 1b79ed98c..b9ed536e1 100644 --- a/src/main/java/com/rapidminer/operator/nio/ExcelSheetSelectionWizardStep.java +++ b/src/main/java/com/rapidminer/operator/nio/ExcelSheetSelectionWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -80,7 +80,7 @@ protected boolean performEnteringAction(WizardStepDirection direction) { @Override protected boolean performLeavingAction(WizardStepDirection direction) { - if (direction == WizardStepDirection.FORWARD) { + if (direction == WizardStepDirection.FORWARD || direction == WizardStepDirection.FINISH) { ExcelWorkbookSelection selection = workbookSelectionPanel.getSelection(); // empty workbooks (i.e. without any column) cannot leave @@ -89,6 +89,7 @@ protected boolean performLeavingAction(WizardStepDirection direction) { } configuration.setSheet(selection.getSheetIndex()); + configuration.setSheetSelectionMode(ExcelResultSetConfiguration.SheetSelectionMode.BY_INDEX); configuration.setColumnOffset(selection.getColumnIndexStart()); configuration.setColumnLast(selection.getColumnIndexEnd()); configuration.setRowOffset(selection.getRowIndexStart()); diff --git a/src/main/java/com/rapidminer/operator/nio/ExcelSheetTableModel.java b/src/main/java/com/rapidminer/operator/nio/ExcelSheetTableModel.java index 4d3170238..fb00b9675 100644 --- a/src/main/java/com/rapidminer/operator/nio/ExcelSheetTableModel.java +++ b/src/main/java/com/rapidminer/operator/nio/ExcelSheetTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/ExcelWorkbookPane.java b/src/main/java/com/rapidminer/operator/nio/ExcelWorkbookPane.java index cebc8ed0b..0929aa0cb 100644 --- a/src/main/java/com/rapidminer/operator/nio/ExcelWorkbookPane.java +++ b/src/main/java/com/rapidminer/operator/nio/ExcelWorkbookPane.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -184,7 +184,7 @@ public void run() { public void setSelection(ExcelWorkbookSelection selection) { final int sheetIndex = selection.getSheetIndex(); - if (sheetIndex < sheetsPane.getTabCount()) { + if (sheetIndex < sheetsPane.getTabCount() && sheetIndex > -1) { sheetsPane.setSelectedIndex(sheetIndex); if (tables.length > sheetIndex) { tables[sheetIndex].clearSelection(); diff --git a/src/main/java/com/rapidminer/operator/nio/ImportWizardUtils.java b/src/main/java/com/rapidminer/operator/nio/ImportWizardUtils.java index 2df2b47ec..3255606a3 100644 --- a/src/main/java/com/rapidminer/operator/nio/ImportWizardUtils.java +++ b/src/main/java/com/rapidminer/operator/nio/ImportWizardUtils.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/LoadingContentPane.java b/src/main/java/com/rapidminer/operator/nio/LoadingContentPane.java index 248250373..f71d9fba9 100644 --- a/src/main/java/com/rapidminer/operator/nio/LoadingContentPane.java +++ b/src/main/java/com/rapidminer/operator/nio/LoadingContentPane.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/MetaDataDeclarationWizardStep.java b/src/main/java/com/rapidminer/operator/nio/MetaDataDeclarationWizardStep.java index 9d1c3a4ee..b0f8e393c 100644 --- a/src/main/java/com/rapidminer/operator/nio/MetaDataDeclarationWizardStep.java +++ b/src/main/java/com/rapidminer/operator/nio/MetaDataDeclarationWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/MetaDataTableHeaderCellEditor.java b/src/main/java/com/rapidminer/operator/nio/MetaDataTableHeaderCellEditor.java index 1bc9d3f17..8732f5234 100644 --- a/src/main/java/com/rapidminer/operator/nio/MetaDataTableHeaderCellEditor.java +++ b/src/main/java/com/rapidminer/operator/nio/MetaDataTableHeaderCellEditor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/MetaDataValidator.java b/src/main/java/com/rapidminer/operator/nio/MetaDataValidator.java index a2c99c107..4f19f116d 100644 --- a/src/main/java/com/rapidminer/operator/nio/MetaDataValidator.java +++ b/src/main/java/com/rapidminer/operator/nio/MetaDataValidator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/RowFilteringTableModel.java b/src/main/java/com/rapidminer/operator/nio/RowFilteringTableModel.java index dda82daf2..cf2127941 100644 --- a/src/main/java/com/rapidminer/operator/nio/RowFilteringTableModel.java +++ b/src/main/java/com/rapidminer/operator/nio/RowFilteringTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/StoreDataWizardStep.java b/src/main/java/com/rapidminer/operator/nio/StoreDataWizardStep.java index f26c50e5d..ca4d8d9cb 100644 --- a/src/main/java/com/rapidminer/operator/nio/StoreDataWizardStep.java +++ b/src/main/java/com/rapidminer/operator/nio/StoreDataWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/BufferedFileObject.java b/src/main/java/com/rapidminer/operator/nio/file/BufferedFileObject.java index dcbf1a15a..8fc49980a 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/BufferedFileObject.java +++ b/src/main/java/com/rapidminer/operator/nio/file/BufferedFileObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/FileInputPortHandler.java b/src/main/java/com/rapidminer/operator/nio/file/FileInputPortHandler.java index 5a19d3be3..f7961b972 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/FileInputPortHandler.java +++ b/src/main/java/com/rapidminer/operator/nio/file/FileInputPortHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/FileObject.java b/src/main/java/com/rapidminer/operator/nio/file/FileObject.java index e8861ff31..031cbf2a9 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/FileObject.java +++ b/src/main/java/com/rapidminer/operator/nio/file/FileObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/FileOutputPortHandler.java b/src/main/java/com/rapidminer/operator/nio/file/FileOutputPortHandler.java index 2c1555be2..b0954ea8d 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/FileOutputPortHandler.java +++ b/src/main/java/com/rapidminer/operator/nio/file/FileOutputPortHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/LoadFileOperator.java b/src/main/java/com/rapidminer/operator/nio/file/LoadFileOperator.java index b0496a7a9..500e7b0da 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/LoadFileOperator.java +++ b/src/main/java/com/rapidminer/operator/nio/file/LoadFileOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/RepositoryBlobObject.java b/src/main/java/com/rapidminer/operator/nio/file/RepositoryBlobObject.java index b69358465..de23915de 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/RepositoryBlobObject.java +++ b/src/main/java/com/rapidminer/operator/nio/file/RepositoryBlobObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/SimpleFileObject.java b/src/main/java/com/rapidminer/operator/nio/file/SimpleFileObject.java index 57c7c7a23..46b13c3a0 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/SimpleFileObject.java +++ b/src/main/java/com/rapidminer/operator/nio/file/SimpleFileObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/WriteFileOperator.java b/src/main/java/com/rapidminer/operator/nio/file/WriteFileOperator.java index 003fdd732..2b58d64a0 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/WriteFileOperator.java +++ b/src/main/java/com/rapidminer/operator/nio/file/WriteFileOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/ZipEntryObject.java b/src/main/java/com/rapidminer/operator/nio/file/ZipEntryObject.java index 09b01b220..3e6a2bb06 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/ZipEntryObject.java +++ b/src/main/java/com/rapidminer/operator/nio/file/ZipEntryObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/compression/AddEntryToArchiveFile.java b/src/main/java/com/rapidminer/operator/nio/file/compression/AddEntryToArchiveFile.java index 32dcbee9e..46a3a9376 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/compression/AddEntryToArchiveFile.java +++ b/src/main/java/com/rapidminer/operator/nio/file/compression/AddEntryToArchiveFile.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/compression/ArchiveFileObject.java b/src/main/java/com/rapidminer/operator/nio/file/compression/ArchiveFileObject.java index 7d47efc16..fcac0fdfa 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/compression/ArchiveFileObject.java +++ b/src/main/java/com/rapidminer/operator/nio/file/compression/ArchiveFileObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/compression/CreateArchiveFileOperator.java b/src/main/java/com/rapidminer/operator/nio/file/compression/CreateArchiveFileOperator.java index 8856f0031..4e4f6452d 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/compression/CreateArchiveFileOperator.java +++ b/src/main/java/com/rapidminer/operator/nio/file/compression/CreateArchiveFileOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/file/compression/ZipFileObject.java b/src/main/java/com/rapidminer/operator/nio/file/compression/ZipFileObject.java index 34a1840e6..322a90316 100644 --- a/src/main/java/com/rapidminer/operator/nio/file/compression/ZipFileObject.java +++ b/src/main/java/com/rapidminer/operator/nio/file/compression/ZipFileObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/AbstractDataResultSetReader.java b/src/main/java/com/rapidminer/operator/nio/model/AbstractDataResultSetReader.java index 4a90a64e8..20f7981c6 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/AbstractDataResultSetReader.java +++ b/src/main/java/com/rapidminer/operator/nio/model/AbstractDataResultSetReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -55,6 +55,7 @@ import com.rapidminer.parameter.ParameterTypeTupel; import com.rapidminer.parameter.PortProvider; import com.rapidminer.parameter.conditions.BooleanParameterCondition; +import com.rapidminer.parameter.conditions.ParameterCondition; import com.rapidminer.tools.Ontology; import com.rapidminer.tools.Tools; import com.rapidminer.tools.parameter.internal.DataManagementParameterHelper; @@ -86,6 +87,7 @@ public abstract class AbstractDataResultSetReader extends AbstractExampleSource public static final String PARAMETER_COLUMN_SELECTED = "column_selected"; public static final String PARAMETER_COLUMN_VALUE_TYPE = "attribute_value_type"; public static final String PARAMETER_COLUMN_ROLE = "attribute_role"; + public static final String PARAMETER_READ_AS_POLYNOMINAL = "read_all_values_as_polynominal"; public static final String PARAMETER_DATE_FORMAT = "date_format"; public static final String PARAMETER_TIME_ZONE = "time_zone"; @@ -164,9 +166,14 @@ protected ExampleSet transformDataResultSet(DataResultSet dataResultSet) throws configuration.setNumberFormat(numberFormat); } - if (configComplete) { + if (configComplete && getParameterAsBoolean(PARAMETER_READ_AS_POLYNOMINAL)) { + for (ColumnMetaData metaData : configuration.getColumnMetaData()) { + metaData.setAttributeValueType(Ontology.POLYNOMINAL); + } + } else if (configComplete) { translator.guessValueTypes(configuration, dataResultSet, null); } + return translator.read(dataResultSet, configuration, false, null); } @@ -201,7 +208,7 @@ protected boolean isSupportingFirstRowAsNames() { /** * Returns either the selected file referenced by the value of the parameter with the name * {@link #getFileParameterName()} or the file delivered at {@link #fileInputPort}. Which of - * these options is chosen is determined by the parameter {@link #PARAMETER_DESTINATION_TYPE}. + * these options is chosen is determined by the parameter {@link com.rapidminer.operator.nio.file.WriteFileOperator#PARAMETER_DESTINATION_TYPE}. * */ public File getSelectedFile() throws OperatorException { return filePortHandler.getSelectedFile(); @@ -291,6 +298,10 @@ public List getParameterTypes() { types.addAll(super.getParameterTypes()); + types.add(new ParameterTypeBoolean(PARAMETER_READ_AS_POLYNOMINAL, + "Type guessing and manual meta data handling is disabled and everything is read as polynominal.", false, true)); + ParameterCondition dependsOnGuessValue = new BooleanParameterCondition(this, PARAMETER_READ_AS_POLYNOMINAL, false, false); + type = new ParameterTypeList(PARAMETER_META_DATA, "The meta data information", // new ParameterTypeInt(PARAMETER_COLUMN_INDEX, "The column index", 0, Integer.MAX_VALUE), // new ParameterTypeTupel(PARAMETER_COLUMN_META_DATA, "The meta data definition of one column", // @@ -302,9 +313,13 @@ public List getParameterTypes() { Attributes.KNOWN_ATTRIBUTE_TYPES, AttributeColumn.REGULAR)), true); + type.registerDependencyCondition(dependsOnGuessValue); + + types.add(type); + type = new ParameterTypeBoolean(PARAMETER_ERROR_TOLERANT, + "Values which does not match to the specified value typed are considered as missings.", true, true); + type.registerDependencyCondition(dependsOnGuessValue); types.add(type); - types.add(new ParameterTypeBoolean(PARAMETER_ERROR_TOLERANT, - "Values which does not match to the specified value typed are considered as missings.", true, true)); DataManagementParameterHelper.addParameterTypes(types, this); return types; diff --git a/src/main/java/com/rapidminer/operator/nio/model/CSVResultSet.java b/src/main/java/com/rapidminer/operator/nio/model/CSVResultSet.java index 297351bcd..db138b517 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/CSVResultSet.java +++ b/src/main/java/com/rapidminer/operator/nio/model/CSVResultSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/CSVResultSetConfiguration.java b/src/main/java/com/rapidminer/operator/nio/model/CSVResultSetConfiguration.java index da514a1d4..1ec8d0c6a 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/CSVResultSetConfiguration.java +++ b/src/main/java/com/rapidminer/operator/nio/model/CSVResultSetConfiguration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/ColumnMetaData.java b/src/main/java/com/rapidminer/operator/nio/model/ColumnMetaData.java index 15c5ff091..e0a21d2c5 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/ColumnMetaData.java +++ b/src/main/java/com/rapidminer/operator/nio/model/ColumnMetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/DataResultSet.java b/src/main/java/com/rapidminer/operator/nio/model/DataResultSet.java index 69bf95fae..2e7d11f82 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/DataResultSet.java +++ b/src/main/java/com/rapidminer/operator/nio/model/DataResultSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/DataResultSetFactory.java b/src/main/java/com/rapidminer/operator/nio/model/DataResultSetFactory.java index 1dd2390b2..f3d7f47b7 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/DataResultSetFactory.java +++ b/src/main/java/com/rapidminer/operator/nio/model/DataResultSetFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/DataResultSetTranslationConfiguration.java b/src/main/java/com/rapidminer/operator/nio/model/DataResultSetTranslationConfiguration.java index 4bb0c4242..761ba64b6 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/DataResultSetTranslationConfiguration.java +++ b/src/main/java/com/rapidminer/operator/nio/model/DataResultSetTranslationConfiguration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -22,6 +22,7 @@ import static com.rapidminer.operator.nio.model.AbstractDataResultSetReader.PARAMETER_ANNOTATIONS; import static com.rapidminer.operator.nio.model.AbstractDataResultSetReader.PARAMETER_DATE_FORMAT; import static com.rapidminer.operator.nio.model.AbstractDataResultSetReader.PARAMETER_FIRST_ROW_AS_NAMES; +import static com.rapidminer.operator.nio.model.AbstractDataResultSetReader.PARAMETER_READ_AS_POLYNOMINAL; import static com.rapidminer.operator.nio.model.AbstractDataResultSetReader.PARAMETER_LOCALE; import static com.rapidminer.operator.nio.model.AbstractDataResultSetReader.PARAMETER_META_DATA; @@ -81,7 +82,7 @@ public class DataResultSetTranslationConfiguration { * This constructor can be used to generate an empty configuration just depending on the given * resultSet * - * @param resultSet + * @param readerOperator * @throws OperatorException */ public DataResultSetTranslationConfiguration(AbstractDataResultSetReader readerOperator) { @@ -376,7 +377,7 @@ public int getDataManagementType() { public static ColumnMetaData[] readColumnMetaData(AbstractDataResultSetReader readerOperator) { // initializing data structures List metaDataSettings; - if (readerOperator.isParameterSet(PARAMETER_META_DATA)) { + if (readerOperator.isParameterSet(PARAMETER_META_DATA) && !readerOperator.getParameterAsBoolean(PARAMETER_READ_AS_POLYNOMINAL)) { try { metaDataSettings = readerOperator.getParameterList(PARAMETER_META_DATA); } catch (UndefinedParameterError e) { diff --git a/src/main/java/com/rapidminer/operator/nio/model/DataResultSetTranslator.java b/src/main/java/com/rapidminer/operator/nio/model/DataResultSetTranslator.java index cb3c1e545..7853400d3 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/DataResultSetTranslator.java +++ b/src/main/java/com/rapidminer/operator/nio/model/DataResultSetTranslator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/DateFormatProvider.java b/src/main/java/com/rapidminer/operator/nio/model/DateFormatProvider.java index 63bbc971d..85c23f397 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/DateFormatProvider.java +++ b/src/main/java/com/rapidminer/operator/nio/model/DateFormatProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/DefaultPreview.java b/src/main/java/com/rapidminer/operator/nio/model/DefaultPreview.java index 339510170..4216df65d 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/DefaultPreview.java +++ b/src/main/java/com/rapidminer/operator/nio/model/DefaultPreview.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/Excel2007ResultSet.java b/src/main/java/com/rapidminer/operator/nio/model/Excel2007ResultSet.java index 7c9a045d0..92093c34d 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/Excel2007ResultSet.java +++ b/src/main/java/com/rapidminer/operator/nio/model/Excel2007ResultSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -113,9 +113,11 @@ public Excel2007ResultSet(Operator callingOperator, ExcelResultSetConfiguration throw new UserError(callingOperator, "file_consumer.no_file_defined"); } try { - sheet = workbook.getSheetAt(configuration.getSheet()); + sheet = configuration.selectSheetFrom(workbook); } catch (IndexOutOfBoundsException | IllegalArgumentException e) { throw new UserError(callingOperator, 953, configuration.getSheet() + 1); + } catch (ExcelSheetSelection.SheetNotFoundException e) { + throw new UserError(callingOperator, 321, configuration.getFile(), e.getMessage()); } Row row = sheet.getRow(sheet.getFirstRowNum()); if (row == null) { diff --git a/src/main/java/com/rapidminer/operator/nio/model/ExcelResultSet.java b/src/main/java/com/rapidminer/operator/nio/model/ExcelResultSet.java index 7cde4dfc8..fa7d1f7bb 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/ExcelResultSet.java +++ b/src/main/java/com/rapidminer/operator/nio/model/ExcelResultSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -116,9 +116,11 @@ public ExcelResultSet(Operator callingOperator, final ExcelResultSetConfiguratio } try { - sheet = workbook.getSheet(configuration.getSheet()); + sheet = configuration.selectSheetFrom(workbook); } catch (IndexOutOfBoundsException | IllegalArgumentException e) { throw new UserError(callingOperator, 953, configuration.getSheet() + 1); + } catch (ExcelSheetSelection.SheetNotFoundException e) { + throw new UserError(callingOperator, 321, configuration.getFile(), e.getMessage()); } totalNumberOfColumns = Math.min(configuration.getColumnLast(), sheet.getColumns() - 1) - columnOffset + 1; diff --git a/src/main/java/com/rapidminer/operator/nio/model/ExcelResultSetConfiguration.java b/src/main/java/com/rapidminer/operator/nio/model/ExcelResultSetConfiguration.java index 2d98d9e92..f7e67fe93 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/ExcelResultSetConfiguration.java +++ b/src/main/java/com/rapidminer/operator/nio/model/ExcelResultSetConfiguration.java @@ -1,612 +1,750 @@ -/** - * Copyright (C) 2001-2017 by RapidMiner and the contributors - * - * Complete list of developers available at our web site: - * - * http://rapidminer.com - * - * This program is free software: you can redistribute it and/or modify it under the terms of the - * GNU Affero General Public License as published by the Free Software Foundation, either version 3 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without - * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License along with this program. - * If not, see http://www.gnu.org/licenses/. -*/ -package com.rapidminer.operator.nio.model; - -import static com.rapidminer.operator.nio.ExcelExampleSource.PARAMETER_SHEET_NUMBER; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; -import java.util.Map; -import java.util.zip.ZipFile; - -import javax.swing.table.AbstractTableModel; -import javax.swing.table.TableModel; -import javax.xml.parsers.ParserConfigurationException; - -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.xml.sax.SAXException; - -import com.rapidminer.operator.Operator; -import com.rapidminer.operator.OperatorException; -import com.rapidminer.operator.UserError; -import com.rapidminer.operator.nio.ExcelExampleSource; -import com.rapidminer.operator.nio.ExcelSheetTableModel; -import com.rapidminer.operator.nio.model.xlsx.XlsxResultSet; -import com.rapidminer.operator.nio.model.xlsx.XlsxResultSet.XlsxReadMode; -import com.rapidminer.operator.nio.model.xlsx.XlsxSheetTableModel; -import com.rapidminer.operator.nio.model.xlsx.XlsxWorkbookParser; -import com.rapidminer.operator.nio.model.xlsx.XlsxWorkbookParser.XlsxWorkbook; -import com.rapidminer.operator.ports.metadata.ExampleSetMetaData; -import com.rapidminer.parameter.UndefinedParameterError; -import com.rapidminer.tools.ProgressListener; -import com.rapidminer.tools.Tools; -import com.rapidminer.tools.io.Encoding; - -import jxl.Workbook; -import jxl.WorkbookSettings; -import jxl.read.biff.BiffException; - - -/** - * A class holding information about configuration of the Excel Result Set - * - * @author Sebastian Land, Marco Boeck, Nils Woehler - */ -public class ExcelResultSetConfiguration implements DataResultSetFactory { - - private static final String XLS_FILE_ENDING = ".xls"; - private static final String XLSX_FILE_ENDING = ".xlsx"; - - private int rowOffset = -1; - private int columnOffset = -1; - private int rowLast = Integer.MAX_VALUE; - private int columnLast = Integer.MAX_VALUE; - - /** Numbering starts at 0. */ - private int sheet = -1; - - private Charset encoding; - private jxl.Workbook workbookJXL; - private File workbookFile; - - private boolean isEmulatingOldNames; - - private String timezone; - private String datePattern; - - /** - * This constructor must read in all settings from the parameters of the given operator. - * - * @throws OperatorException - */ - public ExcelResultSetConfiguration(ExcelExampleSource excelExampleSource) throws OperatorException { - if (excelExampleSource.isParameterSet(ExcelExampleSource.PARAMETER_IMPORTED_CELL_RANGE)) { - parseExcelRange(excelExampleSource.getParameterAsString(ExcelExampleSource.PARAMETER_IMPORTED_CELL_RANGE)); - } - - if (excelExampleSource.isParameterSet(PARAMETER_SHEET_NUMBER)) { - this.sheet = excelExampleSource.getParameterAsInt(PARAMETER_SHEET_NUMBER) - 1; - } - if (excelExampleSource.isFileSpecified()) { - this.workbookFile = excelExampleSource.getSelectedFile(); - } else { - - String excelParamter; - try { - excelParamter = excelExampleSource.getParameter(ExcelExampleSource.PARAMETER_EXCEL_FILE); - } catch (UndefinedParameterError e) { - excelParamter = null; - } - if (excelParamter != null && !"".equals(excelParamter)) { - File excelFile = new File(excelParamter); - if (excelFile.exists()) { - this.workbookFile = excelFile; - } - } - } - - if (excelExampleSource.isParameterSet(AbstractDataResultSetReader.PARAMETER_DATE_FORMAT)) { - datePattern = excelExampleSource.getParameterAsString(AbstractDataResultSetReader.PARAMETER_DATE_FORMAT); - } - - if (excelExampleSource.isParameterSet(AbstractDataResultSetReader.PARAMETER_TIME_ZONE)) { - timezone = excelExampleSource.getParameterAsString(AbstractDataResultSetReader.PARAMETER_TIME_ZONE); - } - - encoding = Encoding.getEncoding(excelExampleSource); - - isEmulatingOldNames = excelExampleSource.getCompatibilityLevel() - .isAtMost(ExcelExampleSource.CHANGE_5_0_11_NAME_SCHEMA); - } - - /** - * This will create a completely empty result set configuration - */ - public ExcelResultSetConfiguration() {} - - /** - * @return the 0-based row offset - */ - public int getRowOffset() { - return rowOffset; - } - - /** - * @return the 0-based column offset - */ - public int getColumnOffset() { - return columnOffset; - } - - /** - * Returns if there is an active workbook. - */ - public boolean hasWorkbook() { - return workbookJXL != null; - } - - /** - * Creates an excel table model (either {@link ExcelSheetTableModel} or - * {@link Excel2007SheetTableModel}, depending on file). - * - * @param sheetIndex - * the index of the sheet (0-based) - * @param readMode - * the read mode for {@link XlsxSheetTableModel} creation. It defines whether only a - * preview or the whole sheet content will be loaded - * @param progressListener - * the progress listener to report progress to - * @return - * @throws BiffException - * @throws IOException - * @throws InvalidFormatException - */ - public AbstractTableModel createExcelTableModel(int sheetIndex, XlsxReadMode readMode, ProgressListener progressListener) - throws BiffException, IOException, InvalidFormatException, OperatorException, ParseException { - if (getFile().getAbsolutePath().endsWith(XLSX_FILE_ENDING)) { - // excel 2007 file - return new XlsxSheetTableModel(this, sheetIndex, readMode, getFile().getAbsolutePath(), progressListener); - } else { - // excel pre 2007 file - if (workbookJXL == null) { - createWorkbookJXL(); - } - progressListener.setCompleted(50); - return new ExcelSheetTableModel(workbookJXL.getSheet(sheetIndex)); - } - } - - /** - * Returns the number of sheets in the excel file - * - * @return - * @throws IOException - * @throws BiffException - * @throws InvalidFormatException - */ - public int getNumberOfSheets() throws BiffException, IOException, InvalidFormatException, UserError { - if (getFile().getAbsolutePath().endsWith(XLSX_FILE_ENDING)) { - // excel 2007 file - try (ZipFile zipFile = new ZipFile(getFile().getAbsolutePath())) { - try { - return getNumberOfSheets(parseWorkbook(zipFile)); - } catch (ParserConfigurationException | SAXException e) { - throw new UserError(null, e, "xlsx_content_malformed"); - } - } - } else { - // excel pre 2007 file - if (workbookJXL == null) { - createWorkbookJXL(); - } - return workbookJXL.getNumberOfSheets(); - } - } - - private int getNumberOfSheets(XlsxWorkbook workbook) { - return workbook.xlsxWorkbookSheets.size(); - } - - private XlsxWorkbook parseWorkbook(ZipFile zipFile) - throws UserError, IOException, ParserConfigurationException, SAXException { - return new XlsxWorkbookParser().parseZipEntry(zipFile); - } - - /** - * Returns the names of all sheets in the excel file - * - * @return - * @throws IOException - * @throws BiffException - * @throws InvalidFormatException - */ - public String[] getSheetNames() throws BiffException, IOException, InvalidFormatException, UserError { - if (getFile().getAbsolutePath().endsWith(XLSX_FILE_ENDING)) { - // excel 2007 file - try (ZipFile zipFile = new ZipFile(getFile().getAbsolutePath())) { - XlsxWorkbook workbook; - try { - workbook = parseWorkbook(zipFile); - String[] sheetNames = new String[getNumberOfSheets(workbook)]; - for (int i = 0; i < getNumberOfSheets(); i++) { - sheetNames[i] = workbook.xlsxWorkbookSheets.get(i).name; - } - return sheetNames; - } catch (ParserConfigurationException | SAXException e) { - throw new UserError(null, e, "xlsx_content_malformed"); - } - - } - } else { - // excel pre 2007 file - if (workbookJXL == null) { - createWorkbookJXL(); - } - return workbookJXL.getSheetNames(); - } - } - - /** - * Returns the encoding for this configuration. - * - * @return - */ - public Charset getEncoding() { - return this.encoding; - } - - /** - * @param encoding - * the new encoding - */ - public void setEncoding(Charset encoding) { - this.encoding = encoding; - } - - /** - * This returns the file of the referenced excel file - */ - public File getFile() { - return workbookFile; - } - - /** - * This will set the workbook file. It will assure that an existing preopened workbook will be - * closed if files differ. - */ - public void setWorkbookFile(File selectedFile) { - if (selectedFile.equals(this.workbookFile)) { - return; - } - if (workbookJXL != null) { - workbookJXL.close(); - workbookJXL = null; - } - workbookFile = selectedFile; - rowOffset = 0; - columnOffset = 0; - rowLast = Integer.MAX_VALUE; - columnLast = Integer.MAX_VALUE; - sheet = 0; - } - - /** - * @return the index of the last row to import. The index is 0 based. In case it is - * {@link Integer#MAX_VALUE} all rows with content should be imported. - */ - public int getRowLast() { - return rowLast; - } - - public void setRowLast(int rowLast) { - this.rowLast = rowLast; - } - - /** - * @return the index of the last column to import. The index is 0 based. In case it is - * {@link Integer#MAX_VALUE} all columns with content should be imported. - */ - public int getColumnLast() { - return columnLast; - } - - public void setColumnLast(int columnLast) { - this.columnLast = columnLast; - } - - public int getSheet() { - return sheet; - } - - public void setSheet(int sheet) { - this.sheet = sheet; - } - - public void setRowOffset(int rowOffset) { - this.rowOffset = rowOffset; - } - - public void setColumnOffset(int columnOffset) { - this.columnOffset = columnOffset; - } - - @Override - public DataResultSet makeDataResultSet(Operator operator) throws OperatorException { - return makeDataResultSet(operator, XlsxReadMode.OPERATOR); - } - - /** - * Creates a {@link DataResultSet} based on the current configuration and the provided - * {@link XlsxReadMode}. - * - * @param operator - * the operator to create the {@link DataResultSet} for. Might be {@code null} in - * case no operator is available - * @param readMode - * the read mode - * @param provider - * a {@link DateFormatProvider}, can be {@code null} in which case the date format is - * fixed by the current value of {@link configuration#getDatePattern()} - * @return the created {@link DataResultSet} - * @throws OperatorException - * in case the creation fails because of an invalid configuration - */ - public DataResultSet makeDataResultSet(Operator operator, XlsxReadMode readMode, DateFormatProvider provider) - throws OperatorException { - File file = getFile(); - if (file == null) { - throw new UndefinedParameterError(ExcelExampleSource.PARAMETER_EXCEL_FILE, operator); - } - String absolutePath = file.getAbsolutePath(); - DataResultSet resultSet; - if (absolutePath.endsWith(XLSX_FILE_ENDING)) { - resultSet = createExcel2007ResultSet(operator, readMode, provider); - } else if (absolutePath.endsWith(XLS_FILE_ENDING)) { - // excel pre 2007 file - resultSet = new ExcelResultSet(operator, this, provider); - } else { - // we might also get a file object that has neither .xlsx nor .xls as file ending, - // so we have no choice but to try and open the file with the pre 2007 JXL lib to - // see if it works. If it does not work, it's an excel 2007 file. - try { - Workbook.getWorkbook(file); - resultSet = new ExcelResultSet(operator, this, provider); - } catch (Exception e) { - resultSet = createExcel2007ResultSet(operator, readMode, provider); - } - } - return resultSet; - } - - /** - * Creates a {@link DataResultSet} based on the current configuration and the provided - * {@link XlsxReadMode}. - * - * @param operator - * the operator to create the {@link DataResultSet} for. Might be {@code null} in - * case no operator is available - * @param readMode - * the read mode - * @return the created {@link DataResultSet} - * @throws OperatorException - * in case the creation fails because of an invalid configuration - */ - public DataResultSet makeDataResultSet(Operator operator, XlsxReadMode readMode) throws OperatorException { - return makeDataResultSet(operator, readMode, null); - } - - /** - * Creates a new XLSX DataResultSet for the specified operator. - * - * @param operator - * the operator which is used as error source in case something goes wrong - * @param readMode - * the read mode which should be used to read the file. The read mode defines how - * many lines should actually be read. - * @return the new XLSX DataResultSet - */ - @SuppressWarnings("deprecation") - private DataResultSet createExcel2007ResultSet(Operator operator, XlsxReadMode readMode, DateFormatProvider provider) - throws OperatorException { - if (operator == null || operator.getCompatibilityLevel().isAbove(ExcelExampleSource.CHANGE_6_2_0_OLD_XLSX_IMPORT)) { - return createXLSXResultSet(operator, readMode, provider); - } else { - return new Excel2007ResultSet(operator, this); - } - } - - private XlsxResultSet createXLSXResultSet(Operator operator, XlsxReadMode readMode, DateFormatProvider provider) - throws UserError { - return new XlsxResultSet(operator, this, getSheet(), readMode, provider); - } - - /** - * See class comment on {@link ExcelSheetTableModel} for a comment why that class is not used - * here. In fact we are using a {@link DefaultPreview} here as well. - */ - @Override - public TableModel makePreviewTableModel(ProgressListener listener) throws OperatorException { - File file = getFile(); - if (file == null) { - throw new UserError(null, 205, ExcelExampleSource.PARAMETER_EXCEL_FILE, ""); - } - - String absolutePath = file.getAbsolutePath(); - if (absolutePath.endsWith(XLSX_FILE_ENDING)) { - try { - return createExcelTableModel(getSheet(), XlsxReadMode.WIZARD_PREVIEW, listener); - } catch (BiffException | InvalidFormatException | IOException | ParseException e) { - throw new UserError(null, e, "xlsx_content_malformed"); - } - } else { - try (final DataResultSet resultSet = makeDataResultSet(null)) { - return new DefaultPreview(resultSet, listener); - } catch (ParseException e) { - throw new UserError(null, 302, file.getPath(), e.getMessage()); - } - } - } - - public void closeWorkbook() { - if (workbookJXL != null) { - workbookJXL.close(); - workbookJXL = null; - } - } - - @Override - public void setParameters(AbstractDataResultSetReader source) { - String range = Tools.getExcelColumnName(columnOffset) + (rowOffset + 1); - - // only add end range to cell range parameter if user has specified it explicitly - if (Integer.MAX_VALUE != columnLast && Integer.MAX_VALUE != rowOffset) { - range += ":" + Tools.getExcelColumnName(columnLast) + (rowLast + 1); - } - - source.setParameter(ExcelExampleSource.PARAMETER_IMPORTED_CELL_RANGE, range); - source.setParameter(PARAMETER_SHEET_NUMBER, String.valueOf(sheet + 1)); - source.setParameter(ExcelExampleSource.PARAMETER_EXCEL_FILE, workbookFile.getAbsolutePath()); - } - - public void parseExcelRange(String range) throws OperatorException { - String[] split = range.split(":", 2); - try { - int[] topLeft = parseExcelCell(split[0]); - columnOffset = topLeft[0]; - rowOffset = topLeft[1]; - if (split.length < 2) { - rowLast = Integer.MAX_VALUE; - columnLast = Integer.MAX_VALUE; - } else { - int[] bottomRight = parseExcelCell(split[1]); - columnLast = bottomRight[0]; - rowLast = bottomRight[1]; - } - } catch (OperatorException e) { - throw new UserError(null, e, 223, range); - } - } - - private static int[] parseExcelCell(String string) throws OperatorException { - int i = 0; - int column = 0; - int row = 0; - while (i < string.length() && Character.isLetter(string.charAt(i))) { - char c = string.charAt(i); - c = Character.toUpperCase(c); - if (c < 'A' || c > 'Z') { - throw new UserError(null, 224, string); - } - column *= 26; - column += c - 'A' + 1; - i++; - } - if (i < string.length()) { // at least one digit left - String columnStr = string.substring(i); - try { - row = Integer.parseInt(columnStr); - } catch (NumberFormatException e) { - throw new UserError(null, 224, string); - } - } - return new int[] { column - 1, row - 1 }; - } - - @Override - public String getResourceName() { - return workbookFile.getAbsolutePath(); - } - - @Override - public ExampleSetMetaData makeMetaData() { - final ExampleSetMetaData result = new ExampleSetMetaData(); - if (rowLast != Integer.MAX_VALUE) { - result.setNumberOfExamples(rowLast - rowOffset + 1); - } - return result; - } - - /** - * This returns whether the old naming style should be kept from prior to 5.1.000 versions. - */ - public boolean isEmulatingOldNames() { - return isEmulatingOldNames; - } - - @Override - public void close() { - if (workbookJXL != null) { - workbookJXL.close(); - } - } - - /** - * Creates the JXL workbook. - * - * @throws BiffException - * @throws IOException - */ - private void createWorkbookJXL() throws BiffException, IOException { - File file = getFile(); - WorkbookSettings workbookSettings = new WorkbookSettings(); - if (encoding != null) { - workbookSettings.setEncoding(encoding.name()); - } - workbookJXL = Workbook.getWorkbook(file, workbookSettings); - } - - /** - * @return the timezone - */ - public String getTimezone() { - return this.timezone; - } - - /** - * @return the datePattern - */ - public String getDatePattern() { - return this.datePattern; - } - - /** - * @param timezone - * the timezone to set - */ - public void setTimezone(String timezone) { - this.timezone = timezone; - } - - /** - * @param datePattern - * the datePattern to set - */ - public void setDatePattern(String datePattern) { - this.datePattern = datePattern; - } - - /** - * Write the parameters of the {@link ExcelResultSetConfiguration} into a map. Each parameter - * value is written as a string value. - * - * @param parameters - * the map to store the parameter to - */ - public void storeConfiguration(Map parameters) { - File file = getFile(); - parameters.put("excel.fileLocation", file != null ? file.toString() : ""); - parameters.put("excel.sheet", String.valueOf(getSheet())); - parameters.put("excel.rowOffset", String.valueOf(getRowOffset())); - parameters.put("excel.rowLast", String.valueOf(getRowLast())); - parameters.put("excel.columnOffset", String.valueOf(getColumnOffset())); - parameters.put("excel.columnLast", String.valueOf(getColumnLast())); - } - -} +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.operator.nio.model; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.zip.ZipFile; + +import javax.swing.table.AbstractTableModel; +import javax.swing.table.TableModel; +import javax.xml.parsers.ParserConfigurationException; + +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.xml.sax.SAXException; + +import com.rapidminer.operator.Operator; +import com.rapidminer.operator.OperatorException; +import com.rapidminer.operator.UserError; +import com.rapidminer.operator.nio.ExcelExampleSource; +import com.rapidminer.operator.nio.ExcelSheetTableModel; +import com.rapidminer.operator.nio.model.xlsx.XlsxResultSet; +import com.rapidminer.operator.nio.model.xlsx.XlsxResultSet.XlsxReadMode; +import com.rapidminer.operator.nio.model.xlsx.XlsxSheetTableModel; +import com.rapidminer.operator.nio.model.xlsx.XlsxWorkbookParser; +import com.rapidminer.operator.nio.model.xlsx.XlsxWorkbookParser.XlsxWorkbook; +import com.rapidminer.operator.ports.metadata.ExampleSetMetaData; +import com.rapidminer.parameter.UndefinedParameterError; +import com.rapidminer.tools.ProgressListener; +import com.rapidminer.tools.Tools; +import com.rapidminer.tools.io.Encoding; + +import jxl.Workbook; +import jxl.WorkbookSettings; +import jxl.read.biff.BiffException; + + +/** + * A class holding information about configuration of the Excel Result Set + * + * @author Sebastian Land, Marco Boeck, Nils Woehler + */ +public class ExcelResultSetConfiguration implements DataResultSetFactory, ExcelSheetSelection { + + private static final String XLS_FILE_ENDING = ".xls"; + private static final String XLSX_FILE_ENDING = ".xlsx"; + + private int rowOffset = -1; + private int columnOffset = -1; + private int rowLast = Integer.MAX_VALUE; + private int columnLast = Integer.MAX_VALUE; + + /** Numbering starts at 0. */ + private int sheet = -1; + private String sheetName; + private SheetSelectionMode sheetSelectionMode = SheetSelectionMode.BY_INDEX; + + private Charset encoding; + private jxl.Workbook workbookJXL; + private File workbookFile; + + private boolean isEmulatingOldNames; + + private String timezone; + private String datePattern; + + /** + * This constructor must read in all settings from the parameters of the given operator. + * + * @throws OperatorException + */ + public ExcelResultSetConfiguration(ExcelExampleSource excelExampleSource) throws OperatorException { + if (excelExampleSource.isParameterSet(ExcelExampleSource.PARAMETER_IMPORTED_CELL_RANGE)) { + parseExcelRange(excelExampleSource.getParameterAsString(ExcelExampleSource.PARAMETER_IMPORTED_CELL_RANGE)); + } + if (excelExampleSource.isParameterSet(ExcelExampleSource.PARAMETER_SHEET_SELECTION)) { + sheetSelectionMode = SheetSelectionMode.get(excelExampleSource.getParameterAsInt(ExcelExampleSource.PARAMETER_SHEET_SELECTION)); + } + if (excelExampleSource.isParameterSet(ExcelExampleSource.PARAMETER_SHEET_NAME)) { + sheetName = excelExampleSource.getParameterAsString(ExcelExampleSource.PARAMETER_SHEET_NAME); + } + if (excelExampleSource.isParameterSet(ExcelExampleSource.PARAMETER_SHEET_NUMBER)) { + sheet = excelExampleSource.getParameterAsInt(ExcelExampleSource.PARAMETER_SHEET_NUMBER) - 1; + } + if (excelExampleSource.isFileSpecified()) { + this.workbookFile = excelExampleSource.getSelectedFile(); + } else { + + String excelParamter; + try { + excelParamter = excelExampleSource.getParameter(ExcelExampleSource.PARAMETER_EXCEL_FILE); + } catch (UndefinedParameterError e) { + excelParamter = null; + } + if (excelParamter != null && !"".equals(excelParamter)) { + File excelFile = new File(excelParamter); + if (excelFile.exists()) { + this.workbookFile = excelFile; + } + } + } + + if (excelExampleSource.isParameterSet(AbstractDataResultSetReader.PARAMETER_DATE_FORMAT)) { + datePattern = excelExampleSource.getParameterAsString(AbstractDataResultSetReader.PARAMETER_DATE_FORMAT); + } + + if (excelExampleSource.isParameterSet(AbstractDataResultSetReader.PARAMETER_TIME_ZONE)) { + timezone = excelExampleSource.getParameterAsString(AbstractDataResultSetReader.PARAMETER_TIME_ZONE); + } + + encoding = Encoding.getEncoding(excelExampleSource); + + isEmulatingOldNames = excelExampleSource.getCompatibilityLevel() + .isAtMost(ExcelExampleSource.CHANGE_5_0_11_NAME_SCHEMA); + } + + /** + * This will create a completely empty result set configuration + */ + public ExcelResultSetConfiguration() {} + + /** + * @return the 0-based row offset + */ + public int getRowOffset() { + return rowOffset; + } + + /** + * @return the 0-based column offset + */ + public int getColumnOffset() { + return columnOffset; + } + + /** + * Returns if there is an active workbook. + */ + public boolean hasWorkbook() { + return workbookJXL != null; + } + + /** + * Creates an excel table model (either {@link ExcelSheetTableModel} or + * {@link XlsxSheetTableModel}, depending on file). + * + * @param sheetIndex + * the index of the sheet (0-based) + * @param readMode + * the read mode for {@link XlsxSheetTableModel} creation. It defines whether only a + * preview or the whole sheet content will be loaded + * @param progressListener + * the progress listener to report progress to + * @return + * @throws BiffException + * @throws IOException + * @throws InvalidFormatException + */ + public AbstractTableModel createExcelTableModel(int sheetIndex, XlsxReadMode readMode, ProgressListener progressListener) + throws BiffException, IOException, InvalidFormatException, OperatorException, ParseException { + return createExcelTableModel(ExcelSheetSelection.byIndex(sheetIndex), readMode, progressListener); + } + + /** + * Creates an excel table model (either {@link ExcelSheetTableModel} or + * {@link XlsxSheetTableModel}, depending on file). + * + * @param sheetSelection + * the Sheet Selection method + * @param readMode + * the read mode for {@link XlsxSheetTableModel} creation. It defines whether only a + * preview or the whole sheet content will be loaded + * @param progressListener + * the progress listener to report progress to + * @return + * @throws BiffException + * @throws IOException + * @throws InvalidFormatException + */ + public AbstractTableModel createExcelTableModel(ExcelSheetSelection sheetSelection, XlsxReadMode readMode, ProgressListener progressListener) + throws BiffException, IOException, InvalidFormatException, OperatorException, ParseException { + if (getFile().getAbsolutePath().endsWith(XLSX_FILE_ENDING)) { + // excel 2007 file + return new XlsxSheetTableModel(this, sheetSelection, readMode, getFile().getAbsolutePath(), progressListener); + } else { + // excel pre 2007 file + if (workbookJXL == null) { + createWorkbookJXL(); + } + progressListener.setCompleted(50); + + try { + return new ExcelSheetTableModel(sheetSelection.selectSheetFrom(workbookJXL)); + } catch (ExcelSheetSelection.SheetNotFoundException e) { + throw new IOException(e); + } + } + } + + /** + * Returns the number of sheets in the excel file + * + * @return + * @throws IOException + * @throws BiffException + * @throws InvalidFormatException + */ + public int getNumberOfSheets() throws BiffException, IOException, InvalidFormatException, UserError { + if (getFile().getAbsolutePath().endsWith(XLSX_FILE_ENDING)) { + // excel 2007 file + try (ZipFile zipFile = new ZipFile(getFile().getAbsolutePath())) { + try { + return getNumberOfSheets(parseWorkbook(zipFile)); + } catch (ParserConfigurationException | SAXException e) { + throw new UserError(null, e, "xlsx_content_malformed"); + } + } + } else { + // excel pre 2007 file + if (workbookJXL == null) { + createWorkbookJXL(); + } + return workbookJXL.getNumberOfSheets(); + } + } + + private int getNumberOfSheets(XlsxWorkbook workbook) { + return workbook.xlsxWorkbookSheets.size(); + } + + private XlsxWorkbook parseWorkbook(ZipFile zipFile) + throws UserError, IOException, ParserConfigurationException, SAXException { + return new XlsxWorkbookParser().parseZipEntry(zipFile); + } + + /** + * Returns the names of all sheets in the excel file + * + * @return + * @throws IOException + * @throws BiffException + * @throws InvalidFormatException + */ + public String[] getSheetNames() throws BiffException, IOException, InvalidFormatException, UserError { + if (getFile().getAbsolutePath().endsWith(XLSX_FILE_ENDING)) { + // excel 2007 file + try (ZipFile zipFile = new ZipFile(getFile().getAbsolutePath())) { + XlsxWorkbook workbook; + try { + workbook = parseWorkbook(zipFile); + String[] sheetNames = new String[getNumberOfSheets(workbook)]; + for (int i = 0; i < getNumberOfSheets(); i++) { + sheetNames[i] = workbook.xlsxWorkbookSheets.get(i).name; + } + return sheetNames; + } catch (ParserConfigurationException | SAXException e) { + throw new UserError(null, e, "xlsx_content_malformed"); + } + + } + } else { + // excel pre 2007 file + if (workbookJXL == null) { + createWorkbookJXL(); + } + return workbookJXL.getSheetNames(); + } + } + + /** + * Returns the encoding for this configuration. + * + * @return + */ + public Charset getEncoding() { + return this.encoding; + } + + /** + * @param encoding + * the new encoding + */ + public void setEncoding(Charset encoding) { + this.encoding = encoding; + } + + /** + * This returns the file of the referenced excel file + */ + public File getFile() { + return workbookFile; + } + + /** + * This will set the workbook file. It will assure that an existing preopened workbook will be + * closed if files differ. + */ + public void setWorkbookFile(File selectedFile) { + if (selectedFile.equals(this.workbookFile)) { + return; + } + if (workbookJXL != null) { + workbookJXL.close(); + workbookJXL = null; + } + workbookFile = selectedFile; + rowOffset = 0; + columnOffset = 0; + rowLast = Integer.MAX_VALUE; + columnLast = Integer.MAX_VALUE; + sheet = 0; + sheetName = null; + } + + /** + * @return the index of the last row to import. The index is 0 based. In case it is + * {@link Integer#MAX_VALUE} all rows with content should be imported. + */ + public int getRowLast() { + return rowLast; + } + + public void setRowLast(int rowLast) { + this.rowLast = rowLast; + } + + /** + * @return the index of the last column to import. The index is 0 based. In case it is + * {@link Integer#MAX_VALUE} all columns with content should be imported. + */ + public int getColumnLast() { + return columnLast; + } + + public void setColumnLast(int columnLast) { + this.columnLast = columnLast; + } + + public int getSheet() { + return sheet; + } + + public void setSheet(int sheet) { + this.sheet = sheet; + } + + /** + * Requires {@link #setSheetSelectionMode(SheetSelectionMode)} to be set to {@code SheetSelectionMode.BY_NAME} + * @param sheetName The sheetName to select + */ + public void setSheetByName(String sheetName) { + this.sheetName = sheetName; + } + + /** + * @return the current value of the sheetByName selection + */ + public String getSheetByName() { + return sheetName; + } + + /** + * Returns the currently selected sheet selection method + * + * @return + */ + public ExcelSheetSelection getSheetSelectionMethod() { + return sheetSelectionMode.getMethodFor(this); + } + + public SheetSelectionMode getSheetSelectionMode() { + return sheetSelectionMode; + } + + public void setSheetSelectionMode(SheetSelectionMode sheetSelectionMode) { + this.sheetSelectionMode = sheetSelectionMode; + } + + public void setRowOffset(int rowOffset) { + this.rowOffset = rowOffset; + } + + public void setColumnOffset(int columnOffset) { + this.columnOffset = columnOffset; + } + + @Override + public DataResultSet makeDataResultSet(Operator operator) throws OperatorException { + return makeDataResultSet(operator, XlsxReadMode.OPERATOR); + } + + /** + * Creates a {@link DataResultSet} based on the current configuration and the provided + * {@link XlsxReadMode}. + * + * @param operator + * the operator to create the {@link DataResultSet} for. Might be {@code null} in + * case no operator is available + * @param readMode + * the read mode + * @param provider + * a {@link DateFormatProvider}, can be {@code null} in which case the date format is + * fixed by the current value of {@link #getDatePattern()} + * @return the created {@link DataResultSet} + * @throws OperatorException + * in case the creation fails because of an invalid configuration + */ + public DataResultSet makeDataResultSet(Operator operator, XlsxReadMode readMode, DateFormatProvider provider) + throws OperatorException { + File file = getFile(); + if (file == null) { + throw new UndefinedParameterError(ExcelExampleSource.PARAMETER_EXCEL_FILE, operator); + } + String absolutePath = file.getAbsolutePath(); + DataResultSet resultSet; + if (absolutePath.endsWith(XLSX_FILE_ENDING)) { + resultSet = createExcel2007ResultSet(operator, readMode, provider); + } else if (absolutePath.endsWith(XLS_FILE_ENDING)) { + // excel pre 2007 file + resultSet = new ExcelResultSet(operator, this, provider); + } else { + // we might also get a file object that has neither .xlsx nor .xls as file ending, + // so we have no choice but to try and open the file with the pre 2007 JXL lib to + // see if it works. If it does not work, it's an excel 2007 file. + try { + Workbook.getWorkbook(file); + resultSet = new ExcelResultSet(operator, this, provider); + } catch (Exception e) { + resultSet = createExcel2007ResultSet(operator, readMode, provider); + } + } + return resultSet; + } + + /** + * Creates a {@link DataResultSet} based on the current configuration and the provided + * {@link XlsxReadMode}. + * + * @param operator + * the operator to create the {@link DataResultSet} for. Might be {@code null} in + * case no operator is available + * @param readMode + * the read mode + * @return the created {@link DataResultSet} + * @throws OperatorException + * in case the creation fails because of an invalid configuration + */ + public DataResultSet makeDataResultSet(Operator operator, XlsxReadMode readMode) throws OperatorException { + return makeDataResultSet(operator, readMode, null); + } + + /** + * Creates a new XLSX DataResultSet for the specified operator. + * + * @param operator + * the operator which is used as error source in case something goes wrong + * @param readMode + * the read mode which should be used to read the file. The read mode defines how + * many lines should actually be read. + * @return the new XLSX DataResultSet + */ + @SuppressWarnings("deprecation") + private DataResultSet createExcel2007ResultSet(Operator operator, XlsxReadMode readMode, DateFormatProvider provider) + throws OperatorException { + if (operator == null || operator.getCompatibilityLevel().isAbove(ExcelExampleSource.CHANGE_6_2_0_OLD_XLSX_IMPORT)) { + return createXLSXResultSet(operator, readMode, provider); + } else { + return new Excel2007ResultSet(operator, this); + } + } + + private XlsxResultSet createXLSXResultSet(Operator operator, XlsxReadMode readMode, DateFormatProvider provider) + throws UserError { + return new XlsxResultSet(operator, this, getSheetSelectionMethod(), readMode, provider); + } + + /** + * See class comment on {@link ExcelSheetTableModel} for a comment why that class is not used + * here. In fact we are using a {@link DefaultPreview} here as well. + */ + @Override + public TableModel makePreviewTableModel(ProgressListener listener) throws OperatorException { + File file = getFile(); + if (file == null) { + throw new UserError(null, 205, ExcelExampleSource.PARAMETER_EXCEL_FILE, ""); + } + + String absolutePath = file.getAbsolutePath(); + if (absolutePath.endsWith(XLSX_FILE_ENDING)) { + try { + return createExcelTableModel(getSheetSelectionMethod(), XlsxReadMode.WIZARD_PREVIEW, listener); + } catch (BiffException | InvalidFormatException | IOException | ParseException e) { + throw new UserError(null, e, "xlsx_content_malformed"); + } + } else { + try (final DataResultSet resultSet = makeDataResultSet(null)) { + return new DefaultPreview(resultSet, listener); + } catch (ParseException e) { + throw new UserError(null, 302, file.getPath(), e.getMessage()); + } + } + } + + public void closeWorkbook() { + if (workbookJXL != null) { + workbookJXL.close(); + workbookJXL = null; + } + } + + @Override + public void setParameters(AbstractDataResultSetReader source) { + String range = Tools.getExcelColumnName(columnOffset) + (rowOffset + 1); + + // only add end range to cell range parameter if user has specified it explicitly + if (Integer.MAX_VALUE != columnLast && Integer.MAX_VALUE != rowOffset) { + range += ":" + Tools.getExcelColumnName(columnLast) + (rowLast + 1); + } + + source.setParameter(ExcelExampleSource.PARAMETER_IMPORTED_CELL_RANGE, range); + source.setParameter(ExcelExampleSource.PARAMETER_SHEET_SELECTION, String.valueOf(sheetSelectionMode.getIndex())); + source.setParameter(ExcelExampleSource.PARAMETER_SHEET_NUMBER, String.valueOf(sheet + 1)); + source.setParameter(ExcelExampleSource.PARAMETER_SHEET_NAME, sheetName); + source.setParameter(ExcelExampleSource.PARAMETER_EXCEL_FILE, workbookFile.getAbsolutePath()); + } + + public void parseExcelRange(String range) throws OperatorException { + String[] split = range.split(":", 2); + try { + int[] topLeft = parseExcelCell(split[0]); + columnOffset = topLeft[0]; + rowOffset = topLeft[1]; + if (split.length < 2) { + rowLast = Integer.MAX_VALUE; + columnLast = Integer.MAX_VALUE; + } else { + int[] bottomRight = parseExcelCell(split[1]); + columnLast = bottomRight[0]; + rowLast = bottomRight[1]; + } + } catch (OperatorException e) { + throw new UserError(null, e, 223, range); + } + } + + private static int[] parseExcelCell(String string) throws OperatorException { + int i = 0; + int column = 0; + int row = 0; + while (i < string.length() && Character.isLetter(string.charAt(i))) { + char c = string.charAt(i); + c = Character.toUpperCase(c); + if (c < 'A' || c > 'Z') { + throw new UserError(null, 224, string); + } + column *= 26; + column += c - 'A' + 1; + i++; + } + if (i < string.length()) { // at least one digit left + String columnStr = string.substring(i); + try { + row = Integer.parseInt(columnStr); + } catch (NumberFormatException e) { + throw new UserError(null, 224, string); + } + } + return new int[] { column - 1, row - 1 }; + } + + @Override + public String getResourceName() { + return workbookFile.getAbsolutePath(); + } + + @Override + public ExampleSetMetaData makeMetaData() { + final ExampleSetMetaData result = new ExampleSetMetaData(); + if (rowLast != Integer.MAX_VALUE) { + result.setNumberOfExamples(rowLast - rowOffset + 1); + } + return result; + } + + /** + * This returns whether the old naming style should be kept from prior to 5.1.000 versions. + */ + public boolean isEmulatingOldNames() { + return isEmulatingOldNames; + } + + @Override + public void close() { + if (workbookJXL != null) { + workbookJXL.close(); + } + } + + /** + * Creates the JXL workbook. + * + * @throws BiffException + * @throws IOException + */ + private void createWorkbookJXL() throws BiffException, IOException { + File file = getFile(); + WorkbookSettings workbookSettings = new WorkbookSettings(); + if (encoding != null) { + workbookSettings.setEncoding(encoding.name()); + } + workbookJXL = Workbook.getWorkbook(file, workbookSettings); + } + + /** + * @return the timezone + */ + public String getTimezone() { + return this.timezone; + } + + /** + * @return the datePattern + */ + public String getDatePattern() { + return this.datePattern; + } + + /** + * @param timezone + * the timezone to set + */ + public void setTimezone(String timezone) { + this.timezone = timezone; + } + + /** + * @param datePattern + * the datePattern to set + */ + public void setDatePattern(String datePattern) { + this.datePattern = datePattern; + } + + /** + * Write the parameters of the {@link ExcelResultSetConfiguration} into a map. Each parameter + * value is written as a string value. + * + * @param parameters + * the map to store the parameter to + */ + public void storeConfiguration(Map parameters) { + File file = getFile(); + parameters.put("excel.fileLocation", file != null ? file.toString() : ""); + parameters.put("excel.sheetSelectionMode", String.valueOf(sheetSelectionMode)); + parameters.put("excel.sheet", String.valueOf(getSheet())); + parameters.put("excel.sheetName", String.valueOf(getSheetByName())); + parameters.put("excel.rowOffset", String.valueOf(getRowOffset())); + parameters.put("excel.rowLast", String.valueOf(getRowLast())); + parameters.put("excel.columnOffset", String.valueOf(getColumnOffset())); + parameters.put("excel.columnLast", String.valueOf(getColumnLast())); + } + + @Override + public XlsxWorkbookParser.XlsxWorkbookSheet selectSheetFrom(List sheets) throws SheetNotFoundException { + return getSheetSelectionMethod().selectSheetFrom(sheets); + } + + @Override + public jxl.Sheet selectSheetFrom(jxl.Workbook workbookJXL) throws SheetNotFoundException { + return getSheetSelectionMethod().selectSheetFrom(workbookJXL); + } + + @Override + public org.apache.poi.ss.usermodel.Sheet selectSheetFrom(org.apache.poi.ss.usermodel.Workbook workbook) throws SheetNotFoundException { + return getSheetSelectionMethod().selectSheetFrom(workbook); + } + + /** + * A sheet can be selected by either it's name or it's index + *

+ * After choosing a SelectionMode with {@link #setSheetSelectionMode(SheetSelectionMode)} use the methods {@link #setSheet(int)} or {@link #setSheetByName(String)} to specify the index or name. + */ + public enum SheetSelectionMode { + /** Selects a sheet by {@link #getSheet()} */ + BY_INDEX(ExcelExampleSource.SHEET_SELECT_BY_INDEX, (ExcelResultSetConfiguration c) -> ExcelSheetSelection.byIndex(c.getSheet())), + /** Select a sheet by {@link #getSheetByName()} */ + BY_NAME(ExcelExampleSource.SHEET_SELECT_BY_NAME, (ExcelResultSetConfiguration c) -> ExcelSheetSelection.byName(c.getSheetByName())); + + private int index; + private Function selectionFunction; + + SheetSelectionMode(int index, Function selectionFunction) { + this.index = index; + this.selectionFunction = selectionFunction; + } + + /** + * Returns the ExcelExampleSource position of the selected method + * + * @return + */ + public int getIndex() { + return index; + } + + /** + * Returns the selected selection method for the given configuration + * + * @param configuration + * @return The selected sheet selection method + */ + public ExcelSheetSelection getMethodFor(ExcelResultSetConfiguration configuration) { + return selectionFunction.apply(configuration); + } + + /** + * Returns the SheetSelectionMode for the given position + * + * @param position + * @return + */ + public static SheetSelectionMode get(int position) { + for (SheetSelectionMode mode : SheetSelectionMode.values()) { + if (mode.index == position) { + return mode; + } + } + throw new IllegalArgumentException("Could not find SheetSelectionMode at position " + position); + } + } +} diff --git a/src/main/java/com/rapidminer/operator/nio/model/ExcelSheetSelection.java b/src/main/java/com/rapidminer/operator/nio/model/ExcelSheetSelection.java new file mode 100644 index 000000000..22ed2d2f9 --- /dev/null +++ b/src/main/java/com/rapidminer/operator/nio/model/ExcelSheetSelection.java @@ -0,0 +1,176 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.operator.nio.model; + +import java.util.List; + +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; + +import com.rapidminer.operator.nio.model.xlsx.XlsxWorkbookParser; + + +/** + * Sheet Selection methods + *

+ * Supports selection by either name or index + * + * @author Jonas Wilms-Pfau + * @since 8.1.0 + */ +public interface ExcelSheetSelection { + + /** + * Selects the sheet by index + * + * @param index + * @return + */ + static ExcelSheetSelection byIndex(int index) { + return new ByIndex(index); + } + + /** + * Selects the sheet by name + * + * @param sheetName + * @return + */ + static ExcelSheetSelection byName(String sheetName) { + return new ByName(sheetName); + } + + /** + * Returns the selected sheet + * + * @param sheets + * @return the selected sheet + * @throws SheetNotFoundException + */ + XlsxWorkbookParser.XlsxWorkbookSheet selectSheetFrom(List sheets) throws SheetNotFoundException; + + /** + * Returns the selected sheet + * + * @param workbookJXL + * @return the selected sheet + * @throws SheetNotFoundException + */ + jxl.Sheet selectSheetFrom(jxl.Workbook workbookJXL) throws SheetNotFoundException; + + /** + * Returns the selected sheet + * + * @param workbook + * @return + * @throws SheetNotFoundException + */ + Sheet selectSheetFrom(Workbook workbook) throws SheetNotFoundException; + + + /** + * Selects a sheet by it's index + */ + class ByIndex implements ExcelSheetSelection { + private static final String ERROR_MESSAGE = "Can't select sheet number %d on a file with %d sheets."; + private final int index; + + public ByIndex(int index) { + this.index = index; + } + + @Override + public XlsxWorkbookParser.XlsxWorkbookSheet selectSheetFrom(List sheets) throws SheetNotFoundException { + if (sheets.size() > index) { + return sheets.get(index); + } + throw new SheetNotFoundException(ERROR_MESSAGE, index + 1, sheets.size()); + } + + @Override + public jxl.Sheet selectSheetFrom(jxl.Workbook workbookJXL) throws SheetNotFoundException { + if (workbookJXL.getNumberOfSheets() > index) { + return workbookJXL.getSheet(index); + } + throw new SheetNotFoundException(ERROR_MESSAGE, index + 1, workbookJXL.getNumberOfSheets()); + } + + @Override + public Sheet selectSheetFrom(Workbook workbook) throws SheetNotFoundException { + if (workbook.getNumberOfSheets() > index) { + return workbook.getSheetAt(index); + } + throw new SheetNotFoundException(ERROR_MESSAGE, index + 1, workbook.getNumberOfSheets()); + } + + } + + class ByName implements ExcelSheetSelection { + + private static final String ERROR_MESSAGE = "Can't find sheet with name \"%s\"."; + + private final String name; + + + public ByName(String name) { + this.name = name; + } + + @Override + public XlsxWorkbookParser.XlsxWorkbookSheet selectSheetFrom(List sheets) throws SheetNotFoundException { + for (XlsxWorkbookParser.XlsxWorkbookSheet sheet : sheets) { + if (name.equals(sheet.name)) { + return sheet; + } + } + throw new SheetNotFoundException(ERROR_MESSAGE, name); + } + + @Override + public jxl.Sheet selectSheetFrom(jxl.Workbook workbookJXL) throws SheetNotFoundException { + jxl.Sheet sheet = workbookJXL.getSheet(name); + if (sheet == null) { + throw new SheetNotFoundException(ERROR_MESSAGE, name); + } + return sheet; + } + + @Override + public Sheet selectSheetFrom(Workbook workbook) throws SheetNotFoundException { + Sheet sheet = workbook.getSheet(name); + if (sheet == null) { + throw new SheetNotFoundException(ERROR_MESSAGE, name); + } + return sheet; + } + } + + /** + * Thrown if the sheet could not be found + */ + class SheetNotFoundException extends Exception { + public SheetNotFoundException(String s) { + super(s); + } + + public SheetNotFoundException(String s, Object... arguments) { + this(String.format(s, arguments)); + } + } +} diff --git a/src/main/java/com/rapidminer/operator/nio/model/ParseException.java b/src/main/java/com/rapidminer/operator/nio/model/ParseException.java index 2bf4f508d..423671c47 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/ParseException.java +++ b/src/main/java/com/rapidminer/operator/nio/model/ParseException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/ParsingError.java b/src/main/java/com/rapidminer/operator/nio/model/ParsingError.java index ca62d38d5..1b08568e5 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/ParsingError.java +++ b/src/main/java/com/rapidminer/operator/nio/model/ParsingError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/WizardState.java b/src/main/java/com/rapidminer/operator/nio/model/WizardState.java index e4a97e62b..3acadc1c0 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/WizardState.java +++ b/src/main/java/com/rapidminer/operator/nio/model/WizardState.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/AbstractXlsxSAXHandler.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/AbstractXlsxSAXHandler.java index 62d76692b..d859e8a86 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/AbstractXlsxSAXHandler.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/AbstractXlsxSAXHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxCellType.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxCellType.java index 35e36d709..3baac7243 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxCellType.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxCellType.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxNumberFormatParser.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxNumberFormatParser.java index b847bb026..1093e3ada 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxNumberFormatParser.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxNumberFormatParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxNumberFormats.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxNumberFormats.java index f9d9b4013..e525f06fd 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxNumberFormats.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxNumberFormats.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxResultSet.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxResultSet.java index f3b15fc04..c19bd86c6 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxResultSet.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxResultSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -51,6 +51,7 @@ import com.rapidminer.operator.nio.model.ExcelResultSetConfiguration; import com.rapidminer.operator.nio.model.ParseException; import com.rapidminer.operator.nio.model.ParsingError; +import com.rapidminer.operator.nio.model.ExcelSheetSelection; import com.rapidminer.operator.nio.model.xlsx.XlsxUtilities.XlsxCell; import com.rapidminer.operator.nio.model.xlsx.XlsxWorkbookParser.XlsxWorkbook; import com.rapidminer.operator.nio.model.xlsx.XlsxWorkbookRelationParser.XlsxWorkbookRel; @@ -155,6 +156,10 @@ public static enum XlsxReadMode { * from within an operator. * @param configuration * the result set configuration + * @param sheetIndex + * index of the selected sheet + * @param readMode + * the current read mode * @param provider * a {@link DateFormatProvider}, can be {@code null} in which case the date format is * fixed by the current value of {@link configuration#getDatePattern()} @@ -163,6 +168,31 @@ public static enum XlsxReadMode { * parsed */ public XlsxResultSet(Operator callingOperator, final ExcelResultSetConfiguration configuration, int sheetIndex, + XlsxReadMode readMode, final DateFormatProvider provider) throws UserError { + this(callingOperator, configuration, ExcelSheetSelection.byIndex(sheetIndex), readMode, provider); + } + + /** + * Configures the Excel result set with the provided configuration object. Also parses multiple + * XML configuration files included in the XLSX file and creates the worksheet parser. + * + * @param callingOperator + * the calling operator. null is allowed in case the class isn't created + * from within an operator. + * @param configuration + * the result set configuration + * @param sheetSelection + * the selected sheet + * @param readMode + * current read mode + * @param provider + * a {@link DateFormatProvider}, can be {@code null} in which case the date format is + * fixed by the current value of {@link configuration#getDatePattern()} + * @throws UserError + * in case something is configured in a wrong way so that the XLSX file cannot be + * parsed + */ + public XlsxResultSet(Operator callingOperator, final ExcelResultSetConfiguration configuration, ExcelSheetSelection sheetSelection, XlsxReadMode readMode, final DateFormatProvider provider) throws UserError { // Check file presence @@ -179,6 +209,8 @@ public XlsxResultSet(Operator callingOperator, final ExcelResultSetConfiguration // Parse workbook XML which contains a list of sheets with name, rId, sheetId xlsxWorkbook = new XlsxWorkbookParser().parseZipEntry(zipFile); + int sheetIndex = xlsxWorkbook.xlsxWorkbookSheets.indexOf(sheetSelection.selectSheetFrom(xlsxWorkbook.xlsxWorkbookSheets)); + // Parse workbook relations XML which contains the path of shared strings // and the mapping of relationship IDs and paths of worksheets XlsxWorkbookRelationParser xlsxWorkbookRelHandler = new XlsxWorkbookRelationParser(callingOperator, zipFile, @@ -219,7 +251,7 @@ public XlsxResultSet(Operator callingOperator, final ExcelResultSetConfiguration // initialize worksheet parser this.worksheetParser = new XlsxSheetContentParser(xlsxFile, workbookRelations.worksheetsPath, sharedStrings, numberFormats, sheetMetaData, XML_STREAM_FACTORY, encoding); - } catch (IOException | XMLStreamException e) { + } catch (IOException | XMLStreamException | ExcelSheetSelection.SheetNotFoundException e) { throw new UserError(callingOperator, e, 321, configuration.getFile(), e.getMessage()); } catch (ParserConfigurationException | SAXException e) { throw new UserError(callingOperator, e, 401, e.getMessage()); @@ -277,6 +309,8 @@ public DateFormat geDateFormat() { * from within an operator. * @param configuration * the result set configuration + * @param sheetIndex + * index of the selected sheet * @throws UserError * in case something is configured in a wrong way so that the XLSX file cannot be * parsed @@ -286,6 +320,26 @@ public XlsxResultSet(Operator callingOperator, ExcelResultSetConfiguration confi this(callingOperator, configuration, sheetIndex, readMode, null); } + /** + * Configures the Excel result set with the provided configuration object. Also parses multiple + * XML configuration files included in the XLSX file and creates the worksheet parser. + * + * @param callingOperator + * the calling operator. null is allowed in case the class isn't created + * from within an operator. + * @param configuration + * the result set configuration + * @param sheetSelection + * the selected sheet + * @throws UserError + * in case something is configured in a wrong way so that the XLSX file cannot be + * parsed + */ + public XlsxResultSet(Operator callingOperator, ExcelResultSetConfiguration configuration, ExcelSheetSelection sheetSelection, + XlsxReadMode readMode) throws UserError { + this(callingOperator, configuration, sheetSelection, readMode, null); + } + @Override public String[] getColumnNames() { return sheetMetaData.getColumnNames(configuration.isEmulatingOldNames()); diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSharedStringsParser.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSharedStringsParser.java index 73edd9b0c..e06b8fce9 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSharedStringsParser.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSharedStringsParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetContentParser.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetContentParser.java index 9798fe5ed..81c239c71 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetContentParser.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetContentParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetMetaData.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetMetaData.java index d672a35d8..16b118fdb 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetMetaData.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetMetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetMetaDataParser.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetMetaDataParser.java index 372178935..f77e461d1 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetMetaDataParser.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetMetaDataParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetTableModel.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetTableModel.java index 0f59c5595..ce5550e00 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetTableModel.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxSheetTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -28,6 +28,7 @@ import com.rapidminer.operator.nio.model.DefaultPreview; import com.rapidminer.operator.nio.model.ExcelResultSetConfiguration; import com.rapidminer.operator.nio.model.ParseException; +import com.rapidminer.operator.nio.model.ExcelSheetSelection; import com.rapidminer.operator.nio.model.xlsx.XlsxResultSet.XlsxReadMode; import com.rapidminer.tools.ProgressListener; import com.rapidminer.tools.Tools; @@ -58,6 +59,7 @@ public class XlsxSheetTableModel extends AbstractTableModel { private final int sheetRowCount; /** + * @param configuration * @param sheetIndex * the selected sheet * @param readMode @@ -67,7 +69,24 @@ public class XlsxSheetTableModel extends AbstractTableModel { * the listener to report the progress to */ public XlsxSheetTableModel(ExcelResultSetConfiguration configuration, int sheetIndex, XlsxReadMode readMode, - String absolutePath, ProgressListener progressListener) throws OperatorException, ParseException { + String absolutePath, ProgressListener progressListener) throws OperatorException, ParseException { + this(configuration, ExcelSheetSelection.byIndex(sheetIndex), readMode, absolutePath, progressListener); + } + + + + /** + * @param configuration + * @param sheetSelection + * the selected sheet + * @param readMode + * @param absolutePath + * the absolute path of the Excel file + * @param progressListener + * the listener to report the progress to + */ + public XlsxSheetTableModel(ExcelResultSetConfiguration configuration, ExcelSheetSelection sheetSelection, XlsxReadMode readMode, + String absolutePath, ProgressListener progressListener) throws OperatorException, ParseException { isPreview = readMode == XlsxReadMode.WIZARD_PREVIEW; @@ -91,7 +110,7 @@ public XlsxSheetTableModel(ExcelResultSetConfiguration configuration, int sheetI * Keep track of the row count ourselves so we can omit empty rows at the end of the Excel * file */ - try (XlsxResultSet xlsxResultSet = new XlsxResultSet(null, configuration, sheetIndex, readMode)) { + try (XlsxResultSet xlsxResultSet = new XlsxResultSet(null, configuration, sheetSelection, readMode)) { int numberOfRows = xlsxResultSet.getNumberOfRows(); int initialCapacity = numberOfRows != -1 ? numberOfRows : XlsxSheetMetaDataParser.MAXIMUM_XLSX_ROW_INDEX + 1; this.sheetContentCache = new ArrayList<>(initialCapacity); diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxUtilities.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxUtilities.java index 050ca858f..849712f1c 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxUtilities.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxUtilities.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxWorkbookParser.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxWorkbookParser.java index 7bd8e0772..e1d5b6f14 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxWorkbookParser.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxWorkbookParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxWorkbookRelationParser.java b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxWorkbookRelationParser.java index 610e7317c..c0bcfc583 100644 --- a/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxWorkbookRelationParser.java +++ b/src/main/java/com/rapidminer/operator/nio/model/xlsx/XlsxWorkbookRelationParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/AbsoluteError.java b/src/main/java/com/rapidminer/operator/performance/AbsoluteError.java index b255ea095..597ccc019 100644 --- a/src/main/java/com/rapidminer/operator/performance/AbsoluteError.java +++ b/src/main/java/com/rapidminer/operator/performance/AbsoluteError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/AbstractExampleSetEvaluator.java b/src/main/java/com/rapidminer/operator/performance/AbstractExampleSetEvaluator.java index 26d1c1afc..6f98e0b9b 100644 --- a/src/main/java/com/rapidminer/operator/performance/AbstractExampleSetEvaluator.java +++ b/src/main/java/com/rapidminer/operator/performance/AbstractExampleSetEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/AbstractPerformanceEvaluator.java b/src/main/java/com/rapidminer/operator/performance/AbstractPerformanceEvaluator.java index 3ae014f1c..6e0edf3f5 100644 --- a/src/main/java/com/rapidminer/operator/performance/AbstractPerformanceEvaluator.java +++ b/src/main/java/com/rapidminer/operator/performance/AbstractPerformanceEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/AreaUnderCurve.java b/src/main/java/com/rapidminer/operator/performance/AreaUnderCurve.java index 8e0540601..4418aa6ad 100644 --- a/src/main/java/com/rapidminer/operator/performance/AreaUnderCurve.java +++ b/src/main/java/com/rapidminer/operator/performance/AreaUnderCurve.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/AttributeCounter.java b/src/main/java/com/rapidminer/operator/performance/AttributeCounter.java index 02ca88ec4..d310f5223 100644 --- a/src/main/java/com/rapidminer/operator/performance/AttributeCounter.java +++ b/src/main/java/com/rapidminer/operator/performance/AttributeCounter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/BinaryClassificationPerformance.java b/src/main/java/com/rapidminer/operator/performance/BinaryClassificationPerformance.java index 53b0cb3ff..3cddb1f03 100644 --- a/src/main/java/com/rapidminer/operator/performance/BinaryClassificationPerformance.java +++ b/src/main/java/com/rapidminer/operator/performance/BinaryClassificationPerformance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/BinominalClassificationPerformanceEvaluator.java b/src/main/java/com/rapidminer/operator/performance/BinominalClassificationPerformanceEvaluator.java index 5ec209743..4cc35f6d0 100644 --- a/src/main/java/com/rapidminer/operator/performance/BinominalClassificationPerformanceEvaluator.java +++ b/src/main/java/com/rapidminer/operator/performance/BinominalClassificationPerformanceEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/ClassWeightedPerformance.java b/src/main/java/com/rapidminer/operator/performance/ClassWeightedPerformance.java index 3becfef21..750821e59 100644 --- a/src/main/java/com/rapidminer/operator/performance/ClassWeightedPerformance.java +++ b/src/main/java/com/rapidminer/operator/performance/ClassWeightedPerformance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/CorrelationCriterion.java b/src/main/java/com/rapidminer/operator/performance/CorrelationCriterion.java index ba25aa890..157c23431 100644 --- a/src/main/java/com/rapidminer/operator/performance/CorrelationCriterion.java +++ b/src/main/java/com/rapidminer/operator/performance/CorrelationCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/CrossEntropy.java b/src/main/java/com/rapidminer/operator/performance/CrossEntropy.java index ed9f6bb54..285de0116 100644 --- a/src/main/java/com/rapidminer/operator/performance/CrossEntropy.java +++ b/src/main/java/com/rapidminer/operator/performance/CrossEntropy.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/Data2Performance.java b/src/main/java/com/rapidminer/operator/performance/Data2Performance.java index 7342d5e11..6b18fc826 100644 --- a/src/main/java/com/rapidminer/operator/performance/Data2Performance.java +++ b/src/main/java/com/rapidminer/operator/performance/Data2Performance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/EstimatedPerformance.java b/src/main/java/com/rapidminer/operator/performance/EstimatedPerformance.java index e75785049..f2188e9bd 100644 --- a/src/main/java/com/rapidminer/operator/performance/EstimatedPerformance.java +++ b/src/main/java/com/rapidminer/operator/performance/EstimatedPerformance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/LenientRelativeError.java b/src/main/java/com/rapidminer/operator/performance/LenientRelativeError.java index ffae64961..3da719c84 100644 --- a/src/main/java/com/rapidminer/operator/performance/LenientRelativeError.java +++ b/src/main/java/com/rapidminer/operator/performance/LenientRelativeError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/LogisticLoss.java b/src/main/java/com/rapidminer/operator/performance/LogisticLoss.java index a79ba49e9..9d522114e 100644 --- a/src/main/java/com/rapidminer/operator/performance/LogisticLoss.java +++ b/src/main/java/com/rapidminer/operator/performance/LogisticLoss.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/MDLCriterion.java b/src/main/java/com/rapidminer/operator/performance/MDLCriterion.java index 1bd6d56b6..7e4d5dd8b 100644 --- a/src/main/java/com/rapidminer/operator/performance/MDLCriterion.java +++ b/src/main/java/com/rapidminer/operator/performance/MDLCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/Margin.java b/src/main/java/com/rapidminer/operator/performance/Margin.java index 25db2e6e9..66c125b8d 100644 --- a/src/main/java/com/rapidminer/operator/performance/Margin.java +++ b/src/main/java/com/rapidminer/operator/performance/Margin.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/MeasuredPerformance.java b/src/main/java/com/rapidminer/operator/performance/MeasuredPerformance.java index 08741f3dd..cecd7fe47 100644 --- a/src/main/java/com/rapidminer/operator/performance/MeasuredPerformance.java +++ b/src/main/java/com/rapidminer/operator/performance/MeasuredPerformance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/MinMaxCriterion.java b/src/main/java/com/rapidminer/operator/performance/MinMaxCriterion.java index bbdc79a2d..05e99e5aa 100644 --- a/src/main/java/com/rapidminer/operator/performance/MinMaxCriterion.java +++ b/src/main/java/com/rapidminer/operator/performance/MinMaxCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/MinMaxWrapper.java b/src/main/java/com/rapidminer/operator/performance/MinMaxWrapper.java index e5b4f717f..cd40b512e 100644 --- a/src/main/java/com/rapidminer/operator/performance/MinMaxWrapper.java +++ b/src/main/java/com/rapidminer/operator/performance/MinMaxWrapper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/MultiClassificationPerformance.java b/src/main/java/com/rapidminer/operator/performance/MultiClassificationPerformance.java index 655b1a902..ffebcc482 100644 --- a/src/main/java/com/rapidminer/operator/performance/MultiClassificationPerformance.java +++ b/src/main/java/com/rapidminer/operator/performance/MultiClassificationPerformance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/NormalizedAbsoluteError.java b/src/main/java/com/rapidminer/operator/performance/NormalizedAbsoluteError.java index a475eccce..d37edc032 100644 --- a/src/main/java/com/rapidminer/operator/performance/NormalizedAbsoluteError.java +++ b/src/main/java/com/rapidminer/operator/performance/NormalizedAbsoluteError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/ParameterizedMeasuredPerformanceCriterion.java b/src/main/java/com/rapidminer/operator/performance/ParameterizedMeasuredPerformanceCriterion.java index ed1673393..d09ab7aac 100644 --- a/src/main/java/com/rapidminer/operator/performance/ParameterizedMeasuredPerformanceCriterion.java +++ b/src/main/java/com/rapidminer/operator/performance/ParameterizedMeasuredPerformanceCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/PerformanceComparator.java b/src/main/java/com/rapidminer/operator/performance/PerformanceComparator.java index f0b82a20d..f873ae454 100644 --- a/src/main/java/com/rapidminer/operator/performance/PerformanceComparator.java +++ b/src/main/java/com/rapidminer/operator/performance/PerformanceComparator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/PerformanceCriterion.java b/src/main/java/com/rapidminer/operator/performance/PerformanceCriterion.java index 802c9069b..48c680116 100644 --- a/src/main/java/com/rapidminer/operator/performance/PerformanceCriterion.java +++ b/src/main/java/com/rapidminer/operator/performance/PerformanceCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/PerformanceEvaluator.java b/src/main/java/com/rapidminer/operator/performance/PerformanceEvaluator.java index 77a77ab93..3b99893f2 100644 --- a/src/main/java/com/rapidminer/operator/performance/PerformanceEvaluator.java +++ b/src/main/java/com/rapidminer/operator/performance/PerformanceEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/PerformanceVector.java b/src/main/java/com/rapidminer/operator/performance/PerformanceVector.java index c22632825..5bf8b9cf6 100644 --- a/src/main/java/com/rapidminer/operator/performance/PerformanceVector.java +++ b/src/main/java/com/rapidminer/operator/performance/PerformanceVector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/PerformanceVectorToExampleSet.java b/src/main/java/com/rapidminer/operator/performance/PerformanceVectorToExampleSet.java index 506393658..d628dd083 100644 --- a/src/main/java/com/rapidminer/operator/performance/PerformanceVectorToExampleSet.java +++ b/src/main/java/com/rapidminer/operator/performance/PerformanceVectorToExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/PolynominalClassificationPerformanceEvaluator.java b/src/main/java/com/rapidminer/operator/performance/PolynominalClassificationPerformanceEvaluator.java index b8aa49dbb..f80893be4 100644 --- a/src/main/java/com/rapidminer/operator/performance/PolynominalClassificationPerformanceEvaluator.java +++ b/src/main/java/com/rapidminer/operator/performance/PolynominalClassificationPerformanceEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/PredictionAverage.java b/src/main/java/com/rapidminer/operator/performance/PredictionAverage.java index 6259b20cd..7ebf3e0c2 100644 --- a/src/main/java/com/rapidminer/operator/performance/PredictionAverage.java +++ b/src/main/java/com/rapidminer/operator/performance/PredictionAverage.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/RankCorrelation.java b/src/main/java/com/rapidminer/operator/performance/RankCorrelation.java index 30b5f525e..b3d02e662 100644 --- a/src/main/java/com/rapidminer/operator/performance/RankCorrelation.java +++ b/src/main/java/com/rapidminer/operator/performance/RankCorrelation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/RankStatistics.java b/src/main/java/com/rapidminer/operator/performance/RankStatistics.java index bf73a5eb9..fad97ebea 100644 --- a/src/main/java/com/rapidminer/operator/performance/RankStatistics.java +++ b/src/main/java/com/rapidminer/operator/performance/RankStatistics.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/RegressionPerformanceEvaluator.java b/src/main/java/com/rapidminer/operator/performance/RegressionPerformanceEvaluator.java index d63b56fc4..655ca282b 100644 --- a/src/main/java/com/rapidminer/operator/performance/RegressionPerformanceEvaluator.java +++ b/src/main/java/com/rapidminer/operator/performance/RegressionPerformanceEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/RelativeError.java b/src/main/java/com/rapidminer/operator/performance/RelativeError.java index 3e79298e6..e524cf453 100644 --- a/src/main/java/com/rapidminer/operator/performance/RelativeError.java +++ b/src/main/java/com/rapidminer/operator/performance/RelativeError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/RootMeanSquaredError.java b/src/main/java/com/rapidminer/operator/performance/RootMeanSquaredError.java index 76df76078..132f121c9 100644 --- a/src/main/java/com/rapidminer/operator/performance/RootMeanSquaredError.java +++ b/src/main/java/com/rapidminer/operator/performance/RootMeanSquaredError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/RootRelativeSquaredError.java b/src/main/java/com/rapidminer/operator/performance/RootRelativeSquaredError.java index b86577e6d..156011a0d 100644 --- a/src/main/java/com/rapidminer/operator/performance/RootRelativeSquaredError.java +++ b/src/main/java/com/rapidminer/operator/performance/RootRelativeSquaredError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/SimpleClassificationError.java b/src/main/java/com/rapidminer/operator/performance/SimpleClassificationError.java index fdac098fa..90f79d0d0 100644 --- a/src/main/java/com/rapidminer/operator/performance/SimpleClassificationError.java +++ b/src/main/java/com/rapidminer/operator/performance/SimpleClassificationError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/SimpleCriterion.java b/src/main/java/com/rapidminer/operator/performance/SimpleCriterion.java index ee3e99454..819bd5fdc 100644 --- a/src/main/java/com/rapidminer/operator/performance/SimpleCriterion.java +++ b/src/main/java/com/rapidminer/operator/performance/SimpleCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/SimplePerformanceEvaluator.java b/src/main/java/com/rapidminer/operator/performance/SimplePerformanceEvaluator.java index 815cf781a..fe8ec6620 100644 --- a/src/main/java/com/rapidminer/operator/performance/SimplePerformanceEvaluator.java +++ b/src/main/java/com/rapidminer/operator/performance/SimplePerformanceEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/SoftMarginLoss.java b/src/main/java/com/rapidminer/operator/performance/SoftMarginLoss.java index e0c02406f..033897fa7 100644 --- a/src/main/java/com/rapidminer/operator/performance/SoftMarginLoss.java +++ b/src/main/java/com/rapidminer/operator/performance/SoftMarginLoss.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/SquaredCorrelationCriterion.java b/src/main/java/com/rapidminer/operator/performance/SquaredCorrelationCriterion.java index aef3887d8..868557c72 100644 --- a/src/main/java/com/rapidminer/operator/performance/SquaredCorrelationCriterion.java +++ b/src/main/java/com/rapidminer/operator/performance/SquaredCorrelationCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/SquaredError.java b/src/main/java/com/rapidminer/operator/performance/SquaredError.java index bdf59647a..ec0199384 100644 --- a/src/main/java/com/rapidminer/operator/performance/SquaredError.java +++ b/src/main/java/com/rapidminer/operator/performance/SquaredError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/StrictRelativeError.java b/src/main/java/com/rapidminer/operator/performance/StrictRelativeError.java index 52fda8b62..eb7ba177a 100644 --- a/src/main/java/com/rapidminer/operator/performance/StrictRelativeError.java +++ b/src/main/java/com/rapidminer/operator/performance/StrictRelativeError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/SupportVectorCounter.java b/src/main/java/com/rapidminer/operator/performance/SupportVectorCounter.java index 623aaedd3..54a5806ae 100644 --- a/src/main/java/com/rapidminer/operator/performance/SupportVectorCounter.java +++ b/src/main/java/com/rapidminer/operator/performance/SupportVectorCounter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/UserBasedPerformanceEvaluator.java b/src/main/java/com/rapidminer/operator/performance/UserBasedPerformanceEvaluator.java index 5d7736ae5..cb0e3be93 100644 --- a/src/main/java/com/rapidminer/operator/performance/UserBasedPerformanceEvaluator.java +++ b/src/main/java/com/rapidminer/operator/performance/UserBasedPerformanceEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/WeightedMultiClassPerformance.java b/src/main/java/com/rapidminer/operator/performance/WeightedMultiClassPerformance.java index 113d850a4..30cbacd06 100644 --- a/src/main/java/com/rapidminer/operator/performance/WeightedMultiClassPerformance.java +++ b/src/main/java/com/rapidminer/operator/performance/WeightedMultiClassPerformance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/WeightedPerformanceCreator.java b/src/main/java/com/rapidminer/operator/performance/WeightedPerformanceCreator.java index 9ff6229a7..39955dc0e 100644 --- a/src/main/java/com/rapidminer/operator/performance/WeightedPerformanceCreator.java +++ b/src/main/java/com/rapidminer/operator/performance/WeightedPerformanceCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/cost/ClassificationCostCriterion.java b/src/main/java/com/rapidminer/operator/performance/cost/ClassificationCostCriterion.java index 959eb3676..e0557f2ab 100644 --- a/src/main/java/com/rapidminer/operator/performance/cost/ClassificationCostCriterion.java +++ b/src/main/java/com/rapidminer/operator/performance/cost/ClassificationCostCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/cost/CostEvaluator.java b/src/main/java/com/rapidminer/operator/performance/cost/CostEvaluator.java index 933088529..dde142325 100644 --- a/src/main/java/com/rapidminer/operator/performance/cost/CostEvaluator.java +++ b/src/main/java/com/rapidminer/operator/performance/cost/CostEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -88,7 +88,7 @@ public double getDoubleValue() { @Override public void doWork() throws OperatorException { ExampleSet exampleSet = exampleSetInput.getData(ExampleSet.class); - Tools.hasNominalLabels(exampleSet, getOperatorClassName()); + Tools.hasNominalLabels(exampleSet, getOperatorClassName()); Attribute predictedLabel = exampleSet.getAttributes().getPredictedLabel(); if (predictedLabel == null) { throw new UserError(this, 107); diff --git a/src/main/java/com/rapidminer/operator/performance/cost/RankingCriterion.java b/src/main/java/com/rapidminer/operator/performance/cost/RankingCriterion.java index 1b32ce66a..ecaaac68a 100644 --- a/src/main/java/com/rapidminer/operator/performance/cost/RankingCriterion.java +++ b/src/main/java/com/rapidminer/operator/performance/cost/RankingCriterion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/performance/cost/RankingEvaluator.java b/src/main/java/com/rapidminer/operator/performance/cost/RankingEvaluator.java index 08ffde49c..576d7e7f5 100644 --- a/src/main/java/com/rapidminer/operator/performance/cost/RankingEvaluator.java +++ b/src/main/java/com/rapidminer/operator/performance/cost/RankingEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -90,7 +90,7 @@ public double getDoubleValue() { @Override public void doWork() throws OperatorException { ExampleSet exampleSet = exampleSetInput.getData(ExampleSet.class); - Tools.hasNominalLabels(exampleSet, getOperatorClassName()); + Tools.hasNominalLabels(exampleSet, getOperatorClassName()); List rankings = getParameterList(PARAMETER_RANKING_COSTS); int i = 0; double[] costs = new double[rankings.size()]; diff --git a/src/main/java/com/rapidminer/operator/ports/CollectingOrIteratingPortPairExtender.java b/src/main/java/com/rapidminer/operator/ports/CollectingOrIteratingPortPairExtender.java index d0cffbedd..670f8d97e 100644 --- a/src/main/java/com/rapidminer/operator/ports/CollectingOrIteratingPortPairExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/CollectingOrIteratingPortPairExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/CollectingPortPairExtender.java b/src/main/java/com/rapidminer/operator/ports/CollectingPortPairExtender.java index 22c49aa4d..507d564a5 100644 --- a/src/main/java/com/rapidminer/operator/ports/CollectingPortPairExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/CollectingPortPairExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/DummyPortPairExtender.java b/src/main/java/com/rapidminer/operator/ports/DummyPortPairExtender.java index b199ea874..7f9102baa 100644 --- a/src/main/java/com/rapidminer/operator/ports/DummyPortPairExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/DummyPortPairExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/IncompatibleMDClassException.java b/src/main/java/com/rapidminer/operator/ports/IncompatibleMDClassException.java index ce8afb569..b399d551b 100644 --- a/src/main/java/com/rapidminer/operator/ports/IncompatibleMDClassException.java +++ b/src/main/java/com/rapidminer/operator/ports/IncompatibleMDClassException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/InputPort.java b/src/main/java/com/rapidminer/operator/ports/InputPort.java index 8cdcb82d2..f65a5040d 100644 --- a/src/main/java/com/rapidminer/operator/ports/InputPort.java +++ b/src/main/java/com/rapidminer/operator/ports/InputPort.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/InputPortExtender.java b/src/main/java/com/rapidminer/operator/ports/InputPortExtender.java index 3fd51c2e2..291d54fdf 100644 --- a/src/main/java/com/rapidminer/operator/ports/InputPortExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/InputPortExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/InputPorts.java b/src/main/java/com/rapidminer/operator/ports/InputPorts.java index 0aca85a98..d11ace917 100644 --- a/src/main/java/com/rapidminer/operator/ports/InputPorts.java +++ b/src/main/java/com/rapidminer/operator/ports/InputPorts.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/MetaDataChangeListener.java b/src/main/java/com/rapidminer/operator/ports/MetaDataChangeListener.java index e97c42bb2..cc77017a7 100644 --- a/src/main/java/com/rapidminer/operator/ports/MetaDataChangeListener.java +++ b/src/main/java/com/rapidminer/operator/ports/MetaDataChangeListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/MultiInputPortPairExtender.java b/src/main/java/com/rapidminer/operator/ports/MultiInputPortPairExtender.java index 284596af9..a4b062db6 100644 --- a/src/main/java/com/rapidminer/operator/ports/MultiInputPortPairExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/MultiInputPortPairExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/MultiOutputPortPairExtender.java b/src/main/java/com/rapidminer/operator/ports/MultiOutputPortPairExtender.java index c4a083575..7e71f8650 100644 --- a/src/main/java/com/rapidminer/operator/ports/MultiOutputPortPairExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/MultiOutputPortPairExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/MultiPortPairExtender.java b/src/main/java/com/rapidminer/operator/ports/MultiPortPairExtender.java index a10830438..aba9e187b 100644 --- a/src/main/java/com/rapidminer/operator/ports/MultiPortPairExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/MultiPortPairExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/Multiplicity.java b/src/main/java/com/rapidminer/operator/ports/Multiplicity.java index de7f56489..9b8b7e311 100644 --- a/src/main/java/com/rapidminer/operator/ports/Multiplicity.java +++ b/src/main/java/com/rapidminer/operator/ports/Multiplicity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/OrderPreservingPortPairExtender.java b/src/main/java/com/rapidminer/operator/ports/OrderPreservingPortPairExtender.java index a9be08b37..b014a682b 100644 --- a/src/main/java/com/rapidminer/operator/ports/OrderPreservingPortPairExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/OrderPreservingPortPairExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/OutputPort.java b/src/main/java/com/rapidminer/operator/ports/OutputPort.java index 49ad5ed0c..845eedfcf 100644 --- a/src/main/java/com/rapidminer/operator/ports/OutputPort.java +++ b/src/main/java/com/rapidminer/operator/ports/OutputPort.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/OutputPortExtender.java b/src/main/java/com/rapidminer/operator/ports/OutputPortExtender.java index 41e8bd9ba..2e70f4472 100644 --- a/src/main/java/com/rapidminer/operator/ports/OutputPortExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/OutputPortExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/OutputPorts.java b/src/main/java/com/rapidminer/operator/ports/OutputPorts.java index 30d068df6..68ebb719b 100644 --- a/src/main/java/com/rapidminer/operator/ports/OutputPorts.java +++ b/src/main/java/com/rapidminer/operator/ports/OutputPorts.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/Port.java b/src/main/java/com/rapidminer/operator/ports/Port.java index 65357b00f..4c751abbe 100644 --- a/src/main/java/com/rapidminer/operator/ports/Port.java +++ b/src/main/java/com/rapidminer/operator/ports/Port.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/PortException.java b/src/main/java/com/rapidminer/operator/ports/PortException.java index a74635612..071468b33 100644 --- a/src/main/java/com/rapidminer/operator/ports/PortException.java +++ b/src/main/java/com/rapidminer/operator/ports/PortException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/PortExtender.java b/src/main/java/com/rapidminer/operator/ports/PortExtender.java index c69d7db99..4dabbadac 100644 --- a/src/main/java/com/rapidminer/operator/ports/PortExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/PortExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/PortOwner.java b/src/main/java/com/rapidminer/operator/ports/PortOwner.java index 0fc5e1857..e11c9615a 100644 --- a/src/main/java/com/rapidminer/operator/ports/PortOwner.java +++ b/src/main/java/com/rapidminer/operator/ports/PortOwner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/PortPairExtender.java b/src/main/java/com/rapidminer/operator/ports/PortPairExtender.java index 1ef5df2df..c06e9cad1 100644 --- a/src/main/java/com/rapidminer/operator/ports/PortPairExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/PortPairExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/Ports.java b/src/main/java/com/rapidminer/operator/ports/Ports.java index 726343904..dc5e58218 100644 --- a/src/main/java/com/rapidminer/operator/ports/Ports.java +++ b/src/main/java/com/rapidminer/operator/ports/Ports.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/ProcessingStep.java b/src/main/java/com/rapidminer/operator/ports/ProcessingStep.java index 5c5ccb9e3..6b37b4d63 100644 --- a/src/main/java/com/rapidminer/operator/ports/ProcessingStep.java +++ b/src/main/java/com/rapidminer/operator/ports/ProcessingStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/SinglePortExtender.java b/src/main/java/com/rapidminer/operator/ports/SinglePortExtender.java index 38d8a46e9..c3aa434c2 100644 --- a/src/main/java/com/rapidminer/operator/ports/SinglePortExtender.java +++ b/src/main/java/com/rapidminer/operator/ports/SinglePortExtender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/impl/AbstractInputPort.java b/src/main/java/com/rapidminer/operator/ports/impl/AbstractInputPort.java index 3573db282..b10871f0e 100644 --- a/src/main/java/com/rapidminer/operator/ports/impl/AbstractInputPort.java +++ b/src/main/java/com/rapidminer/operator/ports/impl/AbstractInputPort.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/impl/AbstractOutputPort.java b/src/main/java/com/rapidminer/operator/ports/impl/AbstractOutputPort.java index cbfe89ccf..b075c7a5e 100644 --- a/src/main/java/com/rapidminer/operator/ports/impl/AbstractOutputPort.java +++ b/src/main/java/com/rapidminer/operator/ports/impl/AbstractOutputPort.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/impl/AbstractPort.java b/src/main/java/com/rapidminer/operator/ports/impl/AbstractPort.java index 86ce2bb8e..28528c518 100644 --- a/src/main/java/com/rapidminer/operator/ports/impl/AbstractPort.java +++ b/src/main/java/com/rapidminer/operator/ports/impl/AbstractPort.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/impl/AbstractPorts.java b/src/main/java/com/rapidminer/operator/ports/impl/AbstractPorts.java index 779126765..d510d2947 100644 --- a/src/main/java/com/rapidminer/operator/ports/impl/AbstractPorts.java +++ b/src/main/java/com/rapidminer/operator/ports/impl/AbstractPorts.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/impl/CannotConnectPortException.java b/src/main/java/com/rapidminer/operator/ports/impl/CannotConnectPortException.java index 929d9e3a7..20fbde960 100644 --- a/src/main/java/com/rapidminer/operator/ports/impl/CannotConnectPortException.java +++ b/src/main/java/com/rapidminer/operator/ports/impl/CannotConnectPortException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/impl/InputPortImpl.java b/src/main/java/com/rapidminer/operator/ports/impl/InputPortImpl.java index d34122788..c83f36dc1 100644 --- a/src/main/java/com/rapidminer/operator/ports/impl/InputPortImpl.java +++ b/src/main/java/com/rapidminer/operator/ports/impl/InputPortImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/impl/InputPortsImpl.java b/src/main/java/com/rapidminer/operator/ports/impl/InputPortsImpl.java index f0d2d06c1..c6952334c 100644 --- a/src/main/java/com/rapidminer/operator/ports/impl/InputPortsImpl.java +++ b/src/main/java/com/rapidminer/operator/ports/impl/InputPortsImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/impl/OutputPortImpl.java b/src/main/java/com/rapidminer/operator/ports/impl/OutputPortImpl.java index fbcb95d9e..f2a7df417 100644 --- a/src/main/java/com/rapidminer/operator/ports/impl/OutputPortImpl.java +++ b/src/main/java/com/rapidminer/operator/ports/impl/OutputPortImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/impl/OutputPortsImpl.java b/src/main/java/com/rapidminer/operator/ports/impl/OutputPortsImpl.java index c5ad7b04a..23a7363d5 100644 --- a/src/main/java/com/rapidminer/operator/ports/impl/OutputPortsImpl.java +++ b/src/main/java/com/rapidminer/operator/ports/impl/OutputPortsImpl.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/AbstractPrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/AbstractPrecondition.java index a25166ffa..522711ba2 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/AbstractPrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/AbstractPrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/AttributeAddingExampleSetPassThroughRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/AttributeAddingExampleSetPassThroughRule.java index 5a4a5dbd4..f213d237a 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/AttributeAddingExampleSetPassThroughRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/AttributeAddingExampleSetPassThroughRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/AttributeMetaData.java b/src/main/java/com/rapidminer/operator/ports/metadata/AttributeMetaData.java index 4d73318d0..92b183bdf 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/AttributeMetaData.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/AttributeMetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/AttributeParameterPrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/AttributeParameterPrecondition.java index c1b8c0011..abc0c7d20 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/AttributeParameterPrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/AttributeParameterPrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/AttributeSetPrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/AttributeSetPrecondition.java index 71738ec19..bd0cd5060 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/AttributeSetPrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/AttributeSetPrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/AttributeSubsetPassThroughRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/AttributeSubsetPassThroughRule.java index dea89fd8c..063708045 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/AttributeSubsetPassThroughRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/AttributeSubsetPassThroughRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/CapabilityPrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/CapabilityPrecondition.java index 7e1a423f1..a5f41e565 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/CapabilityPrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/CapabilityPrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/CollectionMetaData.java b/src/main/java/com/rapidminer/operator/ports/metadata/CollectionMetaData.java index c8e956227..c00fedf33 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/CollectionMetaData.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/CollectionMetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/CollectionPrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/CollectionPrecondition.java index 50a2e9af4..ba514aef8 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/CollectionPrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/CollectionPrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/CompatibilityLevel.java b/src/main/java/com/rapidminer/operator/ports/metadata/CompatibilityLevel.java index 53c1e9e06..d09f81c93 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/CompatibilityLevel.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/CompatibilityLevel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/DistanceMeasurePrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/DistanceMeasurePrecondition.java index 8810348cb..ebdc75bb2 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/DistanceMeasurePrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/DistanceMeasurePrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/DummyMetaData.java b/src/main/java/com/rapidminer/operator/ports/metadata/DummyMetaData.java index 687e11cd7..59e816289 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/DummyMetaData.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/DummyMetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetContainsSeriesPrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetContainsSeriesPrecondition.java index b2e806d59..35fe18c79 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetContainsSeriesPrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetContainsSeriesPrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetMetaData.java b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetMetaData.java index e95992596..d90496373 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetMetaData.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetMetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetPassThroughRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetPassThroughRule.java index 46656ed2d..ab20da3ff 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetPassThroughRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetPassThroughRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetPrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetPrecondition.java index e76fa161a..daef7f377 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetPrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetPrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -140,8 +140,9 @@ public void check(MetaData metaData) { // ID-Tagging if (name.equals(Attributes.ID_NAME)) { OperatorDescription[] ods = OperatorService.getOperatorDescriptions(IdTagging.class); - fixes.add(new OperatorInsertionQuickFix("insert_id_tagging", new Object[] { ods[0] - .getName() }, 10, inputPort) { + fixes.add(new OperatorInsertionQuickFix("insert_id_tagging", + new Object[] { ods.length > 0 ? ods[0].getName() : "" }, + 10, inputPort) { @Override public Operator createOperator() throws OperatorCreationException { diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetSizePrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetSizePrecondition.java index 7325d3196..ea232c938 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetSizePrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetSizePrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetUnionRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetUnionRule.java index d81a5b74a..a68be887a 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetUnionRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ExampleSetUnionRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/FlatteningPassThroughRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/FlatteningPassThroughRule.java index 2d1e2bf48..ed7282a82 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/FlatteningPassThroughRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/FlatteningPassThroughRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/GenerateModelTransformationRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/GenerateModelTransformationRule.java index 7fd1713b4..5864d7d44 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/GenerateModelTransformationRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/GenerateModelTransformationRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/GenerateNewExampleSetMDRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/GenerateNewExampleSetMDRule.java index 9b36c6ec3..d96f68820 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/GenerateNewExampleSetMDRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/GenerateNewExampleSetMDRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/GenerateNewMDRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/GenerateNewMDRule.java index c9db9e26d..a9e507e37 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/GenerateNewMDRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/GenerateNewMDRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/GeneratePredictionModelTransformationRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/GeneratePredictionModelTransformationRule.java index a684a0cf6..b1ca1deed 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/GeneratePredictionModelTransformationRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/GeneratePredictionModelTransformationRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/InputMissingMetaDataError.java b/src/main/java/com/rapidminer/operator/ports/metadata/InputMissingMetaDataError.java index 237f244e7..fffe86d06 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/InputMissingMetaDataError.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/InputMissingMetaDataError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/LearnerPrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/LearnerPrecondition.java index 3f35932b9..3d7ec6d8f 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/LearnerPrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/LearnerPrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/MDInteger.java b/src/main/java/com/rapidminer/operator/ports/metadata/MDInteger.java index a6d2b8749..7dd4ecc0b 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/MDInteger.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/MDInteger.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/MDNumber.java b/src/main/java/com/rapidminer/operator/ports/metadata/MDNumber.java index 4590999b6..d01fee49b 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/MDNumber.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/MDNumber.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/MDReal.java b/src/main/java/com/rapidminer/operator/ports/metadata/MDReal.java index 0e53c5fd9..b986ce94b 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/MDReal.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/MDReal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/MDTransformationRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/MDTransformationRule.java index 61cc48645..d661d28ca 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/MDTransformationRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/MDTransformationRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/MDTransformer.java b/src/main/java/com/rapidminer/operator/ports/metadata/MDTransformer.java index e63c0ebb5..cfcb858a4 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/MDTransformer.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/MDTransformer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ManyToManyPassThroughRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/ManyToManyPassThroughRule.java index ef01d5540..c717422bc 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ManyToManyPassThroughRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ManyToManyPassThroughRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ManyToOnePassThroughRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/ManyToOnePassThroughRule.java index 7382db0fa..c1564b281 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ManyToOnePassThroughRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ManyToOnePassThroughRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/MetaData.java b/src/main/java/com/rapidminer/operator/ports/metadata/MetaData.java index e21404052..18d6fed50 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/MetaData.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/MetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataError.java b/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataError.java index a26bf71bc..208040914 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataError.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataFactory.java b/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataFactory.java index dd3a05d52..1ee2c66e2 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataFactory.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataInfo.java b/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataInfo.java index 959ad71f1..f4564323b 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataInfo.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataInfo.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataUnderspecifiedError.java b/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataUnderspecifiedError.java index 14731037c..407d7c92e 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataUnderspecifiedError.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/MetaDataUnderspecifiedError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ModelApplicationRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/ModelApplicationRule.java index 94b5404ad..a76513419 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ModelApplicationRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ModelApplicationRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ModelMetaData.java b/src/main/java/com/rapidminer/operator/ports/metadata/ModelMetaData.java index c612ad702..4d252e156 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ModelMetaData.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ModelMetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/OneToManyPassThroughRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/OneToManyPassThroughRule.java index 8e61068f1..5cedd9524 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/OneToManyPassThroughRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/OneToManyPassThroughRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/OperatorLoopError.java b/src/main/java/com/rapidminer/operator/ports/metadata/OperatorLoopError.java index ff5a56382..b5a01863d 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/OperatorLoopError.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/OperatorLoopError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/ParameterConditionedPrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/ParameterConditionedPrecondition.java index 890516afc..68d3f0607 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/ParameterConditionedPrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/ParameterConditionedPrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughOrGenerateRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughOrGenerateRule.java index 7407bc90f..73333fdfa 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughOrGenerateRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughOrGenerateRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughOrGenerateRuleCondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughOrGenerateRuleCondition.java index cf9ff0119..5ee212ac2 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughOrGenerateRuleCondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughOrGenerateRuleCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughRule.java index 3afc58aa5..9e89fcc37 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/PassThroughRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/Precondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/Precondition.java index 77dd57ab0..260b91e8b 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/Precondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/Precondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/PredictionModelMetaData.java b/src/main/java/com/rapidminer/operator/ports/metadata/PredictionModelMetaData.java index b8f906580..0089b32be 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/PredictionModelMetaData.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/PredictionModelMetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/SetRelation.java b/src/main/java/com/rapidminer/operator/ports/metadata/SetRelation.java index 26538cc19..7cfd84e45 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/SetRelation.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/SetRelation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/SimpleMetaDataError.java b/src/main/java/com/rapidminer/operator/ports/metadata/SimpleMetaDataError.java index e969833fa..90c7b1351 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/SimpleMetaDataError.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/SimpleMetaDataError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/SimplePrecondition.java b/src/main/java/com/rapidminer/operator/ports/metadata/SimplePrecondition.java index a377f6e3b..573927c0c 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/SimplePrecondition.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/SimplePrecondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/metadata/SubprocessTransformRule.java b/src/main/java/com/rapidminer/operator/ports/metadata/SubprocessTransformRule.java index 7346e8991..647889fec 100644 --- a/src/main/java/com/rapidminer/operator/ports/metadata/SubprocessTransformRule.java +++ b/src/main/java/com/rapidminer/operator/ports/metadata/SubprocessTransformRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/AbstractQuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/AbstractQuickFix.java index e11e09395..6d81ccfc2 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/AbstractQuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/AbstractQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/AddCompatibleOperatorQuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/AddCompatibleOperatorQuickFix.java index 04685d069..599db4ab5 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/AddCompatibleOperatorQuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/AddCompatibleOperatorQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/AttributeSelectionQuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/AttributeSelectionQuickFix.java index 0a3a9f2f3..a90841c0f 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/AttributeSelectionQuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/AttributeSelectionQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/CategorySelectionQuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/CategorySelectionQuickFix.java index 6567fc5c6..6cdb744d6 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/CategorySelectionQuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/CategorySelectionQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/ChangeAttributeRoleQuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/ChangeAttributeRoleQuickFix.java index c4e9e50fb..c24b64b84 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/ChangeAttributeRoleQuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/ChangeAttributeRoleQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/ConnectToQuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/ConnectToQuickFix.java index 9b48a5972..c3cd6e5d9 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/ConnectToQuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/ConnectToQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/DictionaryQuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/DictionaryQuickFix.java index 137342700..d336c576b 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/DictionaryQuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/DictionaryQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/DisconnectQuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/DisconnectQuickFix.java index afc6c4744..621446ed9 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/DisconnectQuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/DisconnectQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/OperatorInsertionQuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/OperatorInsertionQuickFix.java index 22654e3fe..1a990123a 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/OperatorInsertionQuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/OperatorInsertionQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/ParameterSettingQuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/ParameterSettingQuickFix.java index 68d76743b..067c46d81 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/ParameterSettingQuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/ParameterSettingQuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/QuickFix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/QuickFix.java index 7e6e1a0c6..3e907043a 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/QuickFix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/QuickFix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/ports/quickfix/RelativizeRepositoryLocationQuickfix.java b/src/main/java/com/rapidminer/operator/ports/quickfix/RelativizeRepositoryLocationQuickfix.java index 4db91eef8..079415437 100644 --- a/src/main/java/com/rapidminer/operator/ports/quickfix/RelativizeRepositoryLocationQuickfix.java +++ b/src/main/java/com/rapidminer/operator/ports/quickfix/RelativizeRepositoryLocationQuickfix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/GeneratePredictionOperator.java b/src/main/java/com/rapidminer/operator/postprocessing/GeneratePredictionOperator.java index 9b02d01e5..f75c5a8c8 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/GeneratePredictionOperator.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/GeneratePredictionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/GeneratePredictionRankingOperator.java b/src/main/java/com/rapidminer/operator/postprocessing/GeneratePredictionRankingOperator.java index 2e8ab3d9c..eee5fcb55 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/GeneratePredictionRankingOperator.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/GeneratePredictionRankingOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/PlattParameters.java b/src/main/java/com/rapidminer/operator/postprocessing/PlattParameters.java index ca120a148..b06636c9f 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/PlattParameters.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/PlattParameters.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/PlattScaling.java b/src/main/java/com/rapidminer/operator/postprocessing/PlattScaling.java index 25b51f5d0..584f582d5 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/PlattScaling.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/PlattScaling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/PlattScalingModel.java b/src/main/java/com/rapidminer/operator/postprocessing/PlattScalingModel.java index b665fe12a..c2cf70512 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/PlattScalingModel.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/PlattScalingModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/RecallChooser.java b/src/main/java/com/rapidminer/operator/postprocessing/RecallChooser.java index f83d59992..ebf4fd044 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/RecallChooser.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/RecallChooser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/SimpleUncertainPredictionsTransformation.java b/src/main/java/com/rapidminer/operator/postprocessing/SimpleUncertainPredictionsTransformation.java index 8aaf4fd6e..62cf695d7 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/SimpleUncertainPredictionsTransformation.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/SimpleUncertainPredictionsTransformation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/Threshold.java b/src/main/java/com/rapidminer/operator/postprocessing/Threshold.java index 33adf1f4b..c6d64e01c 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/Threshold.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/Threshold.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/ThresholdApplier.java b/src/main/java/com/rapidminer/operator/postprocessing/ThresholdApplier.java index fc6982e3b..7edc83817 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/ThresholdApplier.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/ThresholdApplier.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/ThresholdCreator.java b/src/main/java/com/rapidminer/operator/postprocessing/ThresholdCreator.java index c147e323f..2db7b42f9 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/ThresholdCreator.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/ThresholdCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/postprocessing/ThresholdFinder.java b/src/main/java/com/rapidminer/operator/postprocessing/ThresholdFinder.java index 4754f3edf..30cdc4394 100644 --- a/src/main/java/com/rapidminer/operator/postprocessing/ThresholdFinder.java +++ b/src/main/java/com/rapidminer/operator/postprocessing/ThresholdFinder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/AbstractDataProcessing.java b/src/main/java/com/rapidminer/operator/preprocessing/AbstractDataProcessing.java index 47f6a4c00..e2f84533c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/AbstractDataProcessing.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/AbstractDataProcessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/AbstractValueProcessing.java b/src/main/java/com/rapidminer/operator/preprocessing/AbstractValueProcessing.java index 1f819231c..8764b7e3c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/AbstractValueProcessing.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/AbstractValueProcessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/AttributeSubsetPreprocessing.java b/src/main/java/com/rapidminer/operator/preprocessing/AttributeSubsetPreprocessing.java index ac3e6bb5a..46d14c50e 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/AttributeSubsetPreprocessing.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/AttributeSubsetPreprocessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/ExampleSetTranspose.java b/src/main/java/com/rapidminer/operator/preprocessing/ExampleSetTranspose.java index f64913787..9c0fe4734 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/ExampleSetTranspose.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/ExampleSetTranspose.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/GroupByOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/GroupByOperator.java index a752ca399..fa8e2e9a3 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/GroupByOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/GroupByOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/GuessValueTypes.java b/src/main/java/com/rapidminer/operator/preprocessing/GuessValueTypes.java index 9796f7467..4093ee85d 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/GuessValueTypes.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/GuessValueTypes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/IdTagging.java b/src/main/java/com/rapidminer/operator/preprocessing/IdTagging.java index 5a0f47f89..7cda20557 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/IdTagging.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/IdTagging.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/MaterializeDataInMemory.java b/src/main/java/com/rapidminer/operator/preprocessing/MaterializeDataInMemory.java index ca6293862..01b0337a7 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/MaterializeDataInMemory.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/MaterializeDataInMemory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/NoiseModel.java b/src/main/java/com/rapidminer/operator/preprocessing/NoiseModel.java index 1da0698e0..ec1828fd1 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/NoiseModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/NoiseModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/NoiseOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/NoiseOperator.java index 555071e84..48c938577 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/NoiseOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/NoiseOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/PreprocessingModel.java b/src/main/java/com/rapidminer/operator/preprocessing/PreprocessingModel.java index a34462df4..7f030243b 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/PreprocessingModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/PreprocessingModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/PreprocessingOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/PreprocessingOperator.java index e7e746817..c1aee99eb 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/PreprocessingOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/PreprocessingOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/RemoveUnusedNominalValuesModel.java b/src/main/java/com/rapidminer/operator/preprocessing/RemoveUnusedNominalValuesModel.java index 3dc8f6904..f7771fd46 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/RemoveUnusedNominalValuesModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/RemoveUnusedNominalValuesModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/RemoveUnusedNominalValuesOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/RemoveUnusedNominalValuesOperator.java index 211739684..5713d0af5 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/RemoveUnusedNominalValuesOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/RemoveUnusedNominalValuesOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/UseRowAsAttributeNames.java b/src/main/java/com/rapidminer/operator/preprocessing/UseRowAsAttributeNames.java index 8a6298ec2..280dac6dd 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/UseRowAsAttributeNames.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/UseRowAsAttributeNames.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/discretization/AbsoluteDiscretization.java b/src/main/java/com/rapidminer/operator/preprocessing/discretization/AbsoluteDiscretization.java index 6fda4222e..b7205e454 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/discretization/AbsoluteDiscretization.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/discretization/AbsoluteDiscretization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/discretization/AbstractDiscretizationOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/discretization/AbstractDiscretizationOperator.java index 29ebf197b..d903e2ed6 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/discretization/AbstractDiscretizationOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/discretization/AbstractDiscretizationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/discretization/BinDiscretization.java b/src/main/java/com/rapidminer/operator/preprocessing/discretization/BinDiscretization.java index bf0b16a80..e48a71d7d 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/discretization/BinDiscretization.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/discretization/BinDiscretization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/discretization/DiscretizationModel.java b/src/main/java/com/rapidminer/operator/preprocessing/discretization/DiscretizationModel.java index 105087ae0..3267955e7 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/discretization/DiscretizationModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/discretization/DiscretizationModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/discretization/FrequencyDiscretization.java b/src/main/java/com/rapidminer/operator/preprocessing/discretization/FrequencyDiscretization.java index 6b48fca3e..a296302f9 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/discretization/FrequencyDiscretization.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/discretization/FrequencyDiscretization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/discretization/MinMaxBinDiscretization.java b/src/main/java/com/rapidminer/operator/preprocessing/discretization/MinMaxBinDiscretization.java index 2dc7e2664..477970e14 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/discretization/MinMaxBinDiscretization.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/discretization/MinMaxBinDiscretization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/discretization/MinimalEntropyDiscretization.java b/src/main/java/com/rapidminer/operator/preprocessing/discretization/MinimalEntropyDiscretization.java index 23ded2d00..baeafe0b0 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/discretization/MinimalEntropyDiscretization.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/discretization/MinimalEntropyDiscretization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -309,12 +309,12 @@ private ArrayList getSplitpoints(LinkedList startPartition, At */ private double[][] getRanges(ExampleSet exampleSet) throws UserError { Tools.isLabelled(exampleSet); - Attributes attributes = exampleSet.getAttributes(); - double[][] ranges = new double[attributes.size()][]; - Attribute label = attributes.getLabel(); + Attributes attributes = exampleSet.getAttributes(); + double[][] ranges = new double[attributes.size()][]; + Attribute label = attributes.getLabel(); int a = 0; - for (Attribute attribute : attributes) { + for (Attribute attribute : attributes) { if (attribute.isNumerical()) { // skip nominal and date attributes Iterator reader = exampleSet.iterator(); LinkedList startPartition = new LinkedList(); diff --git a/src/main/java/com/rapidminer/operator/preprocessing/discretization/UserBasedDiscretization.java b/src/main/java/com/rapidminer/operator/preprocessing/discretization/UserBasedDiscretization.java index 6f52400e9..ba67e7419 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/discretization/UserBasedDiscretization.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/discretization/UserBasedDiscretization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AbsoluteValueFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AbsoluteValueFilter.java index 13cff5fc1..dc0f0c4f4 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AbsoluteValueFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AbsoluteValueFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AbstractDateDataProcessing.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AbstractDateDataProcessing.java index 1fe6d4ddd..4ff3b808d 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AbstractDateDataProcessing.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AbstractDateDataProcessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AbstractFilteredDataProcessing.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AbstractFilteredDataProcessing.java index 36ee4f123..4677e86d7 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AbstractFilteredDataProcessing.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AbstractFilteredDataProcessing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AddNominalValue.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AddNominalValue.java index 4789236bc..8128bd7c3 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AddNominalValue.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AddNominalValue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -121,6 +121,8 @@ public ExampleSet apply(ExampleSet exampleSet) throws OperatorException { exampleSet.getAttributes().setSpecialAttribute(newAttribute, role.getSpecialName()); } } else { + // for polynomial attributes, attribute#setMapping clones the input parameter + attribute.setMapping(attribute.getMapping()); attribute.getMapping().mapString(newValue); } diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeAdd.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeAdd.java index 5415e8c03..8ed84129e 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeAdd.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeAdd.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeCopy.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeCopy.java index fe380b23e..9c38f12eb 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeCopy.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeCopy.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeMerge.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeMerge.java index 27a1bf312..737ab8839 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeMerge.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeMerge.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueMapper.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueMapper.java index 95ef34672..0c5ff59f7 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueMapper.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueMapper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueReplace.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueReplace.java index fe3928f9b..e81f878ce 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueReplace.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueReplace.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueSplit.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueSplit.java index cfac1edf4..6368b3b8e 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueSplit.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueSplit.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueSubstring.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueSubstring.java index 47c97ee6e..115cefe64 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueSubstring.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueSubstring.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueTrim.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueTrim.java index b622f246f..39387fac0 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueTrim.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/AttributeValueTrim.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeName.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeName.java index d986adbf0..7c9f549e6 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeName.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeName.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeNames2Generic.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeNames2Generic.java index d28f33adc..0888908c9 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeNames2Generic.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeNames2Generic.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeNamesReplace.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeNamesReplace.java index 7e61dd2ea..8d5e18b77 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeNamesReplace.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeNamesReplace.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeRole.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeRole.java index 35e31abd2..553f3e8c4 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeRole.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/ChangeAttributeRole.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/Construction2Names.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/Construction2Names.java index 919607250..76a91ce9d 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/Construction2Names.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/Construction2Names.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/Date2Nominal.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/Date2Nominal.java index a820535a4..9d10e9f45 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/Date2Nominal.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/Date2Nominal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/Date2Numerical.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/Date2Numerical.java index f44b0284a..8a888bb4c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/Date2Numerical.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/Date2Numerical.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/DateAdjust.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/DateAdjust.java index 82cd62cf7..539b75478 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/DateAdjust.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/DateAdjust.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/DeclareMissingValueOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/DeclareMissingValueOperator.java index f87fcd140..c3ba75853 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/DeclareMissingValueOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/DeclareMissingValueOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/Dictionary.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/Dictionary.java index 7e32223c3..a1d6b7aaf 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/Dictionary.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/Dictionary.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleFilter.java index 38a536c31..207353824 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleRangeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleRangeFilter.java index 9a1d414fa..2c776ae8a 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleRangeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleRangeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleSetToDictionary.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleSetToDictionary.java index 1aa0cd6c7..39acb2858 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleSetToDictionary.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/ExampleSetToDictionary.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/ExchangeAttributeRoles.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/ExchangeAttributeRoles.java index 0aa9b9c82..93a8f26cf 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/ExchangeAttributeRoles.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/ExchangeAttributeRoles.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureBlockTypeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureBlockTypeFilter.java index 87c8f26cc..aaa5529b9 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureBlockTypeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureBlockTypeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureFilter.java index 6965cf319..228a34dec 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureNameFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureNameFilter.java index 73c2c2b6c..6f2c5b87c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureNameFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureNameFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureRangeRemoval.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureRangeRemoval.java index 4a06c8e73..d8973f459 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureRangeRemoval.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureRangeRemoval.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureValueTypeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureValueTypeFilter.java index af709b5e2..3e3060e15 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureValueTypeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/FeatureValueTypeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/FillDataGaps.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/FillDataGaps.java index f809e4397..913a6fea2 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/FillDataGaps.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/FillDataGaps.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/InfiniteValueReplenishment.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/InfiniteValueReplenishment.java index 02194b6e6..38710df98 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/InfiniteValueReplenishment.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/InfiniteValueReplenishment.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/InternalBinominalRemapping.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/InternalBinominalRemapping.java index 7abfbfde1..e51e3ce8c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/InternalBinominalRemapping.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/InternalBinominalRemapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/MergeNominalValues.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/MergeNominalValues.java index 990c2d0b8..300ad702c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/MergeNominalValues.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/MergeNominalValues.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueImputation.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueImputation.java index 854b25856..a4d8edff2 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueImputation.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueImputation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueReplenishment.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueReplenishment.java index e270011dc..50e025d68 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueReplenishment.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueReplenishment.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -31,6 +31,7 @@ import com.rapidminer.example.Attribute; import com.rapidminer.example.ExampleSet; import com.rapidminer.example.Statistics; +import com.rapidminer.example.table.NominalMapping; import com.rapidminer.operator.OperatorDescription; import com.rapidminer.operator.OperatorVersion; import com.rapidminer.operator.ProcessSetupError.Severity; @@ -248,7 +249,22 @@ public double getReplenishmentValue(int functionIndex, ExampleSet exampleSet, At throw new UserError(this, 218, PARAMETER_REPLENISHMENT_VALUE, valueString); } } else if (attribute.isNominal()) { - return attribute.getMapping().mapString(valueString); + int categoryValue = attribute.getMapping().getIndex(valueString); + if (categoryValue < 0) { + if (Ontology.ATTRIBUTE_VALUE_TYPE.isA(attribute.getValueType(), Ontology.BINOMINAL)) { + if (attribute.getMapping().size() < 2) { + // clone mapping if possible to add additional value + attribute.setMapping((NominalMapping) attribute.getMapping().clone()); + } + return attribute.getMapping().mapString(valueString); + } else { + // attribute#setMapping clones the input parameter for polynomial attributes + attribute.setMapping(attribute.getMapping()); + return attribute.getMapping().mapString(valueString); + } + } else { + return categoryValue; + } } else { // any numerical type try { double value = Double.parseDouble(valueString); diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueReplenishmentView.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueReplenishmentView.java index f23feabd8..53c326eca 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueReplenishmentView.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/MissingValueReplenishmentView.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/Nominal2Date.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/Nominal2Date.java index 87ce6a264..c2cc8f7d4 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/Nominal2Date.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/Nominal2Date.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/Nominal2String.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/Nominal2String.java index 556f208e7..65509ef75 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/Nominal2String.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/Nominal2String.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalNumbers2Numerical.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalNumbers2Numerical.java index 5cdb6aee1..d2872d969 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalNumbers2Numerical.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalNumbers2Numerical.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToBinominal.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToBinominal.java index 375717fdc..398671b49 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToBinominal.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToBinominal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToBinominalModel.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToBinominalModel.java index bc49b7784..cd999e40c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToBinominalModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToBinominalModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToNumeric.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToNumeric.java index c50819506..0f7354001 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToNumeric.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToNumeric.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToNumericModel.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToNumericModel.java index f665105dd..52788afb4 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToNumericModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/NominalToNumericModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/NonDominatedSorting.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/NonDominatedSorting.java index 0c8c56d45..73be5d94f 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/NonDominatedSorting.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/NonDominatedSorting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToBinominal.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToBinominal.java index 9e908dde8..ee2749764 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToBinominal.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToBinominal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToFormattedNominal.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToFormattedNominal.java index 3de98c28f..e8f6a92f1 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToFormattedNominal.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToFormattedNominal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToNominal.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToNominal.java index 74ef4bba2..ce207e6d8 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToNominal.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToNominal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToPolynominal.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToPolynominal.java index 93af36e14..86faf0ac3 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToPolynominal.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/NumericToPolynominal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/Numerical2Date.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/Numerical2Date.java index 5689748a7..721c7518d 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/Numerical2Date.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/Numerical2Date.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/Numerical2Real.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/Numerical2Real.java index f954f4860..919e0a3a0 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/Numerical2Real.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/Numerical2Real.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/PermutationOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/PermutationOperator.java index 82e2d4999..aa53deeb2 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/PermutationOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/PermutationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/Real2Integer.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/Real2Integer.java index 3fb2f09d3..da1ef5d67 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/Real2Integer.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/Real2Integer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/RemoveDuplicates.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/RemoveDuplicates.java index 8dfec64bc..6086cdd7e 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/RemoveDuplicates.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/RemoveDuplicates.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/SetData.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/SetData.java index 0c679ba63..fd2181c58 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/SetData.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/SetData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/Sorting.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/Sorting.java index 19f7979e1..231866e91 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/Sorting.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/Sorting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/String2Nominal.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/String2Nominal.java index ec007e067..0b8ef9e74 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/String2Nominal.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/String2Nominal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/TFIDFFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/TFIDFFilter.java index ce70c5957..5fc4e59b0 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/TFIDFFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/TFIDFFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/ValueReplenishment.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/ValueReplenishment.java index a5ba3b122..0c020b22c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/ValueReplenishment.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/ValueReplenishment.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/ValueReplenishmentModel.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/ValueReplenishmentModel.java index 86db40243..6323b8029 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/ValueReplenishmentModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/ValueReplenishmentModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AbstractAttributeFilterCondition.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AbstractAttributeFilterCondition.java index f37904048..6feaa4e4b 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AbstractAttributeFilterCondition.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AbstractAttributeFilterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeFilter.java index d0683b913..bf0434b2b 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeFilterCondition.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeFilterCondition.java index 2d08deb6b..7c9ebf810 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeFilterCondition.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeFilterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeOrderingOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeOrderingOperator.java index 6053e0e2e..d2ab5bdc6 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeOrderingOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/AttributeOrderingOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/BlockTypeAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/BlockTypeAttributeFilter.java index 4cc2c1860..349c28f39 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/BlockTypeAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/BlockTypeAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/DateAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/DateAttributeFilter.java index c1d3c3c2d..cb401ac84 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/DateAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/DateAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/MissingValuesAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/MissingValuesAttributeFilter.java index 376419a8d..d9f134926 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/MissingValuesAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/MissingValuesAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NoMissingValuesAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NoMissingValuesAttributeFilter.java index e3419c952..2c743f5a0 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NoMissingValuesAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NoMissingValuesAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NominalAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NominalAttributeFilter.java index 733cc3274..0656f3fce 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NominalAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NominalAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NumericValueAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NumericValueAttributeFilter.java index 533c99b75..3fa814d14 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NumericValueAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NumericValueAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NumericalAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NumericalAttributeFilter.java index e8c480721..b87583ba5 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NumericalAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/NumericalAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/RegexpAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/RegexpAttributeFilter.java index 25faa5fd5..461eb8f1b 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/RegexpAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/RegexpAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/SingleAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/SingleAttributeFilter.java index defbcb049..ef65717ff 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/SingleAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/SingleAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/SubsetAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/SubsetAttributeFilter.java index a4a91d6e5..f8aaf5517 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/SubsetAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/SubsetAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/TransparentAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/TransparentAttributeFilter.java index 4fb80019e..a83fd820b 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/TransparentAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/TransparentAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/ValueTypeAttributeFilter.java b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/ValueTypeAttributeFilter.java index a9b51f596..a4a2bf19c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/ValueTypeAttributeFilter.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/filter/attributes/ValueTypeAttributeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/join/AbstractExampleSetJoin.java b/src/main/java/com/rapidminer/operator/preprocessing/join/AbstractExampleSetJoin.java index 2f1e71841..4619d6859 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/join/AbstractExampleSetJoin.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/join/AbstractExampleSetJoin.java @@ -1,21 +1,21 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors - * + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * * Complete list of developers available at our web site: - * + * * http://rapidminer.com - * + * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. -*/ + */ package com.rapidminer.operator.preprocessing.join; import java.util.Collections; @@ -84,7 +84,7 @@ protected static class AttributeSource { protected static final int FIRST_SOURCE = 1; - protected static final int SECOND_SOURCE = 2; + public static final int SECOND_SOURCE = 2; protected int source; @@ -249,7 +249,7 @@ public void doWork() throws OperatorException { Attribute specialAttribute = role.getAttribute(); if (!usedSpecialAttributes.contains(specialName) && !excludedAttributes.contains(new Pair<>(AttributeSource.SECOND_SOURCE, specialAttribute))) { // not - // there + // there Attribute specialAttributeClone = (Attribute) specialAttribute.clone(); boolean addToUnionList = true; for (Attribute unionAttribute : unionAttributeList) { diff --git a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetCartesian.java b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetCartesian.java index ef8eb7083..79a08c194 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetCartesian.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetCartesian.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetIntersect.java b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetIntersect.java index 77a3ccfdb..9f06ff04e 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetIntersect.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetIntersect.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetJoin.java b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetJoin.java index fedaddbe1..e6e6cbfd7 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetJoin.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetJoin.java @@ -1,27 +1,28 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors - * + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * * Complete list of developers available at our web site: - * + * * http://rapidminer.com - * + * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. -*/ + */ package com.rapidminer.operator.preprocessing.join; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -32,6 +33,7 @@ import com.rapidminer.example.Attributes; import com.rapidminer.example.Example; import com.rapidminer.example.ExampleSet; +import com.rapidminer.example.table.NominalMapping; import com.rapidminer.example.utils.ExampleSetBuilder; import com.rapidminer.example.utils.ExampleSets; import com.rapidminer.operator.OperatorDescription; @@ -74,7 +76,10 @@ *

* * @author Ingo Mierswa, Tobias Malbrecht, Marius Helf + * + * @deprecated Use {@link BeltTableJoin} instead */ +@Deprecated public class ExampleSetJoin extends AbstractExampleSetJoin { public static class DoubleArrayWrapper { @@ -207,6 +212,7 @@ protected ExampleSetBuilder joinData(ExampleSet leftExampleSet, ExampleSet right // the attributes that are used in the left and the right table as key attributes: Pair keyAttributes = getKeyAttributes(leftExampleSet, rightExampleSet); + copyMappings(joinType, keyAttributes, unionAttributeList); switch (joinType) { case JOIN_TYPE_INNER: @@ -232,11 +238,100 @@ protected ExampleSetBuilder joinData(ExampleSet leftExampleSet, ExampleSet right } /** - * Returns a Pair that contains two arrays of attributes of equals lenghts. Attributes in these - * arrays with the same index resemble attributes which must be equal during the join operation - * to match an example. Only if all key attributes match, the example match. Thus, each returned - * array defines a key for the example sets, whereby the the first entry of the pair is for the - * left example set, the second one for the right example set. + * Checks if the mappings of the keyAttributes or their corresponding unionAttributes need to be copied depending on + * the joinType. + * + * @param joinType + * the type of the join + * @param keyAttributes + * the attributes to copy + * @param unionAttributes + * the final attributes of the joined set + */ + private void copyMappings(int joinType, Pair keyAttributes, + List unionAttributes) { + // for right and outer the method addRightOnlyOccurences is called which might change the mappings of the union + // attribute corresponding to the left keyAttribute + if (joinType == JOIN_TYPE_RIGHT || joinType == JOIN_TYPE_OUTER) { + copyUnionMappings(keyAttributes, unionAttributes); + } + + // no id is used and inner or left then createKeyMapping(right,left) is called and left keyAttribute mappings + // changed, outer calls left + boolean useId = getParameterAsBoolean(PARAMETER_USE_ID); + if (!useId && (joinType == JOIN_TYPE_INNER || joinType == JOIN_TYPE_LEFT || joinType == JOIN_TYPE_OUTER)) { + copyMappings(keyAttributes, true); + } + + // no id is used and right then createKeyMapping(left,right) is called and right keyAttribute mappings changed + if (!useId && joinType == JOIN_TYPE_RIGHT) { + copyMappings(keyAttributes, false); + } + } + + /** + * Copies the mapping of the union attributes corresponding to the left key Attributes. + * + * @param keyAttributes + * the key attributes + * @param unionAttributeList + * the final attributes of the joined set + */ + private void copyUnionMappings(Pair keyAttributes, List unionAttributeList) { + Attribute[] copyAttributes = keyAttributes.getFirst(); + for (Attribute attribute : copyAttributes) { + if (attribute.isNominal()) { + Attribute unionAtt = findAttribute(unionAttributeList, attribute.getName()); + if (unionAtt != null) { + unionAtt.setMapping((NominalMapping) unionAtt.getMapping().clone()); + } + } + } + + } + + /** + * Finds the attribute with the given name in the given list. + * + * @param attributeList + * the list to check + * @param name + * the attribute name to look for + * @return the attribute with the name or {@code null} + */ + private Attribute findAttribute(List attributeList, String name) { + for (Attribute unionAttribute : attributeList) { + if (unionAttribute.getName().equals(name)) { + return unionAttribute; + } + } + return null; + } + + /** + * Copies the mappings of either the left or the right key attributes. + * + * @param keyAttributes + * the key-attributes to copy + * @param left + * if true the left key attributes are copied, otherwise the right + */ + private void copyMappings(Pair keyAttributes, boolean left) { + Attribute[] copyAttributes = left ? keyAttributes.getFirst() : keyAttributes.getSecond(); + for (Attribute attribute : copyAttributes) { + if (attribute.isNominal()) { + NominalMapping newMapping = (NominalMapping) attribute.getMapping().clone(); + attribute.setMapping(newMapping); + } + } + + } + + /** + * Returns a Pair that contains two arrays of attributes of equals lenghts. Attributes in these arrays with the same + * index resemble attributes which must be equal during the join operation to match an example. Only if all key + * attributes match, the example match. Thus, each returned array defines a key for the example sets, whereby the + * the first entry of the pair is for the left example set, the second one for the right example set. */ private Pair getKeyAttributes(ExampleSet leftExampleSet, ExampleSet rightExampleSet) throws OperatorException { @@ -354,7 +449,7 @@ private ExampleSetBuilder performInnerJoin(ExampleSet leftExampleSet, ExampleSet private ExampleSetBuilder performLeftJoin(ExampleSet leftExampleSet, ExampleSet rightExampleSet, List originalAttributeSources, List unionAttributeList, Pair keyAttributes, Set matchedExamplesInRightTable) - throws ProcessStoppedException { + throws ProcessStoppedException { ExampleSetBuilder builder = ExampleSets.from(unionAttributeList); Attribute[] leftKeyAttributes = null; @@ -381,7 +476,7 @@ private ExampleSetBuilder performLeftJoin(ExampleSet leftExampleSet, ExampleSet addCombinedOccurence(originalAttributeSources, unionAttributeList, builder, leftExample, rightExample); if (matchedExamplesInRightTable != null) { matchedExamplesInRightTable - .add(new DoubleArrayWrapper(getKeyValues(rightExample, rightKeyAttributes))); + .add(new DoubleArrayWrapper(getKeyValues(rightExample, rightKeyAttributes))); } } } else { // no rows with this key in right table @@ -545,7 +640,9 @@ private void addRightOnlyOccurence(List originalAttributeSource boolean keepBoth, boolean removeDoubleAttributes) { double[] unionDataRow = new double[unionAttributeList.size()]; int attributeIndex = 0; + Iterator unionIterator = unionAttributeList.iterator(); for (AttributeSource attributeSource : originalAttributeSources) { + Attribute unionAttribute = unionIterator.next(); if (attributeSource.getSource() == AttributeSource.FIRST_SOURCE) { // since keys attributes are always taken from left example set, ID value must be // fetched @@ -569,10 +666,9 @@ private void addRightOnlyOccurence(List originalAttributeSource if (leftKeyAttributes[id].isNominal()) { // consider different mapping in left and right attribute Attribute rightAttribute = rightKeyAttributes[id]; - Attribute leftAttribute = leftKeyAttributes[id]; int rightIndex = (int) rightExample.getValue(rightAttribute); String valueAsString = rightAttribute.getMapping().mapIndex(rightIndex); - int leftIndex = leftAttribute.getMapping().mapString(valueAsString); + int leftIndex = unionAttribute.getMapping().mapString(valueAsString); unionDataRow[attributeIndex] = leftIndex; } else { unionDataRow[attributeIndex] = rightExample.getValue(rightKeyAttributes[id]); diff --git a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetMerge.java b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetMerge.java index 06e8dd690..13eb63d4d 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetMerge.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetMerge.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -439,8 +439,8 @@ private void checkForCompatibility(ExampleSet first, ExampleSet second) throws O Attribute firstAttribute = firstIterator.next(); Attribute secondAttribute = second.getAttributes().get(firstAttribute.getName()); if (secondAttribute == null) { - throw new UserError(this, 925, "Attribute with name '" + firstAttribute.getName() - + "' is not part of second example set."); + throw new UserError(this, 925, "Attribute with name '" + firstAttribute.getName() + + "' is not part of second example set."); // No type check necessary. Type check is done in mrege() itself. // //if (firstAttribute.getValueType() != secondAttribute.getValueType()) { // // ATTENTION: Breaks compatibility for previously running diff --git a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetMinus.java b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetMinus.java index 24a37e446..a4817ad12 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetMinus.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetMinus.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetSuperset.java b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetSuperset.java index b40fe16fd..965b2c991 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetSuperset.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetSuperset.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetUnion.java b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetUnion.java index 44f4f620c..a406f83a5 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetUnion.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/join/ExampleSetUnion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/AbstractNormalizationMethod.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/AbstractNormalizationMethod.java index cd4267f4e..a354ac6dc 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/AbstractNormalizationMethod.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/AbstractNormalizationMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/AbstractNormalizationModel.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/AbstractNormalizationModel.java index 548253083..b8226d98b 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/AbstractNormalizationModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/AbstractNormalizationModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/DenormalizationModel.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/DenormalizationModel.java index ce833aa21..3260fbb42 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/DenormalizationModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/DenormalizationModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/DenormalizationOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/DenormalizationOperator.java index 1473c0fe4..1ca5bfbf0 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/DenormalizationOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/DenormalizationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/IQRNormalizationMethod.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/IQRNormalizationMethod.java index 5f68d86c6..27fe2b96d 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/IQRNormalizationMethod.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/IQRNormalizationMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/IQRNormalizationModel.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/IQRNormalizationModel.java index ffb6fa388..f868e788f 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/IQRNormalizationModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/IQRNormalizationModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/MinMaxNormalizationModel.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/MinMaxNormalizationModel.java index a5032e6c6..44f8ac553 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/MinMaxNormalizationModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/MinMaxNormalizationModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/Normalization.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/Normalization.java index 39603adfc..c65c59b73 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/Normalization.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/Normalization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/NormalizationMethod.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/NormalizationMethod.java index 8dd299c14..63412eb18 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/NormalizationMethod.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/NormalizationMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/ProportionNormalizationMethod.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/ProportionNormalizationMethod.java index c329e8cee..d220e62b0 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/ProportionNormalizationMethod.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/ProportionNormalizationMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/ProportionNormalizationModel.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/ProportionNormalizationModel.java index 7286fb328..02f6bee68 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/ProportionNormalizationModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/ProportionNormalizationModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/RangeNormalizationMethod.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/RangeNormalizationMethod.java index 0e5e3347e..ec4a0788d 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/RangeNormalizationMethod.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/RangeNormalizationMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/ZTransformationModel.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/ZTransformationModel.java index 735f6ffc9..2ff717b0b 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/ZTransformationModel.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/ZTransformationModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/normalization/ZTransformationNormalizationMethod.java b/src/main/java/com/rapidminer/operator/preprocessing/normalization/ZTransformationNormalizationMethod.java index bab047c20..0959841a7 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/normalization/ZTransformationNormalizationMethod.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/normalization/ZTransformationNormalizationMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/outlier/AbstractOutlierDetection.java b/src/main/java/com/rapidminer/operator/preprocessing/outlier/AbstractOutlierDetection.java index 16b16a42c..6ae26c5c4 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/outlier/AbstractOutlierDetection.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/outlier/AbstractOutlierDetection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/outlier/COFKnn.java b/src/main/java/com/rapidminer/operator/preprocessing/outlier/COFKnn.java index 33419f4c6..b7dda9758 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/outlier/COFKnn.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/outlier/COFKnn.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/outlier/COFObject.java b/src/main/java/com/rapidminer/operator/preprocessing/outlier/COFObject.java index 60ba1b290..51f87bb2b 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/outlier/COFObject.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/outlier/COFObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/outlier/DBOutlierOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/outlier/DBOutlierOperator.java index 3fa93d05c..9ba2ae0ef 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/outlier/DBOutlierOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/outlier/DBOutlierOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/outlier/DKNOutlierOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/outlier/DKNOutlierOperator.java index caeb94075..7dfb4dea9 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/outlier/DKNOutlierOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/outlier/DKNOutlierOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/outlier/EcodbOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/outlier/EcodbOperator.java index 0c5f6c5a0..556dce7a1 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/outlier/EcodbOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/outlier/EcodbOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -116,9 +116,9 @@ public EcodbOperator(OperatorDescription description) { */ @Override public ExampleSet apply(ExampleSet eSet) throws OperatorException { - // check if the label attribute exists and is nominal - Tools.hasNominalLabels(eSet, getOperatorClassName()); - + // check if the label attribute exists and is nominal + Tools.hasNominalLabels(eSet, getOperatorClassName()); + // declaration and initializing the necessary fields from input int k = this.getParameterAsInt(PARAMETER_NUMBER_OF_NEIGHBORS); int n = this.getParameterAsInt(PARAMETER_NUMBER_OF_Class_OUTLIERS); diff --git a/src/main/java/com/rapidminer/operator/preprocessing/outlier/KdistanceContainer.java b/src/main/java/com/rapidminer/operator/preprocessing/outlier/KdistanceContainer.java index d555dcbdf..7828eac4c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/outlier/KdistanceContainer.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/outlier/KdistanceContainer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/outlier/LOFOutlierOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/outlier/LOFOutlierOperator.java index 1ec1f3596..337cbdd91 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/outlier/LOFOutlierOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/outlier/LOFOutlierOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/outlier/SearchObject.java b/src/main/java/com/rapidminer/operator/preprocessing/outlier/SearchObject.java index 1dcd5dd6e..19ad4ac8e 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/outlier/SearchObject.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/outlier/SearchObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/outlier/SearchSpace.java b/src/main/java/com/rapidminer/operator/preprocessing/outlier/SearchSpace.java index 082489b71..605e7f56a 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/outlier/SearchSpace.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/outlier/SearchSpace.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbsoluteSampling.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbsoluteSampling.java index 5d7349dc0..69f961026 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbsoluteSampling.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbsoluteSampling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbsoluteStratifiedSampling.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbsoluteStratifiedSampling.java index f1fb58431..b6c514e47 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbsoluteStratifiedSampling.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbsoluteStratifiedSampling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractBootstrapping.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractBootstrapping.java index 474137917..a01e759a8 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractBootstrapping.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractBootstrapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractSamplingOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractSamplingOperator.java index e6b57256f..abb21a6a6 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractSamplingOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractSamplingOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractStratifiedSampling.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractStratifiedSampling.java index 98b130baa..a7ae6ed6d 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractStratifiedSampling.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/AbstractStratifiedSampling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/Bootstrapping.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/Bootstrapping.java index d1b9bd9f5..987384666 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/Bootstrapping.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/Bootstrapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/BootstrappingOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/BootstrappingOperator.java index 004152021..5ef186102 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/BootstrappingOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/BootstrappingOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/KennardStoneSampling.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/KennardStoneSampling.java index e81620158..6bffc82c9 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/KennardStoneSampling.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/KennardStoneSampling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/ModelBasedSampling.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/ModelBasedSampling.java index f32ccb5a7..b26ed6d01 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/ModelBasedSampling.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/ModelBasedSampling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/PartitionOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/PartitionOperator.java index 7f4d15a0e..ec275b1e2 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/PartitionOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/PartitionOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/RatioStratifiedSampling.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/RatioStratifiedSampling.java index 8fb3d3b56..8bc143d29 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/RatioStratifiedSampling.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/RatioStratifiedSampling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/SamplingOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/SamplingOperator.java index dabdcaff9..ceeead6d9 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/SamplingOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/SamplingOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/StratifiedSamplingOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/StratifiedSamplingOperator.java index b594207fb..bbea1e187 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/StratifiedSamplingOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/StratifiedSamplingOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/WeightedBootstrapping.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/WeightedBootstrapping.java index ecb2f468b..88fa0be53 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/WeightedBootstrapping.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/WeightedBootstrapping.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/AbsoluteSamplingSequenceGenerator.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/AbsoluteSamplingSequenceGenerator.java index 346c75b0b..d5358ccab 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/AbsoluteSamplingSequenceGenerator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/AbsoluteSamplingSequenceGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/ProbabilitySamplingSequenceGenerator.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/ProbabilitySamplingSequenceGenerator.java index f29af3777..6c7a9e767 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/ProbabilitySamplingSequenceGenerator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/ProbabilitySamplingSequenceGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/RelativeSamplingSequenceGenerator.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/RelativeSamplingSequenceGenerator.java index ed1c02c74..b5f63e4f5 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/RelativeSamplingSequenceGenerator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/RelativeSamplingSequenceGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/SamplingSequenceGenerator.java b/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/SamplingSequenceGenerator.java index 6222786c5..2d2554013 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/SamplingSequenceGenerator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/sampling/sequences/SamplingSequenceGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/AggregationOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/AggregationOperator.java index 380a847e1..656f3aceb 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/AggregationOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/AggregationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/Attribute2ExamplePivoting.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/Attribute2ExamplePivoting.java index 7ced5b9f1..7c24e339a 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/Attribute2ExamplePivoting.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/Attribute2ExamplePivoting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/Example2AttributePivoting.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/Example2AttributePivoting.java index a8607a7da..9f07721b1 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/Example2AttributePivoting.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/Example2AttributePivoting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/ExampleSetTransformationOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/ExampleSetTransformationOperator.java index d63506321..6699fdfbc 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/ExampleSetTransformationOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/ExampleSetTransformationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/GroupedANOVAOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/GroupedANOVAOperator.java index 38a5a4052..bbf383bd4 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/GroupedANOVAOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/GroupedANOVAOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AbstractCountRatioAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AbstractCountRatioAggregationFunction.java index 582e75228..2ff251174 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AbstractCountRatioAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AbstractCountRatioAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationFunction.java index d1aae6d64..d874d5b69 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationFunctionMetaDataProvider.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationFunctionMetaDataProvider.java index f2e8e44bf..5012d0ee7 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationFunctionMetaDataProvider.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationFunctionMetaDataProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationOperator.java index a733825b1..30ad3087d 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/AggregationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/Aggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/Aggregator.java index 45c2f686b..2a3637c68 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/Aggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/Aggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ConcatAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ConcatAggregationFunction.java index 027dbaafe..37959cff1 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ConcatAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ConcatAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ConcatAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ConcatAggregator.java index f4c0431cb..e59729154 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ConcatAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ConcatAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountAggregationFunction.java index 130454aeb..f0b8757ee 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountAggregator.java index bf12d6b13..c72458fa5 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountFractionalAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountFractionalAggregationFunction.java index 6de8cbf16..c3fecb323 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountFractionalAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountFractionalAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIgnoringMissingsAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIgnoringMissingsAggregationFunction.java index 6fa0e84fd..ae9fbae4a 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIgnoringMissingsAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIgnoringMissingsAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIgnoringMissingsAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIgnoringMissingsAggregator.java index 1d44dfa1f..76e8a4ae9 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIgnoringMissingsAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIgnoringMissingsAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIncludingMissingsAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIncludingMissingsAggregationFunction.java index 516035623..34690dc0c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIncludingMissingsAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIncludingMissingsAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIncludingMissingsAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIncludingMissingsAggregator.java index a10769a13..62fe7add2 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIncludingMissingsAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountIncludingMissingsAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountPercentageAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountPercentageAggregationFunction.java index ed05d48e8..e939730aa 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountPercentageAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/CountPercentageAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/DefaultAggregationFunctionMetaDataProvider.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/DefaultAggregationFunctionMetaDataProvider.java index ed20bb395..7e7d1a69a 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/DefaultAggregationFunctionMetaDataProvider.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/DefaultAggregationFunctionMetaDataProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastAggregationFunction.java index 0d73cc14c..65aad94fa 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastAggregator.java index 3b65981a3..68e1fdc45 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastOccurringAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastOccurringAggregationFunction.java index b13199aa2..28d6493fe 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastOccurringAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastOccurringAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastOccurringAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastOccurringAggregator.java index f16d5f4fb..4789c805c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastOccurringAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LeastOccurringAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LogProductAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LogProductAggregationFunction.java index 150ef6074..d5326c418 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LogProductAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LogProductAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LogProductAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LogProductAggregator.java index 4f126a9fe..3e9287741 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LogProductAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/LogProductAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MappingAggregationFunctionMetaDataProvider.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MappingAggregationFunctionMetaDataProvider.java index ef20d8ae1..2067f035b 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MappingAggregationFunctionMetaDataProvider.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MappingAggregationFunctionMetaDataProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MaxAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MaxAggregationFunction.java index 025ec77b8..d8ac0f97a 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MaxAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MaxAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MaxAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MaxAggregator.java index e1c2c75f5..a64c48a31 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MaxAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MaxAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MeanAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MeanAggregationFunction.java index 648f12507..1f63962b7 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MeanAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MeanAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MeanAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MeanAggregator.java index 817e32a7e..3394cd180 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MeanAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MeanAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregationFunction.java index c576453e8..2f8ca7883 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregationFunctionLegacy.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregationFunctionLegacy.java index 105facd7a..ce458a228 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregationFunctionLegacy.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregationFunctionLegacy.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregator.java index 7e09e223f..4d9e6c4b4 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregatorLegacy.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregatorLegacy.java index ab33845b2..6f25a5e61 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregatorLegacy.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MedianAggregatorLegacy.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MinAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MinAggregationFunction.java index 15b956cd3..e5f533e5b 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MinAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MinAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MinAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MinAggregator.java index 63c67d98c..a184ed9d4 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MinAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/MinAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ModeAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ModeAggregationFunction.java index 81eef45f3..1f557695c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ModeAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ModeAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ModeAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ModeAggregator.java index dabb8bd26..10dca84ba 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ModeAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ModeAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NominalAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NominalAggregationFunction.java index c1a61a1fb..42e2d5fb4 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NominalAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NominalAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NumericalAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NumericalAggregationFunction.java index 1d7fa6593..9b2221360 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NumericalAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NumericalAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NumericalAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NumericalAggregator.java index 6fe25a215..6b402e346 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NumericalAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/NumericalAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ProductAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ProductAggregationFunction.java index 347d716d9..27e29bc5c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ProductAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ProductAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ProductAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ProductAggregator.java index faaef7c07..ea2127b22 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ProductAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/ProductAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/StandardDeviationAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/StandardDeviationAggregationFunction.java index d2d6d7023..a715b78b8 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/StandardDeviationAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/StandardDeviationAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/StandardDeviationAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/StandardDeviationAggregator.java index 701a9b45b..1b3c6a86f 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/StandardDeviationAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/StandardDeviationAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumAggregationFunction.java index 9fab19c3d..713cdd680 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumAggregator.java index 347bbbec9..fb6177849 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumFractionalAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumFractionalAggregationFunction.java index 11b459947..6c5de934a 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumFractionalAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/SumFractionalAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/VarianceAggregationFunction.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/VarianceAggregationFunction.java index 41cf250dd..363ca1e5e 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/VarianceAggregationFunction.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/VarianceAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/VarianceAggregator.java b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/VarianceAggregator.java index 6e65969d1..157ff0add 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/VarianceAggregator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/transformation/aggregation/VarianceAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/weighting/AbstractExampleWeighting.java b/src/main/java/com/rapidminer/operator/preprocessing/weighting/AbstractExampleWeighting.java index 8abee9f20..f67253d6f 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/weighting/AbstractExampleWeighting.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/weighting/AbstractExampleWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/weighting/EqualLabelWeighting.java b/src/main/java/com/rapidminer/operator/preprocessing/weighting/EqualLabelWeighting.java index 3162af0a9..dd8dbb14c 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/weighting/EqualLabelWeighting.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/weighting/EqualLabelWeighting.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/preprocessing/weighting/LocalPolynomialExampleWeightingOperator.java b/src/main/java/com/rapidminer/operator/preprocessing/weighting/LocalPolynomialExampleWeightingOperator.java index 73d8531a2..07a27c8c1 100644 --- a/src/main/java/com/rapidminer/operator/preprocessing/weighting/LocalPolynomialExampleWeightingOperator.java +++ b/src/main/java/com/rapidminer/operator/preprocessing/weighting/LocalPolynomialExampleWeightingOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/repository/AbstractRepositoryEntryRelocationOperator.java b/src/main/java/com/rapidminer/operator/repository/AbstractRepositoryEntryRelocationOperator.java index d62d22ae4..06c91bee6 100644 --- a/src/main/java/com/rapidminer/operator/repository/AbstractRepositoryEntryRelocationOperator.java +++ b/src/main/java/com/rapidminer/operator/repository/AbstractRepositoryEntryRelocationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/repository/AbstractRepositoryManagerOperator.java b/src/main/java/com/rapidminer/operator/repository/AbstractRepositoryManagerOperator.java index ad855203d..714770c33 100644 --- a/src/main/java/com/rapidminer/operator/repository/AbstractRepositoryManagerOperator.java +++ b/src/main/java/com/rapidminer/operator/repository/AbstractRepositoryManagerOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/repository/RepositoryEntryCopyOperator.java b/src/main/java/com/rapidminer/operator/repository/RepositoryEntryCopyOperator.java index 78e9dd98e..89b614344 100644 --- a/src/main/java/com/rapidminer/operator/repository/RepositoryEntryCopyOperator.java +++ b/src/main/java/com/rapidminer/operator/repository/RepositoryEntryCopyOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/repository/RepositoryEntryDeleteOperator.java b/src/main/java/com/rapidminer/operator/repository/RepositoryEntryDeleteOperator.java index ff911a798..54333bab9 100644 --- a/src/main/java/com/rapidminer/operator/repository/RepositoryEntryDeleteOperator.java +++ b/src/main/java/com/rapidminer/operator/repository/RepositoryEntryDeleteOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/repository/RepositoryEntryMoveOperator.java b/src/main/java/com/rapidminer/operator/repository/RepositoryEntryMoveOperator.java index 8bf66f8ee..696960ba7 100644 --- a/src/main/java/com/rapidminer/operator/repository/RepositoryEntryMoveOperator.java +++ b/src/main/java/com/rapidminer/operator/repository/RepositoryEntryMoveOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/repository/RepositoryEntryRenameOperator.java b/src/main/java/com/rapidminer/operator/repository/RepositoryEntryRenameOperator.java index 349329816..6be2d8144 100644 --- a/src/main/java/com/rapidminer/operator/repository/RepositoryEntryRenameOperator.java +++ b/src/main/java/com/rapidminer/operator/repository/RepositoryEntryRenameOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/similarity/CrossDistancesOperator.java b/src/main/java/com/rapidminer/operator/similarity/CrossDistancesOperator.java index 9b7bb1a8a..f7bad0cb8 100644 --- a/src/main/java/com/rapidminer/operator/similarity/CrossDistancesOperator.java +++ b/src/main/java/com/rapidminer/operator/similarity/CrossDistancesOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/similarity/ExampleSet2Similarity.java b/src/main/java/com/rapidminer/operator/similarity/ExampleSet2Similarity.java index 17ad2ab1c..328fbc583 100644 --- a/src/main/java/com/rapidminer/operator/similarity/ExampleSet2Similarity.java +++ b/src/main/java/com/rapidminer/operator/similarity/ExampleSet2Similarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/similarity/ExampleSet2SimilarityExampleSet.java b/src/main/java/com/rapidminer/operator/similarity/ExampleSet2SimilarityExampleSet.java index f43a8767f..1454faed1 100644 --- a/src/main/java/com/rapidminer/operator/similarity/ExampleSet2SimilarityExampleSet.java +++ b/src/main/java/com/rapidminer/operator/similarity/ExampleSet2SimilarityExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/similarity/Similarity2ExampleSet.java b/src/main/java/com/rapidminer/operator/similarity/Similarity2ExampleSet.java index f8ce4b327..d3fd725b3 100644 --- a/src/main/java/com/rapidminer/operator/similarity/Similarity2ExampleSet.java +++ b/src/main/java/com/rapidminer/operator/similarity/Similarity2ExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/similarity/SimilarityMeasureObject.java b/src/main/java/com/rapidminer/operator/similarity/SimilarityMeasureObject.java index 1968a2816..17b766776 100644 --- a/src/main/java/com/rapidminer/operator/similarity/SimilarityMeasureObject.java +++ b/src/main/java/com/rapidminer/operator/similarity/SimilarityMeasureObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/AttributeSubsetSelector.java b/src/main/java/com/rapidminer/operator/tools/AttributeSubsetSelector.java index 8ce8add5f..4e9d3c674 100644 --- a/src/main/java/com/rapidminer/operator/tools/AttributeSubsetSelector.java +++ b/src/main/java/com/rapidminer/operator/tools/AttributeSubsetSelector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/BodySerializer.java b/src/main/java/com/rapidminer/operator/tools/BodySerializer.java index d283e3379..ac76baf99 100644 --- a/src/main/java/com/rapidminer/operator/tools/BodySerializer.java +++ b/src/main/java/com/rapidminer/operator/tools/BodySerializer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/ConsolePrintOperator.java b/src/main/java/com/rapidminer/operator/tools/ConsolePrintOperator.java index 50792fb1a..fdda7d7e7 100644 --- a/src/main/java/com/rapidminer/operator/tools/ConsolePrintOperator.java +++ b/src/main/java/com/rapidminer/operator/tools/ConsolePrintOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/DelayOperator.java b/src/main/java/com/rapidminer/operator/tools/DelayOperator.java index 47f5fab9a..c4721479c 100644 --- a/src/main/java/com/rapidminer/operator/tools/DelayOperator.java +++ b/src/main/java/com/rapidminer/operator/tools/DelayOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/ExampleSetToStream.java b/src/main/java/com/rapidminer/operator/tools/ExampleSetToStream.java index 0f1e94699..b77e52b32 100644 --- a/src/main/java/com/rapidminer/operator/tools/ExampleSetToStream.java +++ b/src/main/java/com/rapidminer/operator/tools/ExampleSetToStream.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/ExpressionEvaluationException.java b/src/main/java/com/rapidminer/operator/tools/ExpressionEvaluationException.java index b63bc7cbf..cdcd338d4 100644 --- a/src/main/java/com/rapidminer/operator/tools/ExpressionEvaluationException.java +++ b/src/main/java/com/rapidminer/operator/tools/ExpressionEvaluationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/IOObjectSerializer.java b/src/main/java/com/rapidminer/operator/tools/IOObjectSerializer.java index 76799c2d6..c2aacc954 100644 --- a/src/main/java/com/rapidminer/operator/tools/IOObjectSerializer.java +++ b/src/main/java/com/rapidminer/operator/tools/IOObjectSerializer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/OperatorCreationHook.java b/src/main/java/com/rapidminer/operator/tools/OperatorCreationHook.java index e9ce15431..8dd360bea 100644 --- a/src/main/java/com/rapidminer/operator/tools/OperatorCreationHook.java +++ b/src/main/java/com/rapidminer/operator/tools/OperatorCreationHook.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/RMObjectInputStream.java b/src/main/java/com/rapidminer/operator/tools/RMObjectInputStream.java index 1c49004e3..8fb052436 100644 --- a/src/main/java/com/rapidminer/operator/tools/RMObjectInputStream.java +++ b/src/main/java/com/rapidminer/operator/tools/RMObjectInputStream.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/SendMailOperator.java b/src/main/java/com/rapidminer/operator/tools/SendMailOperator.java index 5c84c3bac..4751bdbc0 100644 --- a/src/main/java/com/rapidminer/operator/tools/SendMailOperator.java +++ b/src/main/java/com/rapidminer/operator/tools/SendMailOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/SerializationType.java b/src/main/java/com/rapidminer/operator/tools/SerializationType.java index 114b2652e..953848471 100644 --- a/src/main/java/com/rapidminer/operator/tools/SerializationType.java +++ b/src/main/java/com/rapidminer/operator/tools/SerializationType.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/tools/StreamedExampleSetBodySerializer.java b/src/main/java/com/rapidminer/operator/tools/StreamedExampleSetBodySerializer.java index 6d0e8fd08..7989ed3ea 100644 --- a/src/main/java/com/rapidminer/operator/tools/StreamedExampleSetBodySerializer.java +++ b/src/main/java/com/rapidminer/operator/tools/StreamedExampleSetBodySerializer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/util/annotations/AnnotateOperator.java b/src/main/java/com/rapidminer/operator/util/annotations/AnnotateOperator.java index 379259f20..0efc87355 100644 --- a/src/main/java/com/rapidminer/operator/util/annotations/AnnotateOperator.java +++ b/src/main/java/com/rapidminer/operator/util/annotations/AnnotateOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/util/annotations/AnnotationsToData.java b/src/main/java/com/rapidminer/operator/util/annotations/AnnotationsToData.java index 98ccec043..e579631d0 100644 --- a/src/main/java/com/rapidminer/operator/util/annotations/AnnotationsToData.java +++ b/src/main/java/com/rapidminer/operator/util/annotations/AnnotationsToData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/util/annotations/DataToAnnotations.java b/src/main/java/com/rapidminer/operator/util/annotations/DataToAnnotations.java index 8268b12d5..cefd9e607 100644 --- a/src/main/java/com/rapidminer/operator/util/annotations/DataToAnnotations.java +++ b/src/main/java/com/rapidminer/operator/util/annotations/DataToAnnotations.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/util/annotations/ExtractAnnotation.java b/src/main/java/com/rapidminer/operator/util/annotations/ExtractAnnotation.java index c8b9b1ef8..ccc66f7df 100644 --- a/src/main/java/com/rapidminer/operator/util/annotations/ExtractAnnotation.java +++ b/src/main/java/com/rapidminer/operator/util/annotations/ExtractAnnotation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/AbstractBootstrappingValidation.java b/src/main/java/com/rapidminer/operator/validation/AbstractBootstrappingValidation.java index 9d240b09f..3a561b5d2 100644 --- a/src/main/java/com/rapidminer/operator/validation/AbstractBootstrappingValidation.java +++ b/src/main/java/com/rapidminer/operator/validation/AbstractBootstrappingValidation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/BatchXValidation.java b/src/main/java/com/rapidminer/operator/validation/BatchXValidation.java index 976b7c48d..b210995c9 100644 --- a/src/main/java/com/rapidminer/operator/validation/BatchXValidation.java +++ b/src/main/java/com/rapidminer/operator/validation/BatchXValidation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/BootstrappingValidation.java b/src/main/java/com/rapidminer/operator/validation/BootstrappingValidation.java index 9b4ee6e8c..a22ff86c8 100644 --- a/src/main/java/com/rapidminer/operator/validation/BootstrappingValidation.java +++ b/src/main/java/com/rapidminer/operator/validation/BootstrappingValidation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/FixedSplitValidationChain.java b/src/main/java/com/rapidminer/operator/validation/FixedSplitValidationChain.java index eeba404d2..acb592d95 100644 --- a/src/main/java/com/rapidminer/operator/validation/FixedSplitValidationChain.java +++ b/src/main/java/com/rapidminer/operator/validation/FixedSplitValidationChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/IteratingPerformanceAverage.java b/src/main/java/com/rapidminer/operator/validation/IteratingPerformanceAverage.java index b02674644..452879016 100644 --- a/src/main/java/com/rapidminer/operator/validation/IteratingPerformanceAverage.java +++ b/src/main/java/com/rapidminer/operator/validation/IteratingPerformanceAverage.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/RandomSplitValidationChain.java b/src/main/java/com/rapidminer/operator/validation/RandomSplitValidationChain.java index 721409cc4..bbede5abb 100644 --- a/src/main/java/com/rapidminer/operator/validation/RandomSplitValidationChain.java +++ b/src/main/java/com/rapidminer/operator/validation/RandomSplitValidationChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/RandomSplitWrapperValidationChain.java b/src/main/java/com/rapidminer/operator/validation/RandomSplitWrapperValidationChain.java index a598a9ad6..da63fa371 100644 --- a/src/main/java/com/rapidminer/operator/validation/RandomSplitWrapperValidationChain.java +++ b/src/main/java/com/rapidminer/operator/validation/RandomSplitWrapperValidationChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/SplitValidationOperator.java b/src/main/java/com/rapidminer/operator/validation/SplitValidationOperator.java index 3b0944057..2a802f78c 100644 --- a/src/main/java/com/rapidminer/operator/validation/SplitValidationOperator.java +++ b/src/main/java/com/rapidminer/operator/validation/SplitValidationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/Tools.java b/src/main/java/com/rapidminer/operator/validation/Tools.java index 01b923709..e72dd1fc9 100644 --- a/src/main/java/com/rapidminer/operator/validation/Tools.java +++ b/src/main/java/com/rapidminer/operator/validation/Tools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/ValidationChain.java b/src/main/java/com/rapidminer/operator/validation/ValidationChain.java index 02c8534b9..5c9043904 100644 --- a/src/main/java/com/rapidminer/operator/validation/ValidationChain.java +++ b/src/main/java/com/rapidminer/operator/validation/ValidationChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/WeightedBootstrappingValidation.java b/src/main/java/com/rapidminer/operator/validation/WeightedBootstrappingValidation.java index 2da57e557..b8e954d4d 100644 --- a/src/main/java/com/rapidminer/operator/validation/WeightedBootstrappingValidation.java +++ b/src/main/java/com/rapidminer/operator/validation/WeightedBootstrappingValidation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/WrapperValidationChain.java b/src/main/java/com/rapidminer/operator/validation/WrapperValidationChain.java index c562e4997..1084fec83 100644 --- a/src/main/java/com/rapidminer/operator/validation/WrapperValidationChain.java +++ b/src/main/java/com/rapidminer/operator/validation/WrapperValidationChain.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/WrapperXValidation.java b/src/main/java/com/rapidminer/operator/validation/WrapperXValidation.java index 9b722a3af..ba774fa49 100644 --- a/src/main/java/com/rapidminer/operator/validation/WrapperXValidation.java +++ b/src/main/java/com/rapidminer/operator/validation/WrapperXValidation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/XValidation.java b/src/main/java/com/rapidminer/operator/validation/XValidation.java index ab5df24ba..0b3d2f8b3 100644 --- a/src/main/java/com/rapidminer/operator/validation/XValidation.java +++ b/src/main/java/com/rapidminer/operator/validation/XValidation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/clustering/CentroidBasedEvaluator.java b/src/main/java/com/rapidminer/operator/validation/clustering/CentroidBasedEvaluator.java index e3d74cbb5..84884cbc8 100644 --- a/src/main/java/com/rapidminer/operator/validation/clustering/CentroidBasedEvaluator.java +++ b/src/main/java/com/rapidminer/operator/validation/clustering/CentroidBasedEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/clustering/ClusterDensityEvaluator.java b/src/main/java/com/rapidminer/operator/validation/clustering/ClusterDensityEvaluator.java index c402e16fa..b5b39dae6 100644 --- a/src/main/java/com/rapidminer/operator/validation/clustering/ClusterDensityEvaluator.java +++ b/src/main/java/com/rapidminer/operator/validation/clustering/ClusterDensityEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/clustering/ClusterNumberEvaluator.java b/src/main/java/com/rapidminer/operator/validation/clustering/ClusterNumberEvaluator.java index 6869cb6f5..9041bec3e 100644 --- a/src/main/java/com/rapidminer/operator/validation/clustering/ClusterNumberEvaluator.java +++ b/src/main/java/com/rapidminer/operator/validation/clustering/ClusterNumberEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/ExampleDistributionEvaluator.java b/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/ExampleDistributionEvaluator.java index 71793bca3..e47ea559c 100644 --- a/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/ExampleDistributionEvaluator.java +++ b/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/ExampleDistributionEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/ExampleDistributionMeasure.java b/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/ExampleDistributionMeasure.java index 18f943954..65cc390ae 100644 --- a/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/ExampleDistributionMeasure.java +++ b/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/ExampleDistributionMeasure.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/GiniCoefficient.java b/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/GiniCoefficient.java index 882840b4e..6ca917390 100644 --- a/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/GiniCoefficient.java +++ b/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/GiniCoefficient.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/SumOfSquares.java b/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/SumOfSquares.java index 9ef2f2ae3..1f520f4fd 100644 --- a/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/SumOfSquares.java +++ b/src/main/java/com/rapidminer/operator/validation/clustering/exampledistribution/SumOfSquares.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/significance/AnovaSignificanceTestOperator.java b/src/main/java/com/rapidminer/operator/validation/significance/AnovaSignificanceTestOperator.java index 5e1b07203..48effa8f0 100644 --- a/src/main/java/com/rapidminer/operator/validation/significance/AnovaSignificanceTestOperator.java +++ b/src/main/java/com/rapidminer/operator/validation/significance/AnovaSignificanceTestOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/significance/SignificanceTestOperator.java b/src/main/java/com/rapidminer/operator/validation/significance/SignificanceTestOperator.java index 1041e438f..3cf1cdbc0 100644 --- a/src/main/java/com/rapidminer/operator/validation/significance/SignificanceTestOperator.java +++ b/src/main/java/com/rapidminer/operator/validation/significance/SignificanceTestOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/validation/significance/TTestSignificanceTestOperator.java b/src/main/java/com/rapidminer/operator/validation/significance/TTestSignificanceTestOperator.java index 9a12901d8..a77817de8 100644 --- a/src/main/java/com/rapidminer/operator/validation/significance/TTestSignificanceTestOperator.java +++ b/src/main/java/com/rapidminer/operator/validation/significance/TTestSignificanceTestOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/ClearProcessLog.java b/src/main/java/com/rapidminer/operator/visualization/ClearProcessLog.java index 300cff672..87290ed62 100644 --- a/src/main/java/com/rapidminer/operator/visualization/ClearProcessLog.java +++ b/src/main/java/com/rapidminer/operator/visualization/ClearProcessLog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/Data2Log.java b/src/main/java/com/rapidminer/operator/visualization/Data2Log.java index f2315e76a..065be43a9 100644 --- a/src/main/java/com/rapidminer/operator/visualization/Data2Log.java +++ b/src/main/java/com/rapidminer/operator/visualization/Data2Log.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/DataStatistics.java b/src/main/java/com/rapidminer/operator/visualization/DataStatistics.java index cce5b6ceb..958264177 100644 --- a/src/main/java/com/rapidminer/operator/visualization/DataStatistics.java +++ b/src/main/java/com/rapidminer/operator/visualization/DataStatistics.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/DataStatisticsOperator.java b/src/main/java/com/rapidminer/operator/visualization/DataStatisticsOperator.java index 7905810f4..e70017f3f 100644 --- a/src/main/java/com/rapidminer/operator/visualization/DataStatisticsOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/DataStatisticsOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/ExampleVisualizationOperator.java b/src/main/java/com/rapidminer/operator/visualization/ExampleVisualizationOperator.java index 4badae66d..ce1008c6f 100644 --- a/src/main/java/com/rapidminer/operator/visualization/ExampleVisualizationOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/ExampleVisualizationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/FormulaExtractor.java b/src/main/java/com/rapidminer/operator/visualization/FormulaExtractor.java index 9e3e33821..03d1c76e6 100644 --- a/src/main/java/com/rapidminer/operator/visualization/FormulaExtractor.java +++ b/src/main/java/com/rapidminer/operator/visualization/FormulaExtractor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/LiftChartGenerator.java b/src/main/java/com/rapidminer/operator/visualization/LiftChartGenerator.java index c409f74fd..7f84372c5 100644 --- a/src/main/java/com/rapidminer/operator/visualization/LiftChartGenerator.java +++ b/src/main/java/com/rapidminer/operator/visualization/LiftChartGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -69,10 +69,10 @@ public void doWork() throws OperatorException { ExampleSet exampleSet = exampleSetInput.getData(ExampleSet.class); Model model = modelInput.getData(Model.class); - Tools.hasNominalLabels(exampleSet, getOperatorClassName()); - Attribute label = exampleSet.getAttributes().getLabel(); - if (label.getMapping().size() != 2) { - throw new UserError(this, 114, getOperatorClassName(), label); + Tools.hasNominalLabels(exampleSet, getOperatorClassName()); + Attribute label = exampleSet.getAttributes().getLabel(); + if (label.getMapping().size() != 2) { + throw new UserError(this, 114, getOperatorClassName(), label); } ExampleSet workingSet = (ExampleSet) exampleSet.clone(); diff --git a/src/main/java/com/rapidminer/operator/visualization/LiftParetoChart.java b/src/main/java/com/rapidminer/operator/visualization/LiftParetoChart.java index d6e96ab5b..d53d4ecc9 100644 --- a/src/main/java/com/rapidminer/operator/visualization/LiftParetoChart.java +++ b/src/main/java/com/rapidminer/operator/visualization/LiftParetoChart.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/LiftParetoChartGenerator.java b/src/main/java/com/rapidminer/operator/visualization/LiftParetoChartGenerator.java index 62253327a..69b3bcf58 100644 --- a/src/main/java/com/rapidminer/operator/visualization/LiftParetoChartGenerator.java +++ b/src/main/java/com/rapidminer/operator/visualization/LiftParetoChartGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/Macro2Log.java b/src/main/java/com/rapidminer/operator/visualization/Macro2Log.java index 8966e4824..5896e430f 100644 --- a/src/main/java/com/rapidminer/operator/visualization/Macro2Log.java +++ b/src/main/java/com/rapidminer/operator/visualization/Macro2Log.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/ProcessLog2ExampleSet.java b/src/main/java/com/rapidminer/operator/visualization/ProcessLog2ExampleSet.java index 400126aae..f7c644257 100644 --- a/src/main/java/com/rapidminer/operator/visualization/ProcessLog2ExampleSet.java +++ b/src/main/java/com/rapidminer/operator/visualization/ProcessLog2ExampleSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/ProcessLogOperator.java b/src/main/java/com/rapidminer/operator/visualization/ProcessLogOperator.java index 5a7e71dd3..831af53eb 100644 --- a/src/main/java/com/rapidminer/operator/visualization/ProcessLogOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/ProcessLogOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/ROCBasedComparisonOperator.java b/src/main/java/com/rapidminer/operator/visualization/ROCBasedComparisonOperator.java index 10df33ee4..0cba7a1fc 100644 --- a/src/main/java/com/rapidminer/operator/visualization/ROCBasedComparisonOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/ROCBasedComparisonOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/ROCChartGenerator.java b/src/main/java/com/rapidminer/operator/visualization/ROCChartGenerator.java index 87e1790a4..b41adab3d 100644 --- a/src/main/java/com/rapidminer/operator/visualization/ROCChartGenerator.java +++ b/src/main/java/com/rapidminer/operator/visualization/ROCChartGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -105,10 +105,10 @@ protected boolean isMandatory() { @Override public void doWork() throws OperatorException { ExampleSet exampleSet = exampleSetInput.getData(ExampleSet.class); - Tools.hasNominalLabels(exampleSet, getOperatorClassName()); - Attribute label = exampleSet.getAttributes().getLabel(); - if (label.getMapping().size() != 2) { - throw new UserError(this, 114, "ROC Charts", label); + Tools.hasNominalLabels(exampleSet, getOperatorClassName()); + Attribute label = exampleSet.getAttributes().getLabel(); + if (label.getMapping().size() != 2) { + throw new UserError(this, 114, "ROC Charts", label); } if (exampleSet.getAttributes().getPredictedLabel() != null && getParameterAsBoolean(PARAMETER_USE_MODEL)) { diff --git a/src/main/java/com/rapidminer/operator/visualization/ROCComparison.java b/src/main/java/com/rapidminer/operator/visualization/ROCComparison.java index 76d7ed90a..f4d45de59 100644 --- a/src/main/java/com/rapidminer/operator/visualization/ROCComparison.java +++ b/src/main/java/com/rapidminer/operator/visualization/ROCComparison.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/SOMModelPlotter.java b/src/main/java/com/rapidminer/operator/visualization/SOMModelPlotter.java index 9aa6e3e00..590768369 100644 --- a/src/main/java/com/rapidminer/operator/visualization/SOMModelPlotter.java +++ b/src/main/java/com/rapidminer/operator/visualization/SOMModelPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/SOMModelVisualization.java b/src/main/java/com/rapidminer/operator/visualization/SOMModelVisualization.java index b03d9b2ae..ac2fc6d4e 100644 --- a/src/main/java/com/rapidminer/operator/visualization/SOMModelVisualization.java +++ b/src/main/java/com/rapidminer/operator/visualization/SOMModelVisualization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/ANOVAMatrix.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/ANOVAMatrix.java index 2fab3b7ef..65c643b33 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/ANOVAMatrix.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/ANOVAMatrix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/ANOVAMatrixOperator.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/ANOVAMatrixOperator.java index 2c7dba073..da707cc0d 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/ANOVAMatrixOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/ANOVAMatrixOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/AbstractPairwiseMatrixOperator.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/AbstractPairwiseMatrixOperator.java index 4c9cf6bb7..4ad8902c4 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/AbstractPairwiseMatrixOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/AbstractPairwiseMatrixOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/CorrelationMatrixOperator.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/CorrelationMatrixOperator.java index 404a08837..4fa6afe4b 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/CorrelationMatrixOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/CorrelationMatrixOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -50,7 +50,9 @@ *

* * @author Ingo Mierswa + * @deprecated since 8.1, replaced by the BeltCorrelationMatrix in the Concurrency extension */ +@Deprecated public class CorrelationMatrixOperator extends Operator { public static final String PARAMETER_CREATE_WEIGHTS = "create_weights"; diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/CovarianceMatrixOperator.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/CovarianceMatrixOperator.java index 5f5e17d57..727a131a1 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/CovarianceMatrixOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/CovarianceMatrixOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/MutualInformationMatrixOperator.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/MutualInformationMatrixOperator.java index 785a09bd9..ed2676a62 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/MutualInformationMatrixOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/MutualInformationMatrixOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/NumericalMatrix.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/NumericalMatrix.java index b80655e3b..ecc652566 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/NumericalMatrix.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/NumericalMatrix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -27,7 +27,8 @@ import com.rapidminer.operator.ResultObjectAdapter; import com.rapidminer.tools.Tools; -import java.text.NumberFormat; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; /** @@ -48,7 +49,7 @@ public class NumericalMatrix extends ResultObjectAdapter { private String[] rowNames; - private NumberFormat formatter; + private DecimalFormat formatter; private String name; @@ -62,11 +63,18 @@ public NumericalMatrix(String name, String[] columnNames, boolean symmetrical) { this(name, columnNames, new Matrix(columnNames.length, columnNames.length), symmetrical); } - public NumericalMatrix(String name, String[] columnNames, Matrix matrix, boolean symmetrical) { - this.name = name; - formatter = NumberFormat.getInstance(); + private NumericalMatrix() { + formatter = new DecimalFormat(); + DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(); + decimalFormatSymbols.setNaN("?"); + formatter.setDecimalFormatSymbols(decimalFormatSymbols); formatter.setMaximumFractionDigits(3); formatter.setMinimumFractionDigits(3); + } + + public NumericalMatrix(String name, String[] columnNames, Matrix matrix, boolean symmetrical) { + this(); + this.name = name; this.columnNames = columnNames; this.rowNames = columnNames; this.matrix = matrix; @@ -74,10 +82,8 @@ public NumericalMatrix(String name, String[] columnNames, Matrix matrix, boolean } public NumericalMatrix(String name, String[] rowNames, String[] columnNames, Matrix matrix) { + this(); this.name = name; - formatter = NumberFormat.getInstance(); - formatter.setMaximumFractionDigits(3); - formatter.setMinimumFractionDigits(3); this.rowNames = rowNames; this.columnNames = columnNames; this.matrix = matrix; diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/RainflowMatrix.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/RainflowMatrix.java index a49f8a2a1..c98e49224 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/RainflowMatrix.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/RainflowMatrix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/RainflowMatrixOperator.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/RainflowMatrixOperator.java index cfdeb023c..251d69eff 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/RainflowMatrixOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/RainflowMatrixOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionGraph.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionGraph.java index 8511c32bf..1e037fc8f 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionGraph.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionGraph.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionGraphOperator.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionGraphOperator.java index 2a0b8268a..810fad065 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionGraphOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionGraphOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionMatrixOperator.java b/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionMatrixOperator.java index 5263af40c..79d0b45b8 100644 --- a/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionMatrixOperator.java +++ b/src/main/java/com/rapidminer/operator/visualization/dependencies/TransitionMatrixOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/CombinedParameterType.java b/src/main/java/com/rapidminer/parameter/CombinedParameterType.java index f35153b2a..336550f1c 100644 --- a/src/main/java/com/rapidminer/parameter/CombinedParameterType.java +++ b/src/main/java/com/rapidminer/parameter/CombinedParameterType.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/IOObjectCacheSuggestionProvider.java b/src/main/java/com/rapidminer/parameter/IOObjectCacheSuggestionProvider.java index a2194a49a..94838c49d 100644 --- a/src/main/java/com/rapidminer/parameter/IOObjectCacheSuggestionProvider.java +++ b/src/main/java/com/rapidminer/parameter/IOObjectCacheSuggestionProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/MetaDataProvider.java b/src/main/java/com/rapidminer/parameter/MetaDataProvider.java index 47b5265fc..41d51d19d 100644 --- a/src/main/java/com/rapidminer/parameter/MetaDataProvider.java +++ b/src/main/java/com/rapidminer/parameter/MetaDataProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/OAuthMechanism.java b/src/main/java/com/rapidminer/parameter/OAuthMechanism.java index 9a361ee1e..ed4634ee4 100644 --- a/src/main/java/com/rapidminer/parameter/OAuthMechanism.java +++ b/src/main/java/com/rapidminer/parameter/OAuthMechanism.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterHandler.java b/src/main/java/com/rapidminer/parameter/ParameterHandler.java index 4c1bc24fe..9bb693460 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterHandler.java +++ b/src/main/java/com/rapidminer/parameter/ParameterHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterType.java b/src/main/java/com/rapidminer/parameter/ParameterType.java index ccfe9c536..cad4dfbfb 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterType.java +++ b/src/main/java/com/rapidminer/parameter/ParameterType.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeAttribute.java b/src/main/java/com/rapidminer/parameter/ParameterTypeAttribute.java index 6ba994f87..b66b1b49b 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeAttribute.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeAttribute.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeAttributeFile.java b/src/main/java/com/rapidminer/parameter/ParameterTypeAttributeFile.java index 9293e4a00..088b6e158 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeAttributeFile.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeAttributeFile.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeAttributeOrderingRules.java b/src/main/java/com/rapidminer/parameter/ParameterTypeAttributeOrderingRules.java index bbdf44e9d..bbe755236 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeAttributeOrderingRules.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeAttributeOrderingRules.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeAttributes.java b/src/main/java/com/rapidminer/parameter/ParameterTypeAttributes.java index 1e1e51155..c7c093897 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeAttributes.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeAttributes.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeBoolean.java b/src/main/java/com/rapidminer/parameter/ParameterTypeBoolean.java index 7a00e4ad3..b3579af0b 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeBoolean.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeBoolean.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeCategory.java b/src/main/java/com/rapidminer/parameter/ParameterTypeCategory.java index e45881c2c..2687993b9 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeCategory.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeCategory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeChar.java b/src/main/java/com/rapidminer/parameter/ParameterTypeChar.java index 684724b96..3783b1ebb 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeChar.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeChar.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeColor.java b/src/main/java/com/rapidminer/parameter/ParameterTypeColor.java index a3badb749..74192c86e 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeColor.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeColor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeConfiguration.java b/src/main/java/com/rapidminer/parameter/ParameterTypeConfiguration.java index 350243d14..c78dcbfde 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeConfiguration.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeConfiguration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeCronExpression.java b/src/main/java/com/rapidminer/parameter/ParameterTypeCronExpression.java index 61a65dc4a..7e3500a27 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeCronExpression.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeCronExpression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeDate.java b/src/main/java/com/rapidminer/parameter/ParameterTypeDate.java index 4c3b4a830..2de73d414 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeDate.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeDate.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeDateFormat.java b/src/main/java/com/rapidminer/parameter/ParameterTypeDateFormat.java index 40366fe0b..a9c957d23 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeDateFormat.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeDateFormat.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeDirectory.java b/src/main/java/com/rapidminer/parameter/ParameterTypeDirectory.java index 33a703c76..7c8407392 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeDirectory.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeDirectory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeDouble.java b/src/main/java/com/rapidminer/parameter/ParameterTypeDouble.java index 50aa3ae75..5834e21a8 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeDouble.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeDouble.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeEnumeration.java b/src/main/java/com/rapidminer/parameter/ParameterTypeEnumeration.java index 3cbe9c0fc..fc83a5bc1 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeEnumeration.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeEnumeration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeExpression.java b/src/main/java/com/rapidminer/parameter/ParameterTypeExpression.java index ddc8b5830..97985e9cf 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeExpression.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeExpression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeFile.java b/src/main/java/com/rapidminer/parameter/ParameterTypeFile.java index 525353401..c778a8ecd 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeFile.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeFile.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeFilter.java b/src/main/java/com/rapidminer/parameter/ParameterTypeFilter.java index 99f59bb83..b762525f2 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeFilter.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeInnerOperator.java b/src/main/java/com/rapidminer/parameter/ParameterTypeInnerOperator.java index d1b461dd0..8719f31d4 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeInnerOperator.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeInnerOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeInt.java b/src/main/java/com/rapidminer/parameter/ParameterTypeInt.java index 5e7c354a9..054e113e0 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeInt.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeInt.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeLinkButton.java b/src/main/java/com/rapidminer/parameter/ParameterTypeLinkButton.java index 9e961c5b7..c29a669aa 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeLinkButton.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeLinkButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeList.java b/src/main/java/com/rapidminer/parameter/ParameterTypeList.java index e69f930ff..582d9766e 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeList.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeList.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeLong.java b/src/main/java/com/rapidminer/parameter/ParameterTypeLong.java index 7f82b2e01..d22f108dd 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeLong.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeLong.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeMatrix.java b/src/main/java/com/rapidminer/parameter/ParameterTypeMatrix.java index 98c1a4c1f..3b4c4996c 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeMatrix.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeMatrix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeNumber.java b/src/main/java/com/rapidminer/parameter/ParameterTypeNumber.java index 45553c6c5..2f796da02 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeNumber.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeNumber.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeOAuth.java b/src/main/java/com/rapidminer/parameter/ParameterTypeOAuth.java index c1d051da8..c888edc12 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeOAuth.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeOAuth.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeParameterValue.java b/src/main/java/com/rapidminer/parameter/ParameterTypeParameterValue.java index 9f33d9eda..6604b7846 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeParameterValue.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeParameterValue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypePassword.java b/src/main/java/com/rapidminer/parameter/ParameterTypePassword.java index 9a9325904..4ceea3e51 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypePassword.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypePassword.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypePreview.java b/src/main/java/com/rapidminer/parameter/ParameterTypePreview.java index c1f155ef5..0764b331d 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypePreview.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypePreview.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeProcessLocation.java b/src/main/java/com/rapidminer/parameter/ParameterTypeProcessLocation.java index 52736fcd8..fc977b958 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeProcessLocation.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeProcessLocation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeRegexp.java b/src/main/java/com/rapidminer/parameter/ParameterTypeRegexp.java index ab97ab98c..1c8e4e668 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeRegexp.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeRegexp.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeRemoteFile.java b/src/main/java/com/rapidminer/parameter/ParameterTypeRemoteFile.java index 2cdfe458f..2e19a8801 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeRemoteFile.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeRemoteFile.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeRepositoryLocation.java b/src/main/java/com/rapidminer/parameter/ParameterTypeRepositoryLocation.java index 906f5a989..d8b6cb481 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeRepositoryLocation.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeRepositoryLocation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeSingle.java b/src/main/java/com/rapidminer/parameter/ParameterTypeSingle.java index 3204fddb3..f9bf48052 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeSingle.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeSingle.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeString.java b/src/main/java/com/rapidminer/parameter/ParameterTypeString.java index 4f7ecedde..ac5ac46b1 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeString.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeString.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeStringCategory.java b/src/main/java/com/rapidminer/parameter/ParameterTypeStringCategory.java index 45d85d2e9..e38bda332 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeStringCategory.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeStringCategory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeSuggestion.java b/src/main/java/com/rapidminer/parameter/ParameterTypeSuggestion.java index b730e4993..4e18e071c 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeSuggestion.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeSuggestion.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeText.java b/src/main/java/com/rapidminer/parameter/ParameterTypeText.java index 8b8df017d..cfeef7c63 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeText.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeText.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeTupel.java b/src/main/java/com/rapidminer/parameter/ParameterTypeTupel.java index c4dc17624..99c8bde73 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeTupel.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeTupel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/ParameterTypeValue.java b/src/main/java/com/rapidminer/parameter/ParameterTypeValue.java index 05fc7823d..7ba5089a2 100644 --- a/src/main/java/com/rapidminer/parameter/ParameterTypeValue.java +++ b/src/main/java/com/rapidminer/parameter/ParameterTypeValue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/Parameters.java b/src/main/java/com/rapidminer/parameter/Parameters.java index 7ed266943..552f2eaca 100644 --- a/src/main/java/com/rapidminer/parameter/Parameters.java +++ b/src/main/java/com/rapidminer/parameter/Parameters.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/PortProvider.java b/src/main/java/com/rapidminer/parameter/PortProvider.java index f58158cf4..cc33f1074 100644 --- a/src/main/java/com/rapidminer/parameter/PortProvider.java +++ b/src/main/java/com/rapidminer/parameter/PortProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/StaticMetaDataProvider.java b/src/main/java/com/rapidminer/parameter/StaticMetaDataProvider.java index 77c919146..60a433187 100644 --- a/src/main/java/com/rapidminer/parameter/StaticMetaDataProvider.java +++ b/src/main/java/com/rapidminer/parameter/StaticMetaDataProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/SuggestionProvider.java b/src/main/java/com/rapidminer/parameter/SuggestionProvider.java index 66d523e6e..2ad431f1d 100644 --- a/src/main/java/com/rapidminer/parameter/SuggestionProvider.java +++ b/src/main/java/com/rapidminer/parameter/SuggestionProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/TextType.java b/src/main/java/com/rapidminer/parameter/TextType.java index 09ab9cb26..8268eff43 100644 --- a/src/main/java/com/rapidminer/parameter/TextType.java +++ b/src/main/java/com/rapidminer/parameter/TextType.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/UndefinedMacroError.java b/src/main/java/com/rapidminer/parameter/UndefinedMacroError.java index 0371d98ee..35f167fdb 100644 --- a/src/main/java/com/rapidminer/parameter/UndefinedMacroError.java +++ b/src/main/java/com/rapidminer/parameter/UndefinedMacroError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/UndefinedParameterError.java b/src/main/java/com/rapidminer/parameter/UndefinedParameterError.java index 09a022690..333801366 100644 --- a/src/main/java/com/rapidminer/parameter/UndefinedParameterError.java +++ b/src/main/java/com/rapidminer/parameter/UndefinedParameterError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/AboveOperatorVersionCondition.java b/src/main/java/com/rapidminer/parameter/conditions/AboveOperatorVersionCondition.java index c6cd04542..2a6832908 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/AboveOperatorVersionCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/AboveOperatorVersionCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/AbstractLogicalCondition.java b/src/main/java/com/rapidminer/parameter/conditions/AbstractLogicalCondition.java index 0fb7e24b0..5600ff308 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/AbstractLogicalCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/AbstractLogicalCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/AndParameterCondition.java b/src/main/java/com/rapidminer/parameter/conditions/AndParameterCondition.java index c8cb3a68b..12ff3c510 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/AndParameterCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/AndParameterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/BelowOrEqualOperatorVersionCondition.java b/src/main/java/com/rapidminer/parameter/conditions/BelowOrEqualOperatorVersionCondition.java index a7687a5e4..18b0b5ee3 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/BelowOrEqualOperatorVersionCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/BelowOrEqualOperatorVersionCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/BooleanParameterCondition.java b/src/main/java/com/rapidminer/parameter/conditions/BooleanParameterCondition.java index 2271cd315..739f9423b 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/BooleanParameterCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/BooleanParameterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/EqualOperatorVersionCondition.java b/src/main/java/com/rapidminer/parameter/conditions/EqualOperatorVersionCondition.java index a3b86540d..af1eea550 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/EqualOperatorVersionCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/EqualOperatorVersionCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/EqualStringCondition.java b/src/main/java/com/rapidminer/parameter/conditions/EqualStringCondition.java index 0a738710c..c3535b7fb 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/EqualStringCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/EqualStringCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/EqualTypeCondition.java b/src/main/java/com/rapidminer/parameter/conditions/EqualTypeCondition.java index 156dfaaaa..def0ed3f4 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/EqualTypeCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/EqualTypeCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/InputPortNotConnectedCondition.java b/src/main/java/com/rapidminer/parameter/conditions/InputPortNotConnectedCondition.java index 46beef894..e2d7c1b0f 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/InputPortNotConnectedCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/InputPortNotConnectedCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/NonEqualStringCondition.java b/src/main/java/com/rapidminer/parameter/conditions/NonEqualStringCondition.java index 5f4fa24b0..68c52ab8b 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/NonEqualStringCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/NonEqualStringCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/NonEqualTypeCondition.java b/src/main/java/com/rapidminer/parameter/conditions/NonEqualTypeCondition.java index 29e5d93af..4118e3471 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/NonEqualTypeCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/NonEqualTypeCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/OrParameterCondition.java b/src/main/java/com/rapidminer/parameter/conditions/OrParameterCondition.java index 43f267b83..5b63099c1 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/OrParameterCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/OrParameterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/OutputPortNotConnectedCondition.java b/src/main/java/com/rapidminer/parameter/conditions/OutputPortNotConnectedCondition.java index 9a684684c..4180e114e 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/OutputPortNotConnectedCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/OutputPortNotConnectedCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/ParameterCondition.java b/src/main/java/com/rapidminer/parameter/conditions/ParameterCondition.java index b38e4caab..3dca67f23 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/ParameterCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/ParameterCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/conditions/PortConnectedCondition.java b/src/main/java/com/rapidminer/parameter/conditions/PortConnectedCondition.java index 0cbc3156e..feebfd159 100644 --- a/src/main/java/com/rapidminer/parameter/conditions/PortConnectedCondition.java +++ b/src/main/java/com/rapidminer/parameter/conditions/PortConnectedCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/value/ParameterValueGrid.java b/src/main/java/com/rapidminer/parameter/value/ParameterValueGrid.java index 68ed89bac..9a68f47b3 100644 --- a/src/main/java/com/rapidminer/parameter/value/ParameterValueGrid.java +++ b/src/main/java/com/rapidminer/parameter/value/ParameterValueGrid.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/value/ParameterValueList.java b/src/main/java/com/rapidminer/parameter/value/ParameterValueList.java index 01032d859..a4dea7109 100644 --- a/src/main/java/com/rapidminer/parameter/value/ParameterValueList.java +++ b/src/main/java/com/rapidminer/parameter/value/ParameterValueList.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/value/ParameterValueRange.java b/src/main/java/com/rapidminer/parameter/value/ParameterValueRange.java index 4b40b8096..9e01c22fd 100644 --- a/src/main/java/com/rapidminer/parameter/value/ParameterValueRange.java +++ b/src/main/java/com/rapidminer/parameter/value/ParameterValueRange.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/parameter/value/ParameterValues.java b/src/main/java/com/rapidminer/parameter/value/ParameterValues.java index d1d72434f..921ff0d1f 100644 --- a/src/main/java/com/rapidminer/parameter/value/ParameterValues.java +++ b/src/main/java/com/rapidminer/parameter/value/ParameterValues.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/report/Readable.java b/src/main/java/com/rapidminer/report/Readable.java index d77fb5402..8762ce4c4 100644 --- a/src/main/java/com/rapidminer/report/Readable.java +++ b/src/main/java/com/rapidminer/report/Readable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/report/Renderable.java b/src/main/java/com/rapidminer/report/Renderable.java index 9bb16225f..e9a5c006a 100644 --- a/src/main/java/com/rapidminer/report/Renderable.java +++ b/src/main/java/com/rapidminer/report/Renderable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/report/ReportException.java b/src/main/java/com/rapidminer/report/ReportException.java index b971e4248..c0402f2df 100644 --- a/src/main/java/com/rapidminer/report/ReportException.java +++ b/src/main/java/com/rapidminer/report/ReportException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/report/ReportStream.java b/src/main/java/com/rapidminer/report/ReportStream.java index 070a681d7..b6382d432 100644 --- a/src/main/java/com/rapidminer/report/ReportStream.java +++ b/src/main/java/com/rapidminer/report/ReportStream.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/report/Reportable.java b/src/main/java/com/rapidminer/report/Reportable.java index 23bfe4b87..7fdb04730 100644 --- a/src/main/java/com/rapidminer/report/Reportable.java +++ b/src/main/java/com/rapidminer/report/Reportable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/report/Tableable.java b/src/main/java/com/rapidminer/report/Tableable.java index cefc645ce..aa8339edb 100644 --- a/src/main/java/com/rapidminer/report/Tableable.java +++ b/src/main/java/com/rapidminer/report/Tableable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/AccessFlag.java b/src/main/java/com/rapidminer/repository/AccessFlag.java index fc25cbd6e..c12a7a89e 100644 --- a/src/main/java/com/rapidminer/repository/AccessFlag.java +++ b/src/main/java/com/rapidminer/repository/AccessFlag.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/AccessType.java b/src/main/java/com/rapidminer/repository/AccessType.java index 1317d7c43..477741f4f 100644 --- a/src/main/java/com/rapidminer/repository/AccessType.java +++ b/src/main/java/com/rapidminer/repository/AccessType.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/BlobEntry.java b/src/main/java/com/rapidminer/repository/BlobEntry.java index 34196ee68..b1a107dc5 100644 --- a/src/main/java/com/rapidminer/repository/BlobEntry.java +++ b/src/main/java/com/rapidminer/repository/BlobEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/ConnectionListener.java b/src/main/java/com/rapidminer/repository/ConnectionListener.java new file mode 100644 index 000000000..e7b683283 --- /dev/null +++ b/src/main/java/com/rapidminer/repository/ConnectionListener.java @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.repository; + +import com.rapidminer.repository.internal.remote.RemoteRepository; + + +/** + * Listens to the connections of a {@link ConnectionRepository}. + * + * @author Marco Boeck + * @since 8.1 + * + */ +public interface ConnectionListener { + + /** + * Called after disconnection. Guarantees that {@link ConnectionRepository#isConnected()} returns + * false. + */ + void connectionLost(ConnectionRepository repository); + + /** + * Called after connection was established. Guarantees that + * {@link RemoteRepository#isConnected()} returns true. + */ + void connectionEstablished(ConnectionRepository repository); +} diff --git a/src/main/java/com/rapidminer/repository/ConnectionRepository.java b/src/main/java/com/rapidminer/repository/ConnectionRepository.java new file mode 100644 index 000000000..e1c6c366a --- /dev/null +++ b/src/main/java/com/rapidminer/repository/ConnectionRepository.java @@ -0,0 +1,50 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.repository; + + +/** + * A repository that may not be connected by default and has a listener mechanism so anyone can get notified about connection changes. + * + * @author Marco Boeck + * @since 8.1 + */ +public interface ConnectionRepository extends Repository { + + /** + * Registers a {@link ConnectionListener}. + * + * @param listener + * the {@link ConnectionListener} to register + */ + void addConnectionListener(ConnectionListener listener); + + /** + * Removes a registered {@link ConnectionListener}. + * + * @param listener + * the {@link ConnectionListener} to remove + */ + void removeConnectionListener(ConnectionListener listener); + + /** + * @return whether the {@link ConnectionRepository} is connected (online) or disconnected (offline). + */ + boolean isConnected(); +} diff --git a/src/main/java/com/rapidminer/repository/CustomRepositoryFactory.java b/src/main/java/com/rapidminer/repository/CustomRepositoryFactory.java index 61f1674e3..78e9b6c4d 100644 --- a/src/main/java/com/rapidminer/repository/CustomRepositoryFactory.java +++ b/src/main/java/com/rapidminer/repository/CustomRepositoryFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/CustomRepositoryRegistry.java b/src/main/java/com/rapidminer/repository/CustomRepositoryRegistry.java index 78dd200d4..e4e00cd41 100644 --- a/src/main/java/com/rapidminer/repository/CustomRepositoryRegistry.java +++ b/src/main/java/com/rapidminer/repository/CustomRepositoryRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/DataEntry.java b/src/main/java/com/rapidminer/repository/DataEntry.java index 1b471848a..ef22e4df7 100644 --- a/src/main/java/com/rapidminer/repository/DataEntry.java +++ b/src/main/java/com/rapidminer/repository/DataEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/DateEntry.java b/src/main/java/com/rapidminer/repository/DateEntry.java index 44ed9781a..a4363f5d0 100644 --- a/src/main/java/com/rapidminer/repository/DateEntry.java +++ b/src/main/java/com/rapidminer/repository/DateEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/Entry.java b/src/main/java/com/rapidminer/repository/Entry.java index 18ab5f7ba..61a44b012 100644 --- a/src/main/java/com/rapidminer/repository/Entry.java +++ b/src/main/java/com/rapidminer/repository/Entry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/FileRepositoryProvider.java b/src/main/java/com/rapidminer/repository/FileRepositoryProvider.java index 994b26daa..448e6c4e6 100644 --- a/src/main/java/com/rapidminer/repository/FileRepositoryProvider.java +++ b/src/main/java/com/rapidminer/repository/FileRepositoryProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -24,7 +24,6 @@ import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; - import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -79,7 +78,7 @@ public List load() { if (file.exists()) { LOGGER.config("Loading repositories from " + file); try { - Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file); + Document doc = XMLTools.createDocumentBuilder().parse(file); if (!doc.getDocumentElement().getTagName().equals(TAG_REPOSITORIES)) { LOGGER.warning("Broken repositories file. Root element must be ."); return result; @@ -102,7 +101,9 @@ public List load() { if (tagName.equals(factory.getXMLTag())) { try { result.add(factory.fromXML(element)); - } catch (RepositoryException | XMLException e) { + } catch (NoClassDefFoundError | Exception e) { + // this is needed to catch "NoClassDefFoundError"s when having a repository + // from an extension that references some illegal class that is no longer available failedToLoad.add(element); LOGGER.log(Level.WARNING, "Cannot read custom repository entry.", e); } @@ -117,7 +118,7 @@ public List load() { } } } - } catch (RuntimeException | SAXException | IOException | ParserConfigurationException e) { + } catch (RuntimeException | SAXException | IOException e) { LOGGER.log(Level.WARNING, "Cannot read repository configuration file '" + file + "': " + e, e); } } diff --git a/src/main/java/com/rapidminer/repository/Folder.java b/src/main/java/com/rapidminer/repository/Folder.java index 11562dd92..b4b7ea7df 100644 --- a/src/main/java/com/rapidminer/repository/Folder.java +++ b/src/main/java/com/rapidminer/repository/Folder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/IOObjectEntry.java b/src/main/java/com/rapidminer/repository/IOObjectEntry.java index ee5231134..d54a7eb01 100644 --- a/src/main/java/com/rapidminer/repository/IOObjectEntry.java +++ b/src/main/java/com/rapidminer/repository/IOObjectEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/MalformedRepositoryLocationException.java b/src/main/java/com/rapidminer/repository/MalformedRepositoryLocationException.java index 7741a9017..bab69258b 100644 --- a/src/main/java/com/rapidminer/repository/MalformedRepositoryLocationException.java +++ b/src/main/java/com/rapidminer/repository/MalformedRepositoryLocationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/ProcessEntry.java b/src/main/java/com/rapidminer/repository/ProcessEntry.java index e46b2903d..0f47e22e8 100644 --- a/src/main/java/com/rapidminer/repository/ProcessEntry.java +++ b/src/main/java/com/rapidminer/repository/ProcessEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RemoteProcessState.java b/src/main/java/com/rapidminer/repository/RemoteProcessState.java index a68fce2bd..0c45caab9 100644 --- a/src/main/java/com/rapidminer/repository/RemoteProcessState.java +++ b/src/main/java/com/rapidminer/repository/RemoteProcessState.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/Repository.java b/src/main/java/com/rapidminer/repository/Repository.java index b45718369..091caf983 100644 --- a/src/main/java/com/rapidminer/repository/Repository.java +++ b/src/main/java/com/rapidminer/repository/Repository.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,11 +18,11 @@ */ package com.rapidminer.repository; -import com.rapidminer.repository.gui.RepositoryConfigurationPanel; - import org.w3c.dom.Document; import org.w3c.dom.Element; +import com.rapidminer.repository.gui.RepositoryConfigurationPanel; + /** * @author Simon Fischer @@ -50,11 +50,13 @@ public interface Repository extends Folder { public abstract boolean shouldSave(); /** - * Called after the repository is added. Currently unused, but may be useful. Was once used to - * fetch JDBC connection entries from remote server. + * Called after the repository is added. */ public void postInstall(); + /** + * Called directly before the repository is removed. + */ public void preRemove(); /** Returns true if the repository is configurable. In that case, */ diff --git a/src/main/java/com/rapidminer/repository/RepositoryAccessor.java b/src/main/java/com/rapidminer/repository/RepositoryAccessor.java index ed2d01dc3..2b4fde1e7 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryAccessor.java +++ b/src/main/java/com/rapidminer/repository/RepositoryAccessor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryActionCondition.java b/src/main/java/com/rapidminer/repository/RepositoryActionCondition.java index c250f4766..dbea5373b 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryActionCondition.java +++ b/src/main/java/com/rapidminer/repository/RepositoryActionCondition.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplConfigRepository.java b/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplConfigRepository.java index c178ee800..123373642 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplConfigRepository.java +++ b/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplConfigRepository.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplExampleSetsOnly.java b/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplExampleSetsOnly.java index b90d8744e..1894a7a31 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplExampleSetsOnly.java +++ b/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplExampleSetsOnly.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,12 +18,11 @@ */ package com.rapidminer.repository; -import com.rapidminer.operator.ports.metadata.ExampleSetMetaData; -import com.rapidminer.repository.gui.actions.AbstractRepositoryAction; -import com.rapidminer.repository.internal.remote.RemoteIOObjectEntry; - import java.util.List; +import com.rapidminer.example.ExampleSet; +import com.rapidminer.repository.gui.actions.AbstractRepositoryAction; + /** * Declares a condition for {@link AbstractRepositoryAction}. If the conditions are met, the action @@ -37,32 +36,21 @@ public class RepositoryActionConditionImplExampleSetsOnly implements RepositoryA @Override public boolean evaluateCondition(List entryList) { - if (entryList == null) { + if (entryList == null || entryList.isEmpty()) { return false; } for (Entry givenEntry : entryList) { - // make sure each entry is an ExampleSet, if not condition evaluates to false - if (givenEntry instanceof IOObjectEntry) { - IOObjectEntry entry = (IOObjectEntry) givenEntry; - try { - if (!(entry.retrieveMetaData() instanceof ExampleSetMetaData)) { - return false; - } - } catch (RepositoryException e) { - return false; - } - } else if (givenEntry instanceof RemoteIOObjectEntry) { - RemoteIOObjectEntry entry = (RemoteIOObjectEntry) givenEntry; - try { - if (!(entry.retrieveMetaData() instanceof ExampleSetMetaData)) { - return false; - } - } catch (RepositoryException e) { - return false; - } - } else { + if (!(givenEntry instanceof IOObjectEntry)) { + return false; + } + + IOObjectEntry entry = (IOObjectEntry) givenEntry; + if (entry.getObjectClass() == null) { + return false; + } + if (!ExampleSet.class.isAssignableFrom(entry.getObjectClass())) { return false; } } diff --git a/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplStandard.java b/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplStandard.java index ee4cfec99..319ea2de9 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplStandard.java +++ b/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplStandard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplStandardNoRepository.java b/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplStandardNoRepository.java index 548f4e63b..2cf1a8052 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplStandardNoRepository.java +++ b/src/main/java/com/rapidminer/repository/RepositoryActionConditionImplStandardNoRepository.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryConstants.java b/src/main/java/com/rapidminer/repository/RepositoryConstants.java index f5b469b27..dc4e912a9 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryConstants.java +++ b/src/main/java/com/rapidminer/repository/RepositoryConstants.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryException.java b/src/main/java/com/rapidminer/repository/RepositoryException.java index 937e4198e..880f1976a 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryException.java +++ b/src/main/java/com/rapidminer/repository/RepositoryException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryFactory.java b/src/main/java/com/rapidminer/repository/RepositoryFactory.java index b5e0e67fa..50d82b43f 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryFactory.java +++ b/src/main/java/com/rapidminer/repository/RepositoryFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryListener.java b/src/main/java/com/rapidminer/repository/RepositoryListener.java index 4403fe7b9..7817fd9b0 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryListener.java +++ b/src/main/java/com/rapidminer/repository/RepositoryListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -23,17 +23,78 @@ /** * A listener listening to changes of a repository. + *

+ * Note that since 8.1, the new method {@link #entryMoved(Entry, Folder, String)} is available! + *

* - * @author Simon Fischer + * @author Simon Fischer, Marco Boeck */ public interface RepositoryListener extends EventListener { - public void entryAdded(Entry newEntry, Folder parent); + /** + * Fired when an entry has been added. + * + * @param newEntry + * the new entry that has been added + * @param parent + * the folder where the entry has been added + */ + void entryAdded(Entry newEntry, Folder parent); - public void entryChanged(Entry entry); + /** + * Fired when the content/type of an entry did change, but not the location. + *

+ * Note that before 8.1, this was also called if an entry was moved/renamed. Since 8.1, {@link #entryMoved(Entry, Folder, String)} is called instead IF YOU OVERWRITE IT! + *
+ * If you do not overwrite it, this method is still called for those events as well.
+ *

+ * + * @param entry + * the entry that has changed + */ + void entryChanged(Entry entry); - public void entryRemoved(Entry removedEntry, Folder parent, int oldIndex); + /** + * Fired when an entry has been moved or renamed. + *

+ * Since 8.1, this method is called instead of the old {@link #entryChanged(Entry)}! + *
+ * However, if you do not overwrite this method's default implementation, the old method is still called for those events as well.
+ *

+ * + * @param newEntry + * the new entry that is the result of the move/rename + * @param formerParent + * the folder where the entry was located in before. If it was a rename, it may still be the same folder now. Will be {@code null} for repository rename events! + * @param formerName + * the name of the entry before. If it was a move, it may still have the same name now + * @since 8.1 + */ + default void entryMoved(Entry newEntry, Folder formerParent, String formerName) { + // this did not exist before, by default make it fire the change event + entryChanged(newEntry); + } - public void folderRefreshed(Folder folder); + /** + * Fired when an entry has been removed. + * + * @param removedEntry + * the entry that has been removed + * @param parent + * the folder where the entry has been removed from + * @param oldIndex + * the former index in the repository of the removed entry + */ + void entryRemoved(Entry removedEntry, Folder parent, int oldIndex); + + /** + * Fired when a repository folder has been refreshed. + * This can result in lots of things having changed in that folder and subfolders, or no change at all. + * Listeners need to check the contents of the folder to make sure they work on the latest information. + * + * @param folder + * the folder that has been refreshed. + */ + void folderRefreshed(Folder folder); } diff --git a/src/main/java/com/rapidminer/repository/RepositoryLocation.java b/src/main/java/com/rapidminer/repository/RepositoryLocation.java index b565c6ba6..a0f912424 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryLocation.java +++ b/src/main/java/com/rapidminer/repository/RepositoryLocation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryManager.java b/src/main/java/com/rapidminer/repository/RepositoryManager.java index bfd1ef2e8..fcba0b750 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryManager.java +++ b/src/main/java/com/rapidminer/repository/RepositoryManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -29,6 +29,7 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import javax.swing.event.EventListenerList; import com.rapidminer.RapidMiner; import com.rapidminer.gui.tools.RepositoryGuiTools; @@ -38,6 +39,7 @@ import com.rapidminer.repository.internal.remote.RemoteRepository; import com.rapidminer.repository.local.LocalRepository; import com.rapidminer.repository.resource.ResourceRepository; +import com.rapidminer.repository.search.RepositoryGlobalSearch; import com.rapidminer.tools.AbstractObservable; import com.rapidminer.tools.I18N; import com.rapidminer.tools.LogService; @@ -74,6 +76,8 @@ public class RepositoryManager extends AbstractObservable { private final List repositories = new LinkedList<>(); + private final EventListenerList listeners = new EventListenerList(); + /** * listener which reacts on repository changes like renaming and sorts the list of repositories */ @@ -96,6 +100,7 @@ public void entryChanged(Entry entry) { public void entryAdded(Entry newEntry, Folder parent) {} }; + /** * Ordered types of {@link Repository}s * @@ -169,8 +174,10 @@ private RepositoryManager() { sampleRepository = new ResourceRepository(SAMPLE_REPOSITORY_NAME, "samples"); } repositories.add(sampleRepository); + fireRepositoryWasAdded(sampleRepository); sortRepositories(); + // only load local repositories, custom repositories will be loaded after initialization load(LocalRepository.class); } @@ -178,6 +185,8 @@ private RepositoryManager() { public static void init() { synchronized (INSTANCE_LOCK) { instance = new RepositoryManager(); + // initialize Repository Global Search + new RepositoryGlobalSearch(); instance.postInstall(); } } @@ -212,6 +221,9 @@ public static void setProvider(RepositoryProvider repositoryProvider) { private void postInstall() { for (Repository repository : getRepositories()) { repository.postInstall(); + + // the original firings were during init phase of the RepositoryManager, nobody could have listened yet. Fire again + fireRepositoryWasAdded(repository); } } @@ -221,6 +233,36 @@ public static void registerFactory(RepositoryFactory factory) { } } + /** + * Adds the given listener to be notified of repository additions and removals. + * + * @param l + * the listener, must not be {@code null} + * @since 8.1 + */ + public void addRepositoryManagerListener(RepositoryManagerListener l) { + if (l == null) { + throw new IllegalArgumentException("l must not be null!"); + } + + listeners.add(RepositoryManagerListener.class, l); + } + + /** + * Removes the given listener. + * + * @param l + * the listener, must not be {@code null} + * @since 8.1 + */ + public void removeRepositoryManagerListener(RepositoryManagerListener l) { + if (l == null) { + throw new IllegalArgumentException("l must not be null!"); + } + + listeners.remove(RepositoryManagerListener.class, l); + } + /** * Registers a repository. * @@ -230,6 +272,17 @@ public void addRepository(Repository repository) { LOGGER.config("Adding repository " + repository.getName()); repositories.add(repository); repository.addRepositoryListener(repositoryListener); + + if (instance != null) { + save(); + } + sortRepositories(); + + // observer is kept for legacy reasons + fireUpdate(repository); + // since 8.1, this is the new way to detect changes to the repository manager + fireRepositoryWasAdded(repository); + if (instance != null) { // we cannot call post install during init(). The reason is that // post install may access RepositoryManager.getInstance() which will be null and hence @@ -237,8 +290,6 @@ public void addRepository(Repository repository) { repository.postInstall(); save(); } - sortRepositories(); - fireUpdate(repository); } /** @@ -250,7 +301,11 @@ public void removeRepository(Repository repository) { repository.preRemove(); repository.removeRepositoryListener(repositoryListener); repositories.remove(repository); + + // observer is kept for legacy reasons fireUpdate(null); + // since 8.1, this is the new way to detect changes to the repository manager + fireRepositoryWasRemoved(repository); } public List getRepositories() { @@ -777,4 +832,29 @@ private String getNewNameForExistingEntry(Folder destination, String newName) th private void sortRepositories() { Collections.sort(repositories, RepositoryTools.REPOSITORY_COMPARATOR); } + + + /** + * Notifies all {@link RepositoryManagerListener}s that a repository was added to this manager. + * + * @param repository + * the added repository + */ + private void fireRepositoryWasAdded(Repository repository) { + for (RepositoryManagerListener l : listeners.getListeners(RepositoryManagerListener.class)) { + l.repositoryWasAdded(repository); + } + } + + /** + * Notifies all {@link RepositoryManagerListener}s that a repository will be removed from this manager. + * + * @param repository + * the removed repository + */ + private void fireRepositoryWasRemoved(Repository repository) { + for (RepositoryManagerListener l : listeners.getListeners(RepositoryManagerListener.class)) { + l.repositoryWasRemoved(repository); + } + } } diff --git a/src/main/java/com/rapidminer/repository/RepositoryManagerListener.java b/src/main/java/com/rapidminer/repository/RepositoryManagerListener.java new file mode 100644 index 000000000..0aa7ee3a5 --- /dev/null +++ b/src/main/java/com/rapidminer/repository/RepositoryManagerListener.java @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.repository; + + +import java.util.EventListener; + +import com.rapidminer.tools.Observer; + + +/** + * Listener for the {@link RepositoryManager} which fires when a {@link Repository} was added to it / removed from it. + * This replaces the {@link RepositoryManager#addObserver(Observer, boolean)} method from version 8.1 going forward. + * + * @author Marco Boeck + * @since 8.1 + */ +public interface RepositoryManagerListener extends EventListener { + + /** + * Fired when the repository was added to the repository manager. + * + * @param repository + * the repository that was added + */ + void repositoryWasAdded(Repository repository); + + /** + * Fired when the repository for this listener was removed from the repository manager. + * + * @param repository + * the repository that was removed + */ + void repositoryWasRemoved(Repository repository); + +} \ No newline at end of file diff --git a/src/main/java/com/rapidminer/repository/RepositoryProvider.java b/src/main/java/com/rapidminer/repository/RepositoryProvider.java index 9b8a23c72..0f3884929 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryProvider.java +++ b/src/main/java/com/rapidminer/repository/RepositoryProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositorySortingMethod.java b/src/main/java/com/rapidminer/repository/RepositorySortingMethod.java index 392d71599..9a6cf4dd9 100644 --- a/src/main/java/com/rapidminer/repository/RepositorySortingMethod.java +++ b/src/main/java/com/rapidminer/repository/RepositorySortingMethod.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositorySortingMethodListener.java b/src/main/java/com/rapidminer/repository/RepositorySortingMethodListener.java index c385efdcc..dda548db1 100644 --- a/src/main/java/com/rapidminer/repository/RepositorySortingMethodListener.java +++ b/src/main/java/com/rapidminer/repository/RepositorySortingMethodListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryTools.java b/src/main/java/com/rapidminer/repository/RepositoryTools.java index 9f61b6194..007374844 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryTools.java +++ b/src/main/java/com/rapidminer/repository/RepositoryTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/RepositoryVisitor.java b/src/main/java/com/rapidminer/repository/RepositoryVisitor.java index 9692dda24..2de2d7e7c 100644 --- a/src/main/java/com/rapidminer/repository/RepositoryVisitor.java +++ b/src/main/java/com/rapidminer/repository/RepositoryVisitor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/LocalRepositoryPanel.java b/src/main/java/com/rapidminer/repository/gui/LocalRepositoryPanel.java index d3b49e009..8fce233ef 100644 --- a/src/main/java/com/rapidminer/repository/gui/LocalRepositoryPanel.java +++ b/src/main/java/com/rapidminer/repository/gui/LocalRepositoryPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/NewRepositoryDialog.java b/src/main/java/com/rapidminer/repository/gui/NewRepositoryDialog.java index f8b78e509..30f3692ba 100644 --- a/src/main/java/com/rapidminer/repository/gui/NewRepositoryDialog.java +++ b/src/main/java/com/rapidminer/repository/gui/NewRepositoryDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/RepositoryBrowser.java b/src/main/java/com/rapidminer/repository/gui/RepositoryBrowser.java index a8bf1ff7b..8489fd672 100644 --- a/src/main/java/com/rapidminer/repository/gui/RepositoryBrowser.java +++ b/src/main/java/com/rapidminer/repository/gui/RepositoryBrowser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -25,7 +25,6 @@ import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; - import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.JButton; @@ -43,12 +42,14 @@ import com.rapidminer.gui.tools.ExtendedJScrollPane; import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.ResourceDockKey; +import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.gui.tools.components.DropDownPopupButton; -import com.rapidminer.gui.tools.components.DropDownPopupButton.PopupMenuProvider; import com.rapidminer.repository.Entry; +import com.rapidminer.repository.Folder; import com.rapidminer.repository.IOObjectEntry; import com.rapidminer.repository.ProcessEntry; import com.rapidminer.repository.RepositoryLocation; +import com.rapidminer.repository.gui.actions.NewRepositoryAction; import com.vlsolutions.swing.docking.DockKey; import com.vlsolutions.swing.docking.Dockable; @@ -62,15 +63,7 @@ public class RepositoryBrowser extends JPanel implements Dockable { private static final long serialVersionUID = 1L; - public static final Action ADD_REPOSITORY_ACTION = new ResourceAction(true, "add_repository") { - - private static final long serialVersionUID = 1L; - - @Override - public void loggedActionPerformed(ActionEvent e) { - addRepository(); - } - }; + public static final Action ADD_REPOSITORY_ACTION = new NewRepositoryAction(); private static final Action SORT_REPOSITORY_ACTION = new ResourceAction(true, "repository_sort_submenu") { @@ -96,17 +89,23 @@ public RepositoryBrowser(DragListener dragListener) { if (dragListener != null) { ((AbstractPatchedTransferHandler) tree.getTransferHandler()).addDragListener(dragListener); } - tree.addRepositorySelectionListener(new RepositorySelectionListener() { - - @Override - public void repositoryLocationSelected(RepositorySelectionEvent e) { - Entry entry = e.getEntry(); - if (entry instanceof ProcessEntry) { - RepositoryTree.openProcess((ProcessEntry) entry); - } else if (entry instanceof IOObjectEntry) { - OpenAction.showAsResult((IOObjectEntry) entry); - } + tree.addRepositorySelectionListener(e -> { + + Entry entry = e.getEntry(); + + // skip folder double-clicks + if (entry instanceof Folder) { + return; + } + + if (entry instanceof ProcessEntry) { + RepositoryTree.openProcess((ProcessEntry) entry); + } else if (entry instanceof IOObjectEntry) { + OpenAction.showAsResult((IOObjectEntry) entry); + } else { + SwingTools.showVerySimpleErrorMessage("no_data_or_process"); } + }); setLayout(new BorderLayout()); @@ -136,14 +135,7 @@ public void repositoryLocationSelected(RepositorySelectionEvent e) { northPanel.add(addDataButton, c); DropDownPopupButton furtherActionsButton = new DropDownPopupButton("gui.action.further_repository_actions", - new PopupMenuProvider() { - - @Override - public JPopupMenu getPopupMenu() { - return furtherActionsMenu; - } - - }); + () -> furtherActionsMenu); furtherActionsButton.setPreferredSize(new Dimension(50, 30)); c.gridx = 1; @@ -157,10 +149,6 @@ public JPopupMenu getPopupMenu() { add(scrollPane, BorderLayout.CENTER); } - private static void addRepository() { - NewRepositoryDialog.createNew(); - } - /** * Returns the {@link RepositoryTree} managed by this browser. * @@ -189,7 +177,7 @@ public DockKey getDockKey() { } /** - * @param storedRepositoryLocation + * @param storedRepositoryLocation the repository location that should be displayed in the browser */ public void expandToRepositoryLocation(RepositoryLocation storedRepositoryLocation) { tree.expandAndSelectIfExists(storedRepositoryLocation); diff --git a/src/main/java/com/rapidminer/repository/gui/RepositoryConfigurationDialog.java b/src/main/java/com/rapidminer/repository/gui/RepositoryConfigurationDialog.java index 616091272..51a41b9a8 100644 --- a/src/main/java/com/rapidminer/repository/gui/RepositoryConfigurationDialog.java +++ b/src/main/java/com/rapidminer/repository/gui/RepositoryConfigurationDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/RepositoryConfigurationPanel.java b/src/main/java/com/rapidminer/repository/gui/RepositoryConfigurationPanel.java index 415aaacf8..c1ba8acfd 100644 --- a/src/main/java/com/rapidminer/repository/gui/RepositoryConfigurationPanel.java +++ b/src/main/java/com/rapidminer/repository/gui/RepositoryConfigurationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/RepositoryLocationChooser.java b/src/main/java/com/rapidminer/repository/gui/RepositoryLocationChooser.java index a4eacb2b5..a0113d6f7 100644 --- a/src/main/java/com/rapidminer/repository/gui/RepositoryLocationChooser.java +++ b/src/main/java/com/rapidminer/repository/gui/RepositoryLocationChooser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/RepositorySelectionEvent.java b/src/main/java/com/rapidminer/repository/gui/RepositorySelectionEvent.java index 3ec28cd56..47751d871 100644 --- a/src/main/java/com/rapidminer/repository/gui/RepositorySelectionEvent.java +++ b/src/main/java/com/rapidminer/repository/gui/RepositorySelectionEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/RepositorySelectionListener.java b/src/main/java/com/rapidminer/repository/gui/RepositorySelectionListener.java index 315a24ae6..f657b1663 100644 --- a/src/main/java/com/rapidminer/repository/gui/RepositorySelectionListener.java +++ b/src/main/java/com/rapidminer/repository/gui/RepositorySelectionListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/RepositoryTree.java b/src/main/java/com/rapidminer/repository/gui/RepositoryTree.java index cf189f45d..8418dbdd4 100644 --- a/src/main/java/com/rapidminer/repository/gui/RepositoryTree.java +++ b/src/main/java/com/rapidminer/repository/gui/RepositoryTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -22,6 +22,7 @@ import java.awt.Component; import java.awt.Dialog; import java.awt.Point; +import java.awt.Rectangle; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; @@ -40,7 +41,6 @@ import java.util.LinkedList; import java.util.List; import java.util.logging.Level; - import javax.swing.Action; import javax.swing.Icon; import javax.swing.JComponent; @@ -1108,6 +1108,32 @@ private void fireLocationSelected(Entry entry) { } } + /** + * Similar as {@link #scrollPathToVisible(TreePath)}, but centers it instead. Used for explicit highlighting. + * + * @param path + * the path to center + * @since 8.1 + */ + private void scrollPathToVisibleCenter(TreePath path) { + if (path == null) { + return; + } + + // set y and height in a way that the path always appears in the center + Rectangle bounds = getPathBounds(path); + if (bounds != null) { + Rectangle visibleRect = getVisibleRect(); + // try to stay as far left as possible. If very deep folder structure, let Swing decide where to start + if ((bounds.x + 50) < visibleRect.x + visibleRect.width) { + bounds.x = 0; + } + bounds.y = bounds.y - visibleRect.height / 2; + bounds.height = visibleRect.height; + scrollRectToVisible(bounds); + } + } + /** * Selects as much as possible of the selected path to the given location. Returns true if the * given location references a folder. @@ -1170,7 +1196,7 @@ public void expandAndSelectIfExists(RepositoryLocation location) { } else { expandIfExists(location, null); } - scrollPathToVisible(getSelectionPath()); + scrollPathToVisibleCenter(getSelectionPath()); } private void showPopup(MouseEvent e) { diff --git a/src/main/java/com/rapidminer/repository/gui/RepositoryTreeCellRenderer.java b/src/main/java/com/rapidminer/repository/gui/RepositoryTreeCellRenderer.java index 92298c8fa..c42afed40 100644 --- a/src/main/java/com/rapidminer/repository/gui/RepositoryTreeCellRenderer.java +++ b/src/main/java/com/rapidminer/repository/gui/RepositoryTreeCellRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/RepositoryTreeModel.java b/src/main/java/com/rapidminer/repository/gui/RepositoryTreeModel.java index ba58917f5..f8422fe47 100644 --- a/src/main/java/com/rapidminer/repository/gui/RepositoryTreeModel.java +++ b/src/main/java/com/rapidminer/repository/gui/RepositoryTreeModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -171,7 +171,6 @@ public void folderRefreshed(final Folder folder) { for (TreeModelListener l : listeners.getListeners(TreeModelListener.class)) { l.treeStructureChanged(e); } - treeUtil.locateExpandedEntries(); }); if (parentTree != null) { SwingUtilities.invokeLater(() -> treeUtil.restoreExpansionState(parentTree)); @@ -372,6 +371,9 @@ public void run() { l.treeNodesInserted(insertEvent); } } + for (TreeModelListener l : listeners.getListeners(TreeModelListener.class)) { + l.treeStructureChanged(new TreeModelEvent(RepositoryTreeModel.this, getPathTo(folder))); + } } finally { if (!folderBroken.get()) { pendingFolders.remove(folder); diff --git a/src/main/java/com/rapidminer/repository/gui/RepositoryTreeUtil.java b/src/main/java/com/rapidminer/repository/gui/RepositoryTreeUtil.java index 38ae2972c..e013b3a17 100644 --- a/src/main/java/com/rapidminer/repository/gui/RepositoryTreeUtil.java +++ b/src/main/java/com/rapidminer/repository/gui/RepositoryTreeUtil.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -112,12 +112,15 @@ public void saveExpansionState(JTree tree) { public void restoreExpansionState(JTree tree) { for (int i = 0; i < tree.getRowCount(); i++) { TreePath path = tree.getPathForRow(i); - Object entryObject = path.getLastPathComponent(); - if (entryObject instanceof Entry) { - Entry entry = (Entry) entryObject; - String absoluteLocation = entry.getLocation().getAbsoluteLocation(); - if (expandedRepositories.contains(absoluteLocation) || expandedNodes.contains(absoluteLocation)) { - tree.expandPath(path); + // sanity check for concurrent refreshes + if (path != null) { + Object entryObject = path.getLastPathComponent(); + if (entryObject instanceof Entry) { + Entry entry = (Entry) entryObject; + String absoluteLocation = entry.getLocation().getAbsoluteLocation(); + if (expandedRepositories.contains(absoluteLocation) || expandedNodes.contains(absoluteLocation)) { + tree.expandPath(path); + } } } } diff --git a/src/main/java/com/rapidminer/repository/gui/RescalingProgressListener.java b/src/main/java/com/rapidminer/repository/gui/RescalingProgressListener.java index 4656df521..c1df0ee04 100644 --- a/src/main/java/com/rapidminer/repository/gui/RescalingProgressListener.java +++ b/src/main/java/com/rapidminer/repository/gui/RescalingProgressListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/ToolTipProviderHelper.java b/src/main/java/com/rapidminer/repository/gui/ToolTipProviderHelper.java index 1b8d57a7f..b19e7e5e8 100644 --- a/src/main/java/com/rapidminer/repository/gui/ToolTipProviderHelper.java +++ b/src/main/java/com/rapidminer/repository/gui/ToolTipProviderHelper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/AbstractRepositoryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/AbstractRepositoryAction.java index 1b05b96c5..2ff5aaa70 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/AbstractRepositoryAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/AbstractRepositoryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -42,7 +42,7 @@ public abstract class AbstractRepositoryAction extends ResourceAction { /** the tree to which the action belongs to */ - protected final RepositoryTree tree; + protected final transient RepositoryTree tree; /** the required selection type for the action to show/enable */ private final Class requiredSelectionType; diff --git a/src/main/java/com/rapidminer/repository/gui/actions/ConfigureRepositoryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/ConfigureRepositoryAction.java index 08513d36d..d2fff7069 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/ConfigureRepositoryAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/ConfigureRepositoryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/CopyEntryRepositoryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/CopyEntryRepositoryAction.java index 845f2a03b..4364056a1 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/CopyEntryRepositoryAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/CopyEntryRepositoryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/CopyLocationAction.java b/src/main/java/com/rapidminer/repository/gui/actions/CopyLocationAction.java index 07a2f2e63..345e47059 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/CopyLocationAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/CopyLocationAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/CreateFolderAction.java b/src/main/java/com/rapidminer/repository/gui/actions/CreateFolderAction.java index 86510bdd1..c442e5b6c 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/CreateFolderAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/CreateFolderAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/CutEntryRepositoryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/CutEntryRepositoryAction.java index a07bc91d6..a2d89aeea 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/CutEntryRepositoryAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/CutEntryRepositoryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/DeleteRepositoryEntryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/DeleteRepositoryEntryAction.java index 1f63f0ae7..78836ab6e 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/DeleteRepositoryEntryAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/DeleteRepositoryEntryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/NewRepositoryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/NewRepositoryAction.java new file mode 100644 index 000000000..04d4d4679 --- /dev/null +++ b/src/main/java/com/rapidminer/repository/gui/actions/NewRepositoryAction.java @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.repository.gui.actions; + +import java.awt.event.ActionEvent; + +import com.rapidminer.gui.tools.ResourceAction; +import com.rapidminer.repository.gui.NewRepositoryDialog; + + +/** + * Start the corresponding action. + * + * @author Marco Boeck + * @since 8.1 + */ +public class NewRepositoryAction extends ResourceAction { + + private static final long serialVersionUID = 1L; + + + public NewRepositoryAction() { + super("add_repository"); + setCondition(EDIT_IN_PROGRESS, DONT_CARE); + } + + @Override + public void loggedActionPerformed(ActionEvent e) { + NewRepositoryDialog.createNew(); + } +} diff --git a/src/main/java/com/rapidminer/repository/gui/actions/OpenEntryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/OpenEntryAction.java index bc14cd665..9eacf1ce2 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/OpenEntryAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/OpenEntryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,6 +18,7 @@ */ package com.rapidminer.repository.gui.actions; +import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.repository.DataEntry; import com.rapidminer.repository.IOObjectEntry; import com.rapidminer.repository.ProcessEntry; @@ -43,6 +44,8 @@ public void actionPerformed(DataEntry data) { com.rapidminer.gui.actions.OpenAction.showAsResult((IOObjectEntry) data); } else if (data instanceof ProcessEntry) { RepositoryTree.openProcess((ProcessEntry) data); + } else { + SwingTools.showVerySimpleErrorMessage("no_data_or_process"); } } diff --git a/src/main/java/com/rapidminer/repository/gui/actions/OpenInFileBrowserAction.java b/src/main/java/com/rapidminer/repository/gui/actions/OpenInFileBrowserAction.java index 330edab04..71067951d 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/OpenInFileBrowserAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/OpenInFileBrowserAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/PasteEntryRepositoryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/PasteEntryRepositoryAction.java index bcbbb09a2..928289eaf 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/PasteEntryRepositoryAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/PasteEntryRepositoryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/RefreshRepositoryEntryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/RefreshRepositoryEntryAction.java index 31780e465..784c87866 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/RefreshRepositoryEntryAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/RefreshRepositoryEntryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/RenameRepositoryEntryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/RenameRepositoryEntryAction.java index a60932a44..0ea66bca3 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/RenameRepositoryEntryAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/RenameRepositoryEntryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,6 +18,7 @@ */ package com.rapidminer.repository.gui.actions; +import com.rapidminer.gui.tools.ProgressThread; import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.repository.Entry; import com.rapidminer.repository.Repository; @@ -43,18 +44,25 @@ public void actionPerformed(Entry entry) { if (entry instanceof Repository) { return; } + String name = SwingTools.showRepositoryEntryInputDialog("file_chooser.rename", entry.getName(), entry.getName()); if ((name != null) && !name.equals(entry.getName())) { - boolean success = false; - try { - success = entry.rename(name); - } catch (Exception e) { - SwingTools.showSimpleErrorMessage("cannot_rename_entry", e, entry.getName(), name, e.getMessage()); - return; - } - if (!success) { - SwingTools.showVerySimpleErrorMessage("cannot_rename_entry", entry.getName(), name); - } + // don't rename in EDT, RemoteRepository could block entire UI + new ProgressThread("repository_rename") { + @Override + public void run() { + boolean success; + try { + success = entry.rename(name); + } catch (Exception e) { + SwingTools.showSimpleErrorMessage("cannot_rename_entry", e, entry.getName(), name, e.getMessage()); + return; + } + if (!success) { + SwingTools.showVerySimpleErrorMessage("cannot_rename_entry", entry.getName(), name); + } + } + }.start(); } } diff --git a/src/main/java/com/rapidminer/repository/gui/actions/ShowProcessInRepositoryAction.java b/src/main/java/com/rapidminer/repository/gui/actions/ShowProcessInRepositoryAction.java index e7967c0a4..dd0790580 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/ShowProcessInRepositoryAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/ShowProcessInRepositoryAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/SortByAction.java b/src/main/java/com/rapidminer/repository/gui/actions/SortByAction.java index 49f693558..90adcd6cf 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/SortByAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/SortByAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/SortByLastModifiedAction.java b/src/main/java/com/rapidminer/repository/gui/actions/SortByLastModifiedAction.java index 9e6ab423a..7bd64abe9 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/SortByLastModifiedAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/SortByLastModifiedAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/SortByNameAction.java b/src/main/java/com/rapidminer/repository/gui/actions/SortByNameAction.java index b2e8bd90e..04c76d4dc 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/SortByNameAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/SortByNameAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/actions/StoreProcessAction.java b/src/main/java/com/rapidminer/repository/gui/actions/StoreProcessAction.java index 1e6a05590..94f2caf58 100644 --- a/src/main/java/com/rapidminer/repository/gui/actions/StoreProcessAction.java +++ b/src/main/java/com/rapidminer/repository/gui/actions/StoreProcessAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/process/ExceptionWrapper.java b/src/main/java/com/rapidminer/repository/gui/process/ExceptionWrapper.java index d06cde055..4a3e541d0 100644 --- a/src/main/java/com/rapidminer/repository/gui/process/ExceptionWrapper.java +++ b/src/main/java/com/rapidminer/repository/gui/process/ExceptionWrapper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/process/OutputLocation.java b/src/main/java/com/rapidminer/repository/gui/process/OutputLocation.java index 89d9a5932..2c97be780 100644 --- a/src/main/java/com/rapidminer/repository/gui/process/OutputLocation.java +++ b/src/main/java/com/rapidminer/repository/gui/process/OutputLocation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/gui/search/RepositoryGlobalSearchGUIProvider.java b/src/main/java/com/rapidminer/repository/gui/search/RepositoryGlobalSearchGUIProvider.java new file mode 100644 index 000000000..9c794fd4a --- /dev/null +++ b/src/main/java/com/rapidminer/repository/gui/search/RepositoryGlobalSearchGUIProvider.java @@ -0,0 +1,344 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.repository.gui.search; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Font; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DragGestureEvent; +import java.awt.dnd.DragGestureListener; +import java.awt.dnd.DragSource; +import java.awt.event.InputEvent; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; +import javax.swing.BorderFactory; +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingWorker; +import javax.swing.border.Border; + +import org.apache.lucene.document.Document; + +import com.rapidminer.gui.RapidMinerGUI; +import com.rapidminer.gui.actions.OpenAction; +import com.rapidminer.gui.dnd.TransferableRepositoryEntry; +import com.rapidminer.gui.renderer.RendererService; +import com.rapidminer.gui.search.GlobalSearchGUIUtilities; +import com.rapidminer.gui.search.GlobalSearchableGUIProvider; +import com.rapidminer.gui.tools.IconSize; +import com.rapidminer.gui.tools.SwingTools; +import com.rapidminer.operator.Model; +import com.rapidminer.repository.Entry; +import com.rapidminer.repository.IOObjectEntry; +import com.rapidminer.repository.MalformedRepositoryLocationException; +import com.rapidminer.repository.ProcessEntry; +import com.rapidminer.repository.RepositoryLocation; +import com.rapidminer.repository.gui.RepositoryTree; +import com.rapidminer.repository.search.RepositoryGlobalSearch; +import com.rapidminer.search.GlobalSearchUtilities; +import com.rapidminer.tools.I18N; +import com.rapidminer.tools.LogService; + + +/** + * Provides UI elements to display repository entries in the Global Search results for the {@link RepositoryGlobalSearch}. + * + * @author Marco Boeck + * @since 8.1 + */ +public class RepositoryGlobalSearchGUIProvider implements GlobalSearchableGUIProvider { + + /** + * Drag & Drop support for repository entries. + */ + private static final class RepositoryDragGesture implements DragGestureListener { + + private final RepositoryLocation location; + + private RepositoryDragGesture(RepositoryLocation location) { + this.location = location; + } + + @Override + public void dragGestureRecognized(DragGestureEvent event) { + // only allow dragging with left mouse button + if (event.getTriggerEvent().getModifiers() != InputEvent.BUTTON1_MASK) { + return; + } + + // change cursor to drag move + Cursor cursor = null; + if (event.getDragAction() == DnDConstants.ACTION_COPY) { + cursor = DragSource.DefaultCopyDrop; + } + + // set the repository entry as the Transferable + event.startDrag(cursor, new TransferableRepositoryEntry(location)); + } + } + + private static final ImageIcon PROCESS_ICON = SwingTools.createIcon("16/gearwheel.png"); + private static final ImageIcon MODEL_ICON = SwingTools.createIcon("16/lightbulb_on.png"); + private static final ImageIcon DATA_ICON = SwingTools.createIcon("16/data.png"); + private static final ImageIcon UNKNOWN_ICON = SwingTools.createIcon("16/question.png"); + private static final ImageIcon LOADING_ICON = SwingTools.createIcon("16/loading.gif"); + + private static final Color LOCATION_COLOR = new Color(62, 62, 62); + private static final Border ICON_EMPTY_BORDER = BorderFactory.createEmptyBorder(0, 5, 0, 15); + private static final int MAX_LENGTH_LOCATION = 49; + private static final float FONT_SIZE_NAME = 14f; + private static final float FONT_SIZE_LOCATION = 9f; + + private static final Map ICON_CACHE = new ConcurrentHashMap<>(); + + + @Override + public JComponent getGUIListComponentForDocument(final Document document, final String[] bestFragments) { + JPanel mainListPanel = new JPanel(); + mainListPanel.setOpaque(false); + String absolutePath = document.get(GlobalSearchUtilities.FIELD_UNIQUE_ID); + + JPanel descriptionPanel = new JPanel(); + descriptionPanel.setOpaque(false); + + mainListPanel.setLayout(new BorderLayout()); + descriptionPanel.setLayout(new BorderLayout()); + + JLabel nameListLabel = new JLabel(); + nameListLabel.setFont(nameListLabel.getFont().deriveFont(Font.BOLD).deriveFont(FONT_SIZE_NAME)); + JLabel locationListLabel = new JLabel(); + locationListLabel.setForeground(LOCATION_COLOR); + locationListLabel.setFont(locationListLabel.getFont().deriveFont(FONT_SIZE_LOCATION)); + JLabel iconListLabel = new JLabel(); + iconListLabel.setBorder(ICON_EMPTY_BORDER); + + descriptionPanel.add(nameListLabel, BorderLayout.CENTER); + descriptionPanel.add(locationListLabel, BorderLayout.SOUTH); + + mainListPanel.add(iconListLabel, BorderLayout.WEST); + mainListPanel.add(descriptionPanel, BorderLayout.CENTER); + + nameListLabel.setText(formatName(document.get(GlobalSearchUtilities.FIELD_NAME), bestFragments)); + + // either use icon already cached or use loading icon + Icon icon = ICON_CACHE.get(absolutePath); + boolean needIconLoading = icon == null; + icon = needIconLoading ? LOADING_ICON : icon; + iconListLabel.setIcon(icon); + + // for layout reasons, add whitespace location first + locationListLabel.setText(" "); + try { + RepositoryLocation location = new RepositoryLocation(absolutePath); + String locString = RepositoryLocation.REPOSITORY_PREFIX + location.getRepositoryName(); + locString = locString + "..." + RepositoryLocation.SEPARATOR + location.getName(); + + locationListLabel.setText(SwingTools.getShortenedDisplayName(locString, MAX_LENGTH_LOCATION)); + mainListPanel.setToolTipText(location.getAbsoluteLocation()); + } catch (MalformedRepositoryLocationException e) { + // should not happen + } + + // no icon cached yet? Load it async + if (needIconLoading) { + // loading the entry may take a while, do it async + loadEntryDetailsAsync(document, iconListLabel); + } + + return mainListPanel; + } + + @Override + public String getI18nNameForSearchable() { + return I18N.getMessage(I18N.getGUIBundle(), "gui.component.global_search.repository.category.title"); + } + + @Override + public void searchResultTriggered(final Document document, final Veto veto) { + // try to open location + String absoluteLocation = document.get(GlobalSearchUtilities.FIELD_UNIQUE_ID); + if (absoluteLocation == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.no_key"); + return; + } + + openEntryAsync(document); + } + + @Override + public void searchResultBrowsed(final Document document) { + // try to open location + String absoluteLocation = document.get(GlobalSearchUtilities.FIELD_UNIQUE_ID); + if (absoluteLocation == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.no_key"); + return; + } + + try { + RepositoryLocation location = new RepositoryLocation(absoluteLocation); + + // scroll to location + // twice because otherwise the repository browser selects the parent... + RapidMinerGUI.getMainFrame().getRepositoryBrowser().getRepositoryTree().expandAndSelectIfExists(location); + RapidMinerGUI.getMainFrame().getRepositoryBrowser().getRepositoryTree().expandAndSelectIfExists(location); + } catch (MalformedRepositoryLocationException e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.browse_location", e.getMessage()); + } + } + + @Override + public boolean isDragAndDropSupported(final Document document) { + return true; + } + + @Override + public DragGestureListener getDragAndDropSupport(final Document document) { + String absoluteLocation = document.get(GlobalSearchUtilities.FIELD_UNIQUE_ID); + if (absoluteLocation == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.no_key"); + return null; + } + + try { + return new RepositoryDragGesture(new RepositoryLocation(absoluteLocation)); + } catch (MalformedRepositoryLocationException e) { + return null; + } + } + + /** + * Loads the repository entry async. This may take a while, especially for slow remote repositories, so don't do it on the EDT. + * + * @param document + * the document for which to populate the UI + * @param iconListLabel + * the type icon label + */ + private void loadEntryDetailsAsync(final Document document, final JLabel iconListLabel) { + SwingWorker worker = new SwingWorker() { + + @Override + protected Entry doInBackground() throws Exception { + RepositoryLocation location = new RepositoryLocation(document.get(GlobalSearchUtilities.FIELD_UNIQUE_ID)); + return location.locateEntry(); + } + + @Override + protected void done() { + try { + Entry locatedEntry = get(); + // no error here? Entry located successfully. + + // put icon in cache for faster retrieval next time + Icon icon = getIconForEntry(locatedEntry); + ICON_CACHE.put(locatedEntry.getLocation().getAbsoluteLocation(), icon); + + iconListLabel.setIcon(icon); + } catch (Exception e) { + // loading entry has failed, log and use fallback + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.lazy_loading", e); + + iconListLabel.setIcon(UNKNOWN_ICON); + } + } + }; + worker.execute(); + } + + /** + * Opens the repository entry async. This may take a while, especially for slow remote repositories, so don't do it on the EDT. + * + * @param document + * the document for which to load the repository entry + */ + private void openEntryAsync(final Document document) { + SwingWorker worker = new SwingWorker() { + + @Override + protected Entry doInBackground() throws Exception { + RepositoryLocation location = new RepositoryLocation(document.get(GlobalSearchUtilities.FIELD_UNIQUE_ID)); + return location.locateEntry(); + } + + @Override + protected void done() { + try { + Entry locatedEntry = get(); + // no error here? Entry located successfully. + + if (locatedEntry instanceof ProcessEntry) { + RepositoryTree.openProcess((ProcessEntry) locatedEntry); + } else if (locatedEntry instanceof IOObjectEntry) { + OpenAction.showAsResult((IOObjectEntry) locatedEntry); + } else { + SwingTools.showVerySimpleErrorMessage("no_data_or_process"); + } + } catch (Exception e) { + // loading entry has failed, log and do nothing + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.open_location", e); + SwingTools.showVerySimpleErrorMessage("global_search.cannot_open", e.getMessage()); + } + } + }; + worker.execute(); + } + + /** + * Adds the fragment highlighting to the entry name. + * + * @param name + * the base name + * @param bestFragments + * the best fragments as returned from the search + * @return the new HTML-formatted name or the original name + */ + private static String formatName(final String name, final String[] bestFragments) { + if (bestFragments != null) { + return GlobalSearchGUIUtilities.INSTANCE.createHTMLHighlightFromString(name, bestFragments); + } + + return name; + } + + /** + * Returns the icon for the given entry. + * + * @param entry + * the entry, must not be {@code null} + * @return the icon, never {@code null} + */ + private static Icon getIconForEntry(final Entry entry) { + if (entry instanceof ProcessEntry) { + return PROCESS_ICON; + } else if (entry instanceof Model) { + return MODEL_ICON; + } else if (entry instanceof IOObjectEntry) { + IOObjectEntry dataEntry = (IOObjectEntry) entry; + return RendererService.getIcon(dataEntry.getObjectClass(), IconSize.SMALL); + } else { + return DATA_ICON; + } + } +} diff --git a/src/main/java/com/rapidminer/repository/internal/db/DBRepository.java b/src/main/java/com/rapidminer/repository/internal/db/DBRepository.java index 816eedb42..8fcbec803 100644 --- a/src/main/java/com/rapidminer/repository/internal/db/DBRepository.java +++ b/src/main/java/com/rapidminer/repository/internal/db/DBRepository.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/ConnectionListener.java b/src/main/java/com/rapidminer/repository/internal/remote/ConnectionListener.java index 07e4767b8..0cc880b3e 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/ConnectionListener.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/ConnectionListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteBlobEntry.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteBlobEntry.java index 6f5af6f0e..c2ad1709a 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteBlobEntry.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteBlobEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteContentManager.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteContentManager.java index 7ced18711..adf503fa1 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteContentManager.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteContentManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteDataEntry.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteDataEntry.java index 28325fc83..5f6c47458 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteDataEntry.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteDataEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteEntry.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteEntry.java index d563f9b96..f670a5335 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteEntry.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteFolder.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteFolder.java index ed32a362c..3b6559145 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteFolder.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteFolder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteIOObjectEntry.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteIOObjectEntry.java index 496196ed7..a15efa32d 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteIOObjectEntry.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteIOObjectEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteInfoService.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteInfoService.java index 1cb3dcc3c..67af2fb9c 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteInfoService.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteInfoService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteProcessEntry.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteProcessEntry.java index 22dff0ba1..9db204439 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteProcessEntry.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteProcessEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepository.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepository.java index 003f7eb23..b6fa17ba3 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepository.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepository.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -23,7 +23,7 @@ import java.net.URL; import java.util.List; -import com.rapidminer.repository.Repository; +import com.rapidminer.repository.ConnectionRepository; import com.rapidminer.repository.RepositoryException; import com.rapidminer.tools.PasswordInputCanceledException; @@ -38,7 +38,7 @@ * @since 6.5.0 * */ -public interface RemoteRepository extends Repository, RemoteFolder { +public interface RemoteRepository extends RemoteFolder, ConnectionRepository { public static final String TAG_REMOTE_REPOSITORY = "remoteRepository"; @@ -89,11 +89,6 @@ public static enum EntryStreamType { */ boolean isPasswordInputCanceled(); - /** - * @return whether the {@link RemoteRepository} is connected (online) or disconneted (offline). - */ - boolean isConnected(); - /** * Checks if the server is reachable at the moment with the current login; repeatedly shows the * login dialog if the login is wrong. Checks if a sufficient server version was found. @@ -198,16 +193,30 @@ HttpURLConnection getHTTPConnection(String pathInfo, String query, boolean preAu * Registers a {@link ConnectionListener}. * * @param listener - * the {@link ConnectionListener} to register + * the {@link ConnectionListener} to register + * @deprecated Only here for legacy compatibility reasons. Use {@link ConnectionRepository#addConnectionListener(com.rapidminer.repository.ConnectionListener)} instead. */ + @Deprecated void addConnectionListener(ConnectionListener listener); /** * Removes a registered {@link ConnectionListener}. * * @param listener - * the {@link ConnectionListener} to remove + * the {@link ConnectionListener} to remove + * @deprecated Only here for legacy compatibility reasons. Use {@link ConnectionRepository#removeConnectionListener(com.rapidminer.repository.ConnectionListener)} instead. */ + @Deprecated void removeConnectionListener(ConnectionListener listener); + /** + * Checks if the specified file name is blacklisted or not. Will return {@code false} by default. + * @param originalFilename the name of the file to be pushed + * @return {@code true} if the file is blacklisted, {@code false} otherwise + * @since 8.1 + * @throws IOException if a connection error occurs + * @throws RepositoryException if a repository error occurs + */ + default boolean isFileExtensionBlacklisted(String originalFilename) throws IOException, RepositoryException {return false;} + } diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepositoryFactory.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepositoryFactory.java index 94d9b868f..18054301f 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepositoryFactory.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepositoryFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepositoryFactoryRegistry.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepositoryFactoryRegistry.java index 6d5cbef1e..19322daf4 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepositoryFactoryRegistry.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteRepositoryFactoryRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/internal/remote/RemoteScheduler.java b/src/main/java/com/rapidminer/repository/internal/remote/RemoteScheduler.java index ae324ed84..e18298597 100644 --- a/src/main/java/com/rapidminer/repository/internal/remote/RemoteScheduler.java +++ b/src/main/java/com/rapidminer/repository/internal/remote/RemoteScheduler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/local/LocalRepository.java b/src/main/java/com/rapidminer/repository/local/LocalRepository.java index 5450e0ad6..5160b7c9f 100644 --- a/src/main/java/com/rapidminer/repository/local/LocalRepository.java +++ b/src/main/java/com/rapidminer/repository/local/LocalRepository.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -101,8 +101,9 @@ public File getRoot() { @Override public boolean rename(String newName) { + String formerName = getName(); setName(newName); - fireEntryRenamed(this); + fireEntryMoved(this, null, formerName); return true; } @@ -125,11 +126,16 @@ public void removeRepositoryListener(RepositoryListener l) { listeners.remove(RepositoryListener.class, l); } - protected void fireEntryRenamed(final Entry entry) { + protected void fireEntryChanged(final Entry entry) { for (RepositoryListener l : listeners.getListeners(RepositoryListener.class)) { l.entryChanged(entry); } + } + protected void fireEntryMoved(final Entry newEntry, Folder formerParent, String formerName) { + for (RepositoryListener l : listeners.getListeners(RepositoryListener.class)) { + l.entryMoved(newEntry, formerParent, formerName); + } } protected void fireEntryAdded(final Entry newEntry, final Folder parent) { diff --git a/src/main/java/com/rapidminer/repository/local/SimpleBlobEntry.java b/src/main/java/com/rapidminer/repository/local/SimpleBlobEntry.java index 3824e98a0..5a836574b 100644 --- a/src/main/java/com/rapidminer/repository/local/SimpleBlobEntry.java +++ b/src/main/java/com/rapidminer/repository/local/SimpleBlobEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/local/SimpleDataEntry.java b/src/main/java/com/rapidminer/repository/local/SimpleDataEntry.java index 04b3ae14c..0b64686f9 100644 --- a/src/main/java/com/rapidminer/repository/local/SimpleDataEntry.java +++ b/src/main/java/com/rapidminer/repository/local/SimpleDataEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/local/SimpleEntry.java b/src/main/java/com/rapidminer/repository/local/SimpleEntry.java index e7008d71c..0c7468a7d 100644 --- a/src/main/java/com/rapidminer/repository/local/SimpleEntry.java +++ b/src/main/java/com/rapidminer/repository/local/SimpleEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -92,11 +92,13 @@ public String getName() { @Override public boolean rename(String newName) throws RepositoryException { - checkRename(getContainingFolder(), newName); + Folder formerParent = getContainingFolder(); + String formerName = getName(); + checkRename(formerParent, newName); handleRename(newName); renameFile(getPropertiesFile(), newName); this.name = newName; - getRepository().fireEntryRenamed(this); + getRepository().fireEntryMoved(this, formerParent, formerName); return true; } diff --git a/src/main/java/com/rapidminer/repository/local/SimpleFolder.java b/src/main/java/com/rapidminer/repository/local/SimpleFolder.java index 464be89e6..5aa2fbade 100644 --- a/src/main/java/com/rapidminer/repository/local/SimpleFolder.java +++ b/src/main/java/com/rapidminer/repository/local/SimpleFolder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -86,7 +86,7 @@ public List getDataEntries() throws RepositoryException { acquireReadLock(); try { if (isLoaded()) { - return Collections.unmodifiableList(data); + return Collections.unmodifiableList(new ArrayList<>(data)); } } finally { releaseReadLock(); @@ -94,7 +94,7 @@ public List getDataEntries() throws RepositoryException { acquireWriteLock(); try { ensureLoaded(); - return Collections.unmodifiableList(data); + return Collections.unmodifiableList(new ArrayList<>(data)); } finally { releaseWriteLock(); } @@ -105,7 +105,7 @@ public List getSubfolders() throws RepositoryException { acquireReadLock(); try { if (isLoaded()) { - return Collections.unmodifiableList(folders); + return Collections.unmodifiableList(new ArrayList<>(folders)); } } finally { releaseReadLock(); @@ -113,7 +113,7 @@ public List getSubfolders() throws RepositoryException { acquireWriteLock(); try { ensureLoaded(); - return Collections.unmodifiableList(folders); + return Collections.unmodifiableList(new ArrayList<>(folders)); } finally { releaseWriteLock(); } diff --git a/src/main/java/com/rapidminer/repository/local/SimpleIOObjectEntry.java b/src/main/java/com/rapidminer/repository/local/SimpleIOObjectEntry.java index eb055b0f0..6bc4f365b 100644 --- a/src/main/java/com/rapidminer/repository/local/SimpleIOObjectEntry.java +++ b/src/main/java/com/rapidminer/repository/local/SimpleIOObjectEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -128,6 +128,7 @@ public void storeData(IOObject data, Operator callingOperator, ProgressListener l.setTotal(100); l.setCompleted(10); } + boolean existed = getDataFile().exists(); MetaData md = MetaData.forIOObject(data); // Serialize Non-ExampleSets as IOO try (FileOutputStream fos = new FileOutputStream(getDataFile()); OutputStream out = new BufferedOutputStream(fos)) { @@ -155,6 +156,10 @@ public void storeData(IOObject data, Operator callingOperator, ProgressListener } this.metaData = new WeakReference<>(md); putProperty(PROPERTY_IOOBJECT_CLASS, data.getClass().getName()); + + if (existed) { + getRepository().fireEntryChanged(this); + } } @Override diff --git a/src/main/java/com/rapidminer/repository/local/SimpleProcessEntry.java b/src/main/java/com/rapidminer/repository/local/SimpleProcessEntry.java index b52585db2..eac8c56bc 100644 --- a/src/main/java/com/rapidminer/repository/local/SimpleProcessEntry.java +++ b/src/main/java/com/rapidminer/repository/local/SimpleProcessEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -52,7 +52,11 @@ public String retrieveXML() throws RepositoryException { @Override public void storeXML(String xml) throws RepositoryException { try { + boolean existed = getFile().exists(); Tools.writeTextFile(getFile(), xml); + if (existed) { + getRepository().fireEntryChanged(this); + } } catch (IOException e) { throw new RepositoryException("Cannot write " + getFile() + ": " + e, e); } diff --git a/src/main/java/com/rapidminer/repository/resource/ResourceDataEntry.java b/src/main/java/com/rapidminer/repository/resource/ResourceDataEntry.java index 5418d275f..2d970c179 100644 --- a/src/main/java/com/rapidminer/repository/resource/ResourceDataEntry.java +++ b/src/main/java/com/rapidminer/repository/resource/ResourceDataEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/ResourceEntry.java b/src/main/java/com/rapidminer/repository/resource/ResourceEntry.java index 23969ffd7..a321ba1d6 100644 --- a/src/main/java/com/rapidminer/repository/resource/ResourceEntry.java +++ b/src/main/java/com/rapidminer/repository/resource/ResourceEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/ResourceFolder.java b/src/main/java/com/rapidminer/repository/resource/ResourceFolder.java index 32530f8bb..948c439bc 100644 --- a/src/main/java/com/rapidminer/repository/resource/ResourceFolder.java +++ b/src/main/java/com/rapidminer/repository/resource/ResourceFolder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/ResourceIOObjectEntry.java b/src/main/java/com/rapidminer/repository/resource/ResourceIOObjectEntry.java index 2d5744e03..a722abad0 100644 --- a/src/main/java/com/rapidminer/repository/resource/ResourceIOObjectEntry.java +++ b/src/main/java/com/rapidminer/repository/resource/ResourceIOObjectEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/ResourceProcessEntry.java b/src/main/java/com/rapidminer/repository/resource/ResourceProcessEntry.java index 566be3bf3..5ece6d3ea 100644 --- a/src/main/java/com/rapidminer/repository/resource/ResourceProcessEntry.java +++ b/src/main/java/com/rapidminer/repository/resource/ResourceProcessEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/ResourceRepository.java b/src/main/java/com/rapidminer/repository/resource/ResourceRepository.java index a9cd97362..908d15e29 100644 --- a/src/main/java/com/rapidminer/repository/resource/ResourceRepository.java +++ b/src/main/java/com/rapidminer/repository/resource/ResourceRepository.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/TemplatesFolder.java b/src/main/java/com/rapidminer/repository/resource/TemplatesFolder.java index 298a4e19b..715957050 100644 --- a/src/main/java/com/rapidminer/repository/resource/TemplatesFolder.java +++ b/src/main/java/com/rapidminer/repository/resource/TemplatesFolder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/TutorialFolder.java b/src/main/java/com/rapidminer/repository/resource/TutorialFolder.java index 6e856c1fb..70e3fc53e 100644 --- a/src/main/java/com/rapidminer/repository/resource/TutorialFolder.java +++ b/src/main/java/com/rapidminer/repository/resource/TutorialFolder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/TutorialGroupFolder.java b/src/main/java/com/rapidminer/repository/resource/TutorialGroupFolder.java index ac5c5957c..e3ef24eef 100644 --- a/src/main/java/com/rapidminer/repository/resource/TutorialGroupFolder.java +++ b/src/main/java/com/rapidminer/repository/resource/TutorialGroupFolder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/ZipResourceBlobEntry.java b/src/main/java/com/rapidminer/repository/resource/ZipResourceBlobEntry.java index e7011b376..ec270f780 100644 --- a/src/main/java/com/rapidminer/repository/resource/ZipResourceBlobEntry.java +++ b/src/main/java/com/rapidminer/repository/resource/ZipResourceBlobEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/ZipResourceFolder.java b/src/main/java/com/rapidminer/repository/resource/ZipResourceFolder.java index 2834bae60..dd99a9fd6 100644 --- a/src/main/java/com/rapidminer/repository/resource/ZipResourceFolder.java +++ b/src/main/java/com/rapidminer/repository/resource/ZipResourceFolder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/ZipResourceIOObjectEntry.java b/src/main/java/com/rapidminer/repository/resource/ZipResourceIOObjectEntry.java index 189b5dcbc..643bfb1c8 100644 --- a/src/main/java/com/rapidminer/repository/resource/ZipResourceIOObjectEntry.java +++ b/src/main/java/com/rapidminer/repository/resource/ZipResourceIOObjectEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/ZipResourceProcessEntry.java b/src/main/java/com/rapidminer/repository/resource/ZipResourceProcessEntry.java index b925b3aa4..3f207fabf 100644 --- a/src/main/java/com/rapidminer/repository/resource/ZipResourceProcessEntry.java +++ b/src/main/java/com/rapidminer/repository/resource/ZipResourceProcessEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/resource/ZipStreamResource.java b/src/main/java/com/rapidminer/repository/resource/ZipStreamResource.java index c9f957305..0d5c1478a 100644 --- a/src/main/java/com/rapidminer/repository/resource/ZipStreamResource.java +++ b/src/main/java/com/rapidminer/repository/resource/ZipStreamResource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearch.java b/src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearch.java new file mode 100644 index 000000000..ca9af8c44 --- /dev/null +++ b/src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearch.java @@ -0,0 +1,60 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.repository.search; + +import com.rapidminer.RapidMiner; +import com.rapidminer.parameter.ParameterTypeBoolean; +import com.rapidminer.search.GlobalSearchIndexer; +import com.rapidminer.search.GlobalSearchManager; +import com.rapidminer.search.GlobalSearchable; +import com.rapidminer.search.GlobalSearchRegistry; + + +/** + * Responsible for implementing Global Search capabilities for repositories. See {@link GlobalSearchRegistry} + * for more information. + * + * @author Marco Boeck + * @since 8.1 + */ +public class RepositoryGlobalSearch implements GlobalSearchable { + + public static final String CATEGORY_ID = "repository"; + + /** property controlling whether full repository indexing is enabled */ + public static final String PROPERTY_FULL_REPOSITORY_INDEXING = "rapidminer.search.repository.enable_full_indexing"; + + + private final RepositoryGlobalSearchManager manager; + + + public RepositoryGlobalSearch() { + RapidMiner.registerParameter(new ParameterTypeBoolean(RepositoryGlobalSearch.PROPERTY_FULL_REPOSITORY_INDEXING, "", false)); + manager = new RepositoryGlobalSearchManager(); + + if (GlobalSearchIndexer.INSTANCE.isInitialized()) { + GlobalSearchRegistry.INSTANCE.registerSearchCategory(this); + } + } + + @Override + public GlobalSearchManager getSearchManager() { + return manager; + } +} diff --git a/src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearchItem.java b/src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearchItem.java new file mode 100644 index 000000000..d11261aea --- /dev/null +++ b/src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearchItem.java @@ -0,0 +1,142 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.repository.search; + +import com.rapidminer.repository.Entry; + + +/** + * POJO for a repository Global Search item, describing one {@link com.rapidminer.repository.Entry}. + * + * @author Marco Boeck + * @since 8.1 + */ +public class RepositoryGlobalSearchItem { + + private String name; + private String type; + private String parent; + private String owner; + private String location; + private String modified; + private String[] attributes; + + /** + * The name of this item. + * + * @return the name, never {@code null}. + */ + public String getName() { + return name; + } + + /** + * The name of the parent folder in the repository of this item. + * + * @return the name, never {@code null} but may be empty if it's in the root folder. + */ + public String getParent() { + return parent; + } + + /** + * The name of the user who owns this item. + * + * @return the name, may be {@code null}. + */ + public String getOwner() { + return owner; + } + + /** + * The type of this entry. See {@link Entry#getType()} . + * + * @return the type, never {@code null}. + */ + public String getType() { + return type; + } + + /** + * The full repository location of this item. + * + * @return the full location, never {@code null}. + */ + public String getLocation() { + return location; + } + + /** + * The last modified time. + * + * @return the timestamp in ms since epoch, may be {@code null} or empty. + */ + public String getModified() { + return modified; + } + + /** + * The attribute names associated with this entry. + * + * @return the attribute names, may be {@code null} or empty. + */ + public String[] getAttributes() { + return attributes; + } + + public RepositoryGlobalSearchItem setName(String name) { + this.name = name; + return this; + } + + public RepositoryGlobalSearchItem setParent(String parent) { + this.parent = parent; + return this; + } + + public RepositoryGlobalSearchItem setOwner(String owner) { + this.owner = owner; + return this; + } + + public RepositoryGlobalSearchItem setType(String type) { + this.type = type; + return this; + } + + public RepositoryGlobalSearchItem setLocation(String location) { + this.location = location; + return this; + } + + public RepositoryGlobalSearchItem setModified(String modified) { + this.modified = modified; + return this; + } + + public RepositoryGlobalSearchItem setAttributes(String[] attributes) { + this.attributes = attributes; + return this; + } + + @Override + public String toString() { + return getLocation(); + } +} diff --git a/src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearchManager.java b/src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearchManager.java new file mode 100644 index 000000000..e26d83dc4 --- /dev/null +++ b/src/main/java/com/rapidminer/repository/search/RepositoryGlobalSearchManager.java @@ -0,0 +1,491 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.repository.search; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; + +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.apache.lucene.queryparser.classic.ParseException; + +import com.rapidminer.gui.tools.ProgressThread; +import com.rapidminer.operator.ports.metadata.AttributeMetaData; +import com.rapidminer.operator.ports.metadata.ExampleSetMetaData; +import com.rapidminer.operator.ports.metadata.MetaData; +import com.rapidminer.operator.ports.metadata.ModelMetaData; +import com.rapidminer.repository.ConnectionListener; +import com.rapidminer.repository.ConnectionRepository; +import com.rapidminer.repository.DataEntry; +import com.rapidminer.repository.DateEntry; +import com.rapidminer.repository.Entry; +import com.rapidminer.repository.Folder; +import com.rapidminer.repository.IOObjectEntry; +import com.rapidminer.repository.Repository; +import com.rapidminer.repository.RepositoryException; +import com.rapidminer.repository.RepositoryListener; +import com.rapidminer.repository.RepositoryLocation; +import com.rapidminer.repository.RepositoryManager; +import com.rapidminer.repository.RepositoryManagerListener; +import com.rapidminer.repository.internal.db.DBRepository; +import com.rapidminer.repository.internal.remote.RemoteRepository; +import com.rapidminer.repository.resource.ResourceRepository; +import com.rapidminer.search.AbstractGlobalSearchManager; +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchResult; +import com.rapidminer.search.GlobalSearchResultBuilder; +import com.rapidminer.search.GlobalSearchUtilities; +import com.rapidminer.tools.LogService; +import com.rapidminer.tools.ParameterService; +import com.rapidminer.tools.Tools; +import com.rapidminer.tools.WebServiceTools; + + +/** + * Manages repository Global Search. + * + * @author Marco Boeck + * @since 8.1 + */ +class RepositoryGlobalSearchManager extends AbstractGlobalSearchManager implements RepositoryListener, RepositoryManagerListener, ConnectionListener { + + private static final String API_REST_REMOTE_REPO_DETAILS = "api/rest/globalsearch/repo/details"; + private static final String API_REST_REMOTE_REPO_SUMMARY = "api/rest/globalsearch/repo/summary"; + + private static final Map ADDITIONAL_FIELDS; + private static final String FIELD_TYPE = "type"; + private static final String FIELD_PARENT = "parent"; + private static final String FIELD_LOCATION = "location"; + private static final String FIELD_MODIFIED = "modified"; + private static final String FIELD_USER = "user"; + private static final String FIELD_ATTRIBUTE = "attribute"; + + static { + ADDITIONAL_FIELDS = new HashMap<>(); + ADDITIONAL_FIELDS.put(FIELD_TYPE, "The type of the data, e.g. 'process' or 'data'"); + ADDITIONAL_FIELDS.put(FIELD_PARENT, "The name of the parent folder of the data"); + ADDITIONAL_FIELDS.put(FIELD_MODIFIED, "The timestamp of the last modification of the data, if available. Format: 'YYYY-MM-DD'"); + ADDITIONAL_FIELDS.put(FIELD_USER, "The user who last edited the data"); + ADDITIONAL_FIELDS.put(FIELD_ATTRIBUTE, "The attributes for ExampleSets and the training set attributes in case of Models"); + } + + + protected RepositoryGlobalSearchManager() { + super(RepositoryGlobalSearch.CATEGORY_ID, ADDITIONAL_FIELDS); + } + + @Override + protected void init() { + RepositoryManager.getInstance(null).addRepositoryManagerListener(this); + } + + @Override + protected List createInitialIndex(ProgressThread progressThread) { + // the listener is triggered for each repository while Studio starts up, loading each one in a separate ProgressThread + // so no need to perform initial indexing + return Collections.emptyList(); + } + + @Override + public void entryAdded(Entry newEntry, Folder parent) { + if (newEntry instanceof Folder) { + // can be ignored because all entries under the folder will also show up as entryAdded events + return; + } + addDocumentToIndex(createDocument(createItem(newEntry, true))); + } + + @Override + public void entryChanged(Entry entry) { + if (entry instanceof Folder) { + // can be ignored. Renaming events are entryMoved events. + return; + } + addDocumentToIndex(createDocument(createItem(entry, true))); + } + + @Override + public void entryRemoved(Entry removedEntry, Folder parent, int oldIndex) { + if (removedEntry instanceof Folder) { + deleteEntriesUnderLocationFromIndex(removedEntry.getLocation().getAbsoluteLocation()); + } else { + removeDocumentFromIndex(createDocument(createItem(removedEntry, false))); + } + } + + @Override + public void entryMoved(Entry newEntry, Folder formerParent, String formerName) { + if (newEntry instanceof Folder) { + String parentLocation; + if (formerParent == null) { + // a repository was renamed + parentLocation = RepositoryLocation.REPOSITORY_PREFIX + formerName; + } else { + parentLocation = formerParent.getLocation().getAbsoluteLocation() + RepositoryLocation.SEPARATOR + formerName; + } + + // delete all entries under the former parent folder + deleteEntriesUnderLocationFromIndex(parentLocation); + + // add all entries under the new folder to the index again + addEntriesUnderFolderToIndex((Folder) newEntry); + } else { + // delete old entry + removeDocumentFromIndex(createDocumentForDeletion(formerParent.getLocation().getAbsoluteLocation() + RepositoryLocation.SEPARATOR + formerName, formerName)); + + // add new entry + addDocumentToIndex(createDocument(createItem(newEntry, true))); + } + } + + @Override + public void repositoryWasAdded(Repository repository) { + if (repository instanceof DBRepository) { + // skip DB special repository + return; + } + if (repository instanceof ResourceRepository && !RepositoryManager.SAMPLE_REPOSITORY_NAME.equals(repository.getName())) { + // skip resource repositories from tutorials/templates/etc - except for the Samples repository, that one can be indexed + return; + } + + // listen for add/delete/change events + repository.addRepositoryListener(this); + + if (repository instanceof ConnectionRepository) { + // cannot index directly, add listener to index once it is connected + ((ConnectionRepository) repository).addConnectionListener(this); + } else { + // all other repositories, index now! + addEntriesUnderFolderToIndex(repository); + } + } + + @Override + public void repositoryWasRemoved(Repository repository) { + // No longer listen for add/delete/change events + repository.removeRepositoryListener(this); + + if (repository instanceof ConnectionRepository) { + ((ConnectionRepository) repository).removeConnectionListener(this); + } + + // always delete entries for repo that is going to be removed + deleteEntriesUnderLocationFromIndex(RepositoryLocation.REPOSITORY_PREFIX + repository.getName()); + } + + @Override + public void folderRefreshed(Folder folder) { + // delete all entries under the folder + deleteEntriesUnderLocationFromIndex(folder.getLocation().getAbsoluteLocation()); + + // add all entries under the new folder to the index again + addEntriesUnderFolderToIndex(folder); + } + + @Override + public void connectionLost(ConnectionRepository repository) { + // drop all items in that repository because they will get re-added once the connection is re-established + // if we did not drop them, we may store out-of-sync information because the content may have changed + // this is especially important if the user of the repository were to change. Then contents are very different. + deleteEntriesUnderLocationFromIndex(repository.getLocation().getAbsoluteLocation()); + } + + @Override + public void connectionEstablished(ConnectionRepository repository) { + // if connection to a connection repository (e.g. RM Server or Cloud) is established, try to query information for all available entries + addEntriesUnderFolderToIndex(repository); + } + + /** + * Add all entries under the given folder to the index. The full index is potentially costly, so both fast and full index happen async in ProgressThreads. + * + * @param folder + * the folder under which all elements will be added to the index + */ + private void addEntriesUnderFolderToIndex(final Folder folder) { + // add stuff to index fast so user can search basic stuff asap + ProgressThread pgFast = new ProgressThread("global_search.repo.search_index_fast", false, folder.getName()) { + + @Override + public void run() { + List indexedEntries = new ArrayList<>(); + try { + Repository repo = folder.getLocation().getRepository(); + // special indexing for Remote Repo to avoid potentially thousands of queries + if (repo instanceof RemoteRepository) { + indexRemoteFolder(indexedEntries, folder, (RemoteRepository) repo, false); + } else { + indexFolder(indexedEntries, folder, false, this); + } + addDocumentsToIndex(indexedEntries); + } catch (Exception e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.initial_index_error_folder", folder.getName()); + } + } + }; + pgFast.setIndeterminate(true); + pgFast.start(); + + // if enabled, add full metadata to index afterwards, so user can search advanced things + if (Boolean.parseBoolean(ParameterService.getParameterValue(RepositoryGlobalSearch.PROPERTY_FULL_REPOSITORY_INDEXING))) { + ProgressThread pgFull = new ProgressThread("global_search.repo.search_index_full", false, folder.getName()) { + + @Override + public void run() { + List indexedDetailedEntries = new ArrayList<>(); + try { + Repository repo = folder.getLocation().getRepository(); + // special indexing for Remote Repo to avoid potentially thousands of queries + if (repo instanceof RemoteRepository) { + indexRemoteFolder(indexedDetailedEntries, folder, (RemoteRepository) repo, true); + } else { + indexFolder(indexedDetailedEntries, folder, true, this); + } + addDocumentsToIndex(indexedDetailedEntries); + } catch (Exception e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.initial_index_full_error_folder", folder.getName()); + } + } + }; + pgFull.addDependency(pgFast.getID()); + pgFull.setIndeterminate(true); + pgFull.start(); + } + } + + /** + * Recursively indexes the given folder and creates documents for all entries. + * + * @param list + * the list in which to store the documents, must not be {@code null} + * @param folder + * the folder for which its entries should be indexed, must not be {@code null} + * @param indexMetaData + * if {@code true}, meta data will be indexed as well, i.e. the attributes will be stored. This is slow! + * @param pg + * the {@link ProgressThread} in which the operation takes place + * @throws RepositoryException + * if something goes wrong during repository access + */ + private void indexFolder(final List list, final Folder folder, final boolean indexMetaData, final ProgressThread pg) throws RepositoryException { + for (Folder subfolder : folder.getSubfolders()) { + if (pg.isCancelled()) { + return; + } + indexFolder(list, subfolder, indexMetaData, pg); + } + + for (DataEntry entry : folder.getDataEntries()) { + if (pg.isCancelled()) { + return; + } + list.add(createDocument(createItem(entry, indexMetaData))); + } + } + + /** + * Read all contents of the given remote repository/subfolder and store them as {@link Document}s. If that fails, logs it. + * + * @param list + * the list to add the search documents to + * @param repository + * the repository to read all contents from + * @param folder + * the subfolder which should be queried + * @param fullIndex + * if {@code true}, RM Server will be asked to create a full index result including metadata (slow); otherwise metadata is omitted + */ + private void indexRemoteFolder(final List list, final Folder folder, final RemoteRepository repository, final boolean fullIndex) { + // relative path + String path = folder.getLocation().getPath(); + if (path == null || Character.toString(RepositoryLocation.SEPARATOR).equals(path)) { + path = ""; + } + + try { + String apiPath = fullIndex ? API_REST_REMOTE_REPO_DETAILS : API_REST_REMOTE_REPO_SUMMARY; + HttpURLConnection conn = repository.getHTTPConnection(apiPath, "?subfolder=" + URLEncoder.encode(path, StandardCharsets.UTF_8.name()), true); + conn.setRequestMethod("GET"); + conn.setUseCaches(false); + conn.setAllowUserInteraction(false); + conn.setRequestProperty("Content-Type", "application/json"); + int responseCode = conn.getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_OK) { + // query worked, parse JSON to items and add to search index + String json = Tools.readTextFile(conn.getInputStream()); + RepositoryGlobalSearchItem[] repositorySearchItems = WebServiceTools.parseJsonString(json, RepositoryGlobalSearchItem[].class, false); + for (RepositoryGlobalSearchItem item : repositorySearchItems) { + // If an item has no parent, it's in the root folder. + // Because the alias is locally defined, it is not known on RM Server. Set it here. + if (item.getParent().isEmpty()) { + item.setParent(repository.getAlias()); + } + // for the same reason as above, always set the remote repository alias as repository before the absolute location + item.setLocation(RepositoryLocation.REPOSITORY_PREFIX + repository.getAlias() + item.getLocation()); + list.add(createDocument(item)); + } + } else { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.initial_index_error_remote_folder", new Object[] {repository.getName() + path, responseCode}); + } + } catch (IOException | RepositoryException e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.initial_index_error_remote_folder", new Object[] {repository.getName() + path, e.getMessage()}); + } + } + + /** + * Deletes all entries under the given location from the index. + * + * @param absoluteFolderPath + * the absolute path of a folder under which all subfolders and entries should be removed from the index + */ + private void deleteEntriesUnderLocationFromIndex(final String absoluteFolderPath) { + // delete all entries under the former parent folder + // escape our repository path syntax, it does not place nicely with Lucene + String escapedParentLocation = GlobalSearchUtilities.INSTANCE.encodeRepositoryPath(absoluteFolderPath); + // now also add a wildcard at end of path, to find all elements starting with that path + String entriesUnderFormerPath = escapedParentLocation + GlobalSearchUtilities.QUERY_WILDCARD; + + // now actually search for all elements that start with the prepared path + GlobalSearchResultBuilder builder = new GlobalSearchResultBuilder(FIELD_LOCATION + GlobalSearchUtilities.QUERY_FIELD_SPECIFIER + entriesUnderFormerPath); + builder.setMaxNumberOfResults(Integer.MAX_VALUE).setSearchCategories(GlobalSearchRegistry.INSTANCE.getSearchCategoryById(getSearchCategoryId())); + try { + GlobalSearchResult result = builder.runSearch(); + removeDocumentsFromIndex(result.getResultDocuments()); + } catch (ParseException e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.delete_index_error_folder", e); + } + } + + /** + * Creates a repository search item for the given entry. + * + * @param entry + * the repository entry for which to create the search item + * @return the item, never {@code null} + */ + private RepositoryGlobalSearchItem createItem(final Entry entry, final boolean indexMetaData) { + RepositoryGlobalSearchItem item = new RepositoryGlobalSearchItem(); + if (entry instanceof DateEntry) { + long ms = ((DateEntry) entry).getDate(); + if (ms > 0) { + item.setModified(String.valueOf(ms)); + } + } + + // See if it's an ExampleSet/Model, then try to get its attributes + if (indexMetaData && entry instanceof IOObjectEntry) { + try { + MetaData md = ((IOObjectEntry) entry).retrieveMetaData(); + ExampleSetMetaData exampleSetMetaData = null; + if (md instanceof ExampleSetMetaData) { + exampleSetMetaData = (ExampleSetMetaData) md; + } else if (md instanceof ModelMetaData) { + exampleSetMetaData = ((ModelMetaData) md).getTrainingSetMetaData(); + } + + if (exampleSetMetaData != null) { + int size = exampleSetMetaData.getAllAttributes().size(); + String[] attributes = new String[size]; + int i = 0; + for (AttributeMetaData amd : exampleSetMetaData.getAllAttributes()) { + attributes[i++] = amd.getName(); + } + + item.setAttributes(attributes); + } + } catch (RepositoryException e) { + // no metadata available, ignore + } catch (Exception e) { + // just to keep going, but log this unexpected error + LogService.getRoot().log(Level.WARNING, "com.rapidminer.repository.global_search.RepositorySearchManager.error.initial_index_error_md_reading", e); + } + } + + // generic fields + item.setType(entry.getType()).setParent(entry.getContainingFolder().getName()).setOwner(entry.getOwner()).setName(entry.getName()).setLocation(entry.getLocation().getAbsoluteLocation()); + return item; + } + + + /** + * Creates a repository search document only for deletion. Does not need to know as many things as documents for searching. + * + * @param location + * the absolute repository location of the item to delete + * @param name + * the name of the item to delete + * @return the document, never {@code null} + */ + private Document createDocumentForDeletion(final String location, final String name) { + return GlobalSearchUtilities.INSTANCE.createDocument(location, name); + } + + /** + * Creates a repository search document for the given {@link RepositoryGlobalSearchItem}. + * + * @param item + * the repository search item for which to create the search document + * @return the document, never {@code null} + */ + private Document createDocument(final RepositoryGlobalSearchItem item) { + List fields = new ArrayList<>(); + String modified = item.getModified(); + if (modified != null && !modified.trim().isEmpty()) { + long ms = Long.parseLong(modified); + if (ms > 0) { + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForDateValues(FIELD_MODIFIED, ms)); + + // also sort by last modified, to return last edited things first + fields.add(GlobalSearchUtilities.INSTANCE.createSortingField(ms)); + } + } + + // See if it's an ExampleSet/Model, then try to get its attributes + String[] attributes = item.getAttributes(); + if (attributes != null && attributes.length > 0) { + StringBuilder sb = new StringBuilder(); + for (String attributeName : attributes) { + sb.append(attributeName); + sb.append(' '); + + } + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForTexts(FIELD_ATTRIBUTE, sb.toString())); + } + + // generic fields + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForIdentifiers(FIELD_TYPE, item.getType())); + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForTexts(FIELD_PARENT, item.getParent())); + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForTexts(FIELD_LOCATION, GlobalSearchUtilities.INSTANCE.encodeRepositoryPath(item.getLocation()))); + if (item.getOwner() != null) { + fields.add(GlobalSearchUtilities.INSTANCE.createFieldForIdentifiers(FIELD_USER, item.getOwner())); + } + // absolute repository location is the unique ID for the repository category + return GlobalSearchUtilities.INSTANCE.createDocument(item.getLocation(), item.getName(), fields.toArray(new Field[fields.size()])); + } + +} diff --git a/src/main/java/com/rapidminer/search/AbstractGlobalSearchManager.java b/src/main/java/com/rapidminer/search/AbstractGlobalSearchManager.java new file mode 100644 index 000000000..872323965 --- /dev/null +++ b/src/main/java/com/rapidminer/search/AbstractGlobalSearchManager.java @@ -0,0 +1,307 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; + +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; + +import com.rapidminer.gui.tools.ProgressThread; +import com.rapidminer.search.event.GlobalSearchManagerEventHandler; +import com.rapidminer.tools.LogService; + + +/** + * Takes care of basic functionality that is always identical for Global Search managers. + * Any {@link GlobalSearchManager} implementation should extend this class instead of implementing the interface directly. + *

+ * After {@link #init()} has happened, additional documents can be added/updated/removed at any time via + *

    + *
  • {@link #addDocumentToIndex(Document)}
  • + *
  • {@link #addDocumentsToIndex(List)}
  • + *
  • {@link #removeDocumentFromIndex(Document)}
  • + *
  • {@link #removeDocumentsFromIndex(List)}
  • + *
+ *

+ *

+ *

How should {@link Document}s be constructed?

+ * Most of the things are taken care of automatically, but to actually add content that can be searched, you need to follow the steps below: + *
    + *
  1. Create {@link Field}s that should contain the searchable content, use the utility functions in the {@link GlobalSearchUtilities} class, e.g. {@link GlobalSearchUtilities#createFieldForTexts(String, String)}
  2. + *
  3. Optional: If you want your results to be sorted in a given way, add the field created via {@link GlobalSearchUtilities#createSortingField(long)} to the document
  4. + *
  5. Call {@link GlobalSearchUtilities#createDocument(String, String, Field...)} and pass the fields you created
  6. + *
+ *

+ * + * @author Marco Boeck + * @since 8.1 + */ +public abstract class AbstractGlobalSearchManager implements GlobalSearchManager { + + private final GlobalSearchManagerEventHandler eventHandler; + + private final Collection addedDocuments; + private final Collection removedDocuments; + + private final AtomicBoolean initialized; + + private final String categoryId; + private final Map additionalFieldDescriptions; + private final Collection additionalDefaultSearchFields; + + + /** + * Creates the abstract global search manager which implements a lot of basic functionality required for every manager. + * + * @param categoryId + * the search category Id which was used to register to the {@link GlobalSearchRegistry} + * @param additionalFieldDescriptions + * see {@link GlobalSearchManager#getAdditionalFieldDescriptions()}. Can be {@code null} if no additional fields are created. + * @param additionalDefaultSearchFields + * see {@link GlobalSearchManager#getAdditionalDefaultSearchFields()}. Can be {@code null} for no additional default search fields. + */ + protected AbstractGlobalSearchManager(String categoryId, Map additionalFieldDescriptions, GlobalSearchDefaultField... additionalDefaultSearchFields) { + if (categoryId == null || categoryId.trim().isEmpty()) { + throw new IllegalArgumentException("categoryId must not be null or empty!"); + } + + this.categoryId = categoryId; + this.additionalFieldDescriptions = additionalFieldDescriptions; + this.additionalDefaultSearchFields = additionalDefaultSearchFields != null ? Collections.unmodifiableList(Arrays.asList(additionalDefaultSearchFields)) : Collections.emptyList(); + + initialized = new AtomicBoolean(false); + + eventHandler = new GlobalSearchManagerEventHandler(categoryId); + + addedDocuments = Collections.synchronizedList(new ArrayList<>()); + removedDocuments = Collections.synchronizedList(new ArrayList<>()); + + } + + /** + * Remove the {@link Document}s which were set in class variable removedDocuments before. + */ + private void removeDocuments() { + List copyRemovedDocuments; + synchronized (removedDocuments) { + copyRemovedDocuments = new ArrayList<>(removedDocuments); + removedDocuments.clear(); + } + + if (!copyRemovedDocuments.isEmpty()) { + getSearchManagerEventHandler().fireDocumentsRemoved(copyRemovedDocuments); + } + } + + /** + * Add {@link Document}s which were set in the addedDocuments class variable before. + */ + private void addDocuments() { + List copyAddedDocuments; + synchronized (addedDocuments) { + copyAddedDocuments = new ArrayList<>(addedDocuments); + addedDocuments.clear(); + } + + if (!copyAddedDocuments.isEmpty()) { + // we always update instead of just adding so that new info for same location is stored + getSearchManagerEventHandler().fireDocumentsUpdated(copyAddedDocuments); + } + } + + /** + * Initializes this Global Search manager. Calling multiple times has no additional effect after the first time. + */ + @Override + public final void initialize() { + if (!initialized.get()) { + try { + init(); + + addDocuments(); + removeDocuments(); + // no error? Set initialized + initialized.set(true); + } catch (Exception e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.search.AbstractGlobalSearchManager.error.init", e); + } + + // do the fast indexing in a progress thread + ProgressThread pg = new ProgressThread("global_search.manager.init_index." + getSearchCategoryId()) { + @Override + public void run() { + try { + List initialDocuments = createInitialIndex(this); + + // add initial documents. + getSearchManagerEventHandler().fireDocumentsUpdated(initialDocuments); + } catch (Exception e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.search.AbstractGlobalSearchManager.error.init", e); + } finally { + getProgressListener().complete(); + } + } + }; + pg.start(); + } + } + + @Override + public boolean isInitialized() { + return initialized.get(); + } + + @Override + public String getSearchCategoryId() { + return categoryId; + } + + @Override + public Map getAdditionalFieldDescriptions() { + return additionalFieldDescriptions; + } + + @Override + public Collection getAdditionalDefaultSearchFields() { + return additionalDefaultSearchFields; + } + + @Override + public GlobalSearchManagerEventHandler getSearchManagerEventHandler() { + return eventHandler; + } + + /** + * Adds the given document to/Updates the given document on the index. + *

+ * Will not fire until {@link #init()} is done. + *

+ * + * @param toAdd + * the document to add to the index + */ + protected void addDocumentToIndex(final Document toAdd) { + if (toAdd == null) { + throw new IllegalArgumentException("toAdd must not be null!"); + } + + addedDocuments.add(toAdd); + + // only fire once init is done + if (initialized.get()) { + addDocuments(); + } + } + + /** + * Adds the given documents to/Updates the given documents on the index. + *

+ * Will not fire until {@link #init()} is done. + *

+ * + * @param toAdd + * the documents to add to the index + */ + protected void addDocumentsToIndex(final List toAdd) { + if (toAdd == null) { + throw new IllegalArgumentException("toAdd must not be null!"); + } + + addedDocuments.addAll(toAdd); + + // only fire once init is done + if (initialized.get()) { + addDocuments(); + } + } + + /** + * Deletes the given document from the index. + *

+ * Will not fire until {@link #init()} is done. + *

+ * + * @param toDelete + * the document to remove from the index + */ + protected void removeDocumentFromIndex(final Document toDelete) { + if (toDelete == null) { + throw new IllegalArgumentException("toDelete must not be null!"); + } + + removedDocuments.add(toDelete); + + // only fire once init is done + if (initialized.get()) { + removeDocuments(); + } + } + + /** + * Deletes the given documents from the index. + *

+ * Will not fire until {@link #init()} is done. + *

+ * + * @param toDelete + * the documents to remove from the index + */ + protected void removeDocumentsFromIndex(final List toDelete) { + if (toDelete == null) { + throw new IllegalArgumentException("toDelete must not be null!"); + } + + removedDocuments.addAll(toDelete); + + // only fire once init is done + if (initialized.get()) { + removeDocuments(); + } + } + + /** + * Put all the initialization here. This method should return fast to not block Studio start. See {@link #createInitialIndex(ProgressThread)} for a place to put initial search indexing. + */ + protected abstract void init(); + + /** + * Put all the quick (!) initial indexing here. This method should return fast so that the user can search as soon as possible. + * If you need more expensive indexing, use {@link ProgressThread}s and call {@link #addDocumentsToIndex(List)} later. + *

+ * Called in a {@link com.rapidminer.gui.tools.ProgressThread}. When running in GUI mode, the i18n key that is used is {@code gui.progress.global_search.manager.init_index.{category_id}.label} + *

+ *

+ * Any error handling needs to be done internally. This is not expected to throw. + *

+ * + * @param progressThread + * this can be used to call {@link ProgressThread#checkCancelled()} to check for user stop request + * and to notify Studio about the progress of the initialization via {@link ProgressThread#getProgressListener()}. + * @return any documents that should be part of the Global Search index straight from the beginning. It is valid that the returned list is empty. + */ + protected abstract List createInitialIndex(final ProgressThread progressThread); +} diff --git a/src/main/java/com/rapidminer/search/GlobalSearchCategory.java b/src/main/java/com/rapidminer/search/GlobalSearchCategory.java new file mode 100644 index 000000000..28a52b782 --- /dev/null +++ b/src/main/java/com/rapidminer/search/GlobalSearchCategory.java @@ -0,0 +1,75 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +/** + * A search category pojo. Contains only the manager instance and the category id. + * + * @author Marco Boeck + * @since 8.1 + */ +public class GlobalSearchCategory { + + private final String categoryId; + + private final GlobalSearchManager manager; + + + GlobalSearchCategory(String categoryId, GlobalSearchManager manager) { + this.categoryId = categoryId; + this.manager = manager; + } + + /** + * The manager instance. + * + * @return the instance, never {@code null} + */ + public GlobalSearchManager getManager() { + return manager; + } + + /** + * The unique id of the category. + * + * @return the id, never {@code null} + */ + public String getCategoryId() { + return categoryId; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + GlobalSearchCategory that = (GlobalSearchCategory) o; + + return categoryId.equals(that.categoryId); + } + + @Override + public int hashCode() { + return categoryId.hashCode(); + } +} diff --git a/src/main/java/com/rapidminer/search/GlobalSearchDefaultField.java b/src/main/java/com/rapidminer/search/GlobalSearchDefaultField.java new file mode 100644 index 000000000..bc89e5381 --- /dev/null +++ b/src/main/java/com/rapidminer/search/GlobalSearchDefaultField.java @@ -0,0 +1,74 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +/** + * Simple POJO class that holds both the name and their relative boost of the additional fields that should be searched for a {@link GlobalSearchManager}. + *

+ * Note that the higher the boost difference, the more hits of the higher boosted field are favored, i.e. ranked higher. + * The {@link GlobalSearchUtilities#FIELD_NAME} has a boost of {@code 1f}. + *

+ * + * @author Marco Boeck + * @since 8.1 + */ +public final class GlobalSearchDefaultField { + + private final String name; + private final float boost; + + + /** + * Creates a new POJO with the given values. + * + * @param name + * the name of the {@link org.apache.lucene.document.Field} that should be searched by default + * @param boost + * the relative boost of the field. See {@link GlobalSearchUtilities#DEFAULT_OTHER_FIELD_BOOST} for the default value for fields that are not the name field + */ + public GlobalSearchDefaultField(final String name, final float boost) { + if (name == null || name.trim().isEmpty()) { + throw new IllegalArgumentException("name must not be null or empty!"); + } + + this.name = name; + this.boost = boost; + } + + /** + * Returns the field name. + * + * @return the name, never {@code null} + */ + public String getName() { + return name; + } + + /** + * Returns the boost of the field. + *

+ * Note that the higher the boost difference, the more hits of the higher boosted field are favored, i.e. ranked higher. The {@link GlobalSearchUtilities#FIELD_NAME} has a boost of {@code 1f}. + *

+ * + * @return the boost + */ + public float getBoost() { + return boost; + } +} diff --git a/src/main/java/com/rapidminer/search/GlobalSearchHandler.java b/src/main/java/com/rapidminer/search/GlobalSearchHandler.java new file mode 100644 index 000000000..56a35f93d --- /dev/null +++ b/src/main/java/com/rapidminer/search/GlobalSearchHandler.java @@ -0,0 +1,364 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.logging.Level; +import java.util.stream.Collectors; + +import org.apache.lucene.analysis.TokenStream; +import org.apache.lucene.document.DateTools; +import org.apache.lucene.document.Document; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.queryparser.classic.ParseException; +import org.apache.lucene.queryparser.classic.QueryParser; +import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.BooleanQuery; +import org.apache.lucene.search.BoostQuery; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.ScoreDoc; +import org.apache.lucene.search.Sort; +import org.apache.lucene.search.SortField; +import org.apache.lucene.search.SortedNumericSortField; +import org.apache.lucene.search.TopDocs; +import org.apache.lucene.search.highlight.Formatter; +import org.apache.lucene.search.highlight.Fragmenter; +import org.apache.lucene.search.highlight.Highlighter; +import org.apache.lucene.search.highlight.InvalidTokenOffsetsException; +import org.apache.lucene.search.highlight.QueryScorer; +import org.apache.lucene.search.highlight.SimpleHTMLFormatter; +import org.apache.lucene.search.highlight.SimpleSpanFragmenter; +import org.apache.lucene.search.highlight.TokenSources; + +import com.rapidminer.tools.LogService; + + +/** + * The class to run search queries for the Global Search feature against. Use the {@link GlobalSearchResultBuilder} to setup the + * search and then run it via {@link GlobalSearchResultBuilder#runSearch()}. + *

+ * To register a {@link GlobalSearchable} and thus make it available for searching, use {@link GlobalSearchRegistry#registerSearchCategory(GlobalSearchable)}. + *

+ * + * @author Marco Boeck + * @since 8.1 + */ +enum GlobalSearchHandler { + + INSTANCE; + + + /** + * name of the {@link org.apache.lucene.document.StringField} each document gets added which is unique across the + * entire application. + */ + protected static final String FIELD_INTERNAL_UNIQUE_ID = "internal_unique_id"; + + private static final Formatter HIGHLIGHT_FORMATTER = new SimpleHTMLFormatter("", ""); + private static final int MAX_NUMBER_OF_FRAGMENTS = 5; + private static final int FRAGMENT_SIZE = 10; + + /** + * special characters/sequences: if they occur in a query, advanced functionality was used and we cannot simplify the query anymore + */ + private static final String[] SPECIAL_CHARACTERS = new String[]{GlobalSearchUtilities.QUERY_WILDCARD, "AND", "OR", "NOT", "+", "-", "&&", "||", "!", "(", ")", "{", "}", "[", "]", "^", "\"", "~", "?", "\\"}; + + private static final Sort SORT = new Sort(new SortedNumericSortField(GlobalSearchUtilities.FIELD_SORTING, SortField.Type.LONG, true), SortField.FIELD_SCORE); + private static final GlobalSearchDefaultField DEFAULT_SEARCH_FIELD = new GlobalSearchDefaultField(GlobalSearchUtilities.FIELD_NAME, GlobalSearchUtilities.DEFAULT_NAME_FIELD_BOOST); + + + /** + * Executes the search with the given parameters. + * + * @param searchQueryString + * the search query string, must neither be {@code null} nor empty + * @param categories + * Optional. If {@code null} or not specified, all registered search categories are included in the + * search. + * @param simpleMode + * if {@code true}, will try to make the query automatically user-friendly; {@code false} will not make any changes to the query + * @param maxNumberOfResults + * the maximum number of results + * @param highlightResult + * if {@code true}, the {@link GlobalSearchResult#getBestFragments()} will be created + * @param after + * Optional. If not {@code null}, then the search results are retrieved from ranks lower than the given + * {@link ScoreDoc}. + * @return the search result, never {@code null} + * @throws ParseException + * if the searchQuery was invalid + */ + protected GlobalSearchResult search(final String searchQueryString, final List categories, final boolean simpleMode, final int maxNumberOfResults, final boolean highlightResult, final ScoreDoc after) throws ParseException { + if (searchQueryString == null || searchQueryString.trim().isEmpty()) { + return GlobalSearchResult.createEmptyResult(searchQueryString); + } + // build the query based on the default search fields, which can be specified in the search string anyway though + try (IndexReader reader = GlobalSearchIndexer.INSTANCE.createIndexReader()) { + IndexSearcher searcher = new IndexSearcher(reader); + TopDocs result; + Query finalQuery; + + Query parsedQuery = parseDefaultQuery(searchQueryString, categories, simpleMode); + if (categories == null) { + finalQuery = parsedQuery; + } else { + // categories are restricted, create query for that and combine with original query via AND + BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder(); + Query categoryQuery = createCategoryQuery(categories); + finalQuery = booleanQueryBuilder.add(parsedQuery, BooleanClause.Occur.MUST).add(categoryQuery, BooleanClause.Occur.MUST).build(); + } + + // sort by the sort field, if provided + if (after == null) { + result = searcher.search(finalQuery, maxNumberOfResults, SORT, true, false); + } else { + result = searcher.searchAfter(after, finalQuery, maxNumberOfResults, SORT, true, false); + } + + return createSearchResult(searchQueryString, parsedQuery, searcher, result, highlightResult); + } catch (ParseException e) { + // re-throw parse exceptions + throw e; + } catch (Exception e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.global_search.searchhandler.search_failed", e); + return GlobalSearchResult.createEmptyResult(searchQueryString); + } + } + + + /** + * Parses the given search query for the given search categories and returns a {@link Query} object. + * + * @param searchString + * the search query string, must not be {@code null} or empty + * @param searchCategories + * the search categories to search in. If {@code null}, all search categories are searched + * @param simpleMode + * if {@code true}, will try to make the query automatically user-friendly (e.g. by adding wildcards after words, etc); {@code false} will not make any changes to the query. + * Note that if a simplified query cannot be parsed, the original (non-simplified) query will be created. + * @return the query, never {@code null} + * @throws ParseException + * if the search string cannot be parsed + */ + private Query parseDefaultQuery(final String searchString, final List searchCategories, final boolean simpleMode) throws ParseException { + String newSearchString = searchString; + + // can the query be simplified? If so, do it + boolean simplified = false; + if (simpleMode) { + StringBuilder result = new StringBuilder(); + simplified = simplifySearchString(searchString, result); + newSearchString = result.toString(); + } + + Collection fieldSet = new HashSet<>(); + + fieldSet.add(DEFAULT_SEARCH_FIELD); + // get all fields which should be queried in addition to the default name field + List categoryList = searchCategories; + if (categoryList == null) { + categoryList = GlobalSearchRegistry.INSTANCE.getAllSearchCategories(); + } + + for (GlobalSearchCategory category : categoryList) { + fieldSet.addAll(category.getManager().getAdditionalDefaultSearchFields()); + } + + try { + // if we have one query, then just return it, otherwise it was a multi-field query, construct Boolean query for them + // we don't use MultiFieldQueryParser here because that cannot be boosted for our PrefixQueries + List queries = buildSubQueries(newSearchString, fieldSet, simpleMode); + if (queries.size() == 1) { + return queries.get(0); + } else { + BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder(); + for (Query query : queries) { + booleanQueryBuilder.add(query, BooleanClause.Occur.SHOULD); + } + return booleanQueryBuilder.build(); + } + } catch (ParseException e) { + // if we modified the query and then a ParseException occurs, try original query + if (simplified) { + return parseDefaultQuery(searchString, categoryList, false); + } else { + throw e; + } + } + } + + /** + * Try to simplify the search string (i.e. append wildcards etc). + * + * @param searchString + * the original search string + * @param result + * the builder that will contain the final search string, either simplified or not + * @return {@code true} if the search string was simplified; {@code false} otherwise + */ + private boolean simplifySearchString(String searchString, StringBuilder result) { + boolean wildcardAppendForEveryWordPossible = true; + + // special characters used? Cannot simplify at all now. + for (String specialCharacter : SPECIAL_CHARACTERS) { + if (searchString.contains(specialCharacter)) { + wildcardAppendForEveryWordPossible = false; + break; + } + } + + if (!wildcardAppendForEveryWordPossible) { + // no simplification possible, return original search term + result.append(searchString); + return false; + } + + // can append wildcard to every word that was searched (special case for ':' applies, see below) + for (String word : searchString.split("\\s+")) { + result.append(word); + + // this is a specific field that was searched, cannot append wildcard behind the field specifier -> skip + if (word.endsWith(GlobalSearchUtilities.QUERY_FIELD_SPECIFIER)) { + continue; + } + + // add wildcard at end of word + result.append(GlobalSearchUtilities.QUERY_WILDCARD); + + result.append(' '); + } + // remove last whitespace again + result.deleteCharAt(result.length() - 1); + + return true; + } + + /** + * Builds the individual sub queries based on the given fields that should be searched. + * + * @param searchString + * the search term + * @param fieldSet + * the collection of fields that should be searched + * @param simpleMode + * if {@code true}, will boost the query for the name field and additional fields according to their weight;{@code false} will not boost any query. + * @throws ParseException + * if the search string cannot be parsed + */ + private List buildSubQueries(final String searchString, final Collection fieldSet, final boolean simpleMode) throws ParseException { + // create queries for each field. Always at least the NAME_FIELD + QueryParser parser; + List queries = new ArrayList<>(fieldSet.size()); + for (GlobalSearchDefaultField field : fieldSet) { + String name = field.getName(); + + parser = new QueryParser(name, GlobalSearchUtilities.ANALYZER); + parser.setDateResolution(DateTools.Resolution.DAY); + parser.setAllowLeadingWildcard(true); + parser.setDefaultOperator(QueryParser.Operator.AND); + + Query parsedQuery = parser.parse(searchString); + Query query; + // in simple mode, boost search for default name field. Set lower boost to additional fields + if (simpleMode) { + float boost; + if (GlobalSearchUtilities.FIELD_NAME.equals(name)) { + boost = GlobalSearchUtilities.DEFAULT_NAME_FIELD_BOOST; + } else { + boost = field.getBoost(); + } + query = new BoostQuery(parsedQuery, boost); + } else { + query = parsedQuery; + } + + queries.add(query); + } + + return queries; + } + + /** + * Creates the query for searching in the given {@link GlobalSearchCategory}s and returns the {@link Query} object. + * + * @param categories + * the search categories which are to be included in the search. Must not be {@code null} + * @return the query, never {@code null} + * @throws ParseException + * if the search string cannot be parsed + */ + private Query createCategoryQuery(final List categories) throws ParseException { + // simply create "cat1 cat2 ... catN" string which is all that is needed for an OR search on the category field + String categoryQueryString = categories.stream().map(GlobalSearchCategory::getCategoryId).collect(Collectors.joining(" ")); + + QueryParser parser = new QueryParser(GlobalSearchUtilities.FIELD_CATEGORY, GlobalSearchUtilities.ANALYZER); + return parser.parse(categoryQueryString); + } + + /** + * Creates the search result for search methods. + * + * @param searchTerm + * the search string + * @param searcher + * the index searcher instance which was used to search + * @param result + * the result of the search + * @param highlightResult + * if {@code true}, the {@link GlobalSearchResult#getBestFragments()} will be created + * @return the search result instance, never {@code null} + * @throws IOException + * if something goes wrong + */ + private GlobalSearchResult createSearchResult(final String searchTerm, final Query parsedQuery, final IndexSearcher searcher, final TopDocs result, final boolean highlightResult) throws IOException { + int resultNumber = result.scoreDocs.length; + List resultList = new ArrayList<>(resultNumber); + List highlights = highlightResult ? new LinkedList<>() : null; + ScoreDoc lastResult = resultNumber > 0 ? result.scoreDocs[result.scoreDocs.length - 1] : null; + for (ScoreDoc scoreDoc : result.scoreDocs) { + Document doc = searcher.doc(scoreDoc.doc); + resultList.add(doc); + + if (highlightResult) { + // search result highlighting best match on name field + QueryScorer scorer = new QueryScorer(parsedQuery); + Highlighter highlighter = new Highlighter(HIGHLIGHT_FORMATTER, scorer); + Fragmenter fragmenter = new SimpleSpanFragmenter(scorer, FRAGMENT_SIZE); + highlighter.setTextFragmenter(fragmenter); + try { + TokenStream stream = TokenSources.getTokenStream(GlobalSearchUtilities.FIELD_NAME, searcher.getIndexReader().getTermVectors(scoreDoc.doc), doc.get(GlobalSearchUtilities.FIELD_NAME), GlobalSearchUtilities.ANALYZER, Highlighter.DEFAULT_MAX_CHARS_TO_ANALYZE - 1); + if (stream != null) { + highlights.add(highlighter.getBestFragments(stream, doc.get(GlobalSearchUtilities.FIELD_NAME), MAX_NUMBER_OF_FRAGMENTS)); + } else { + highlights.add(null); + } + } catch (InvalidTokenOffsetsException e) { + highlights.add(null); + } + } + } + return new GlobalSearchResult(resultList, searchTerm, lastResult, result.totalHits, highlights); + } +} diff --git a/src/main/java/com/rapidminer/search/GlobalSearchIndexer.java b/src/main/java/com/rapidminer/search/GlobalSearchIndexer.java new file mode 100644 index 000000000..bdde767be --- /dev/null +++ b/src/main/java/com/rapidminer/search/GlobalSearchIndexer.java @@ -0,0 +1,354 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collection; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; + +import org.apache.commons.io.FileUtils; +import org.apache.lucene.document.Document; +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.IndexableField; +import org.apache.lucene.index.Term; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.FSDirectory; + +import com.rapidminer.search.event.GlobalSearchManagerListener; +import com.rapidminer.search.event.GlobalSearchRegistryEvent; +import com.rapidminer.tools.FileSystemService; +import com.rapidminer.tools.LogService; + + +/** + * Takes care of preparing the Global Search index. + * + * @author Marco Boeck + * @since 8.1 + */ +public enum GlobalSearchIndexer { + + INSTANCE; + + + private Path indexDirectoryPath; + + private final ExecutorService pool = Executors.newFixedThreadPool(2); + + private volatile boolean setupError = false; + + private final AtomicBoolean initialized = new AtomicBoolean(false); + + private IndexWriter indexWriter; + + /** this listener makes sure that updates to each GlobalSearchable are reflected in the index */ + private final GlobalSearchManagerListener searchManagerListener = new GlobalSearchManagerListener() { + + @Override + public void documentsAdded(final String categoryId, final Collection addedDocuments) { + GlobalSearchCategory category = GlobalSearchRegistry.INSTANCE.getSearchCategoryById(categoryId); + if (category != null) { + pool.submit(() -> addDocuments(category, addedDocuments)); + } + } + + @Override + public void documentsUpdated(final String categoryId, final Collection updatedDocuments) { + GlobalSearchCategory category = GlobalSearchRegistry.INSTANCE.getSearchCategoryById(categoryId); + if (category != null) { + pool.submit(() -> updateDocuments(category, updatedDocuments)); + } + } + + @Override + public void documentsRemoved(final String categoryId, final Collection removedDocuments) { + GlobalSearchCategory category = GlobalSearchRegistry.INSTANCE.getSearchCategoryById(categoryId); + if (category != null) { + pool.submit(() -> removeDocuments(category, removedDocuments)); + } + } + }; + + + /** + * Sets up the search indexer instance. Registers a listener to the {@link GlobalSearchRegistry} to be able to add/remove + * documents to/from the index in case search categories are (un)registered. + */ + GlobalSearchIndexer() { + try { + indexDirectoryPath = FileSystemService.getUserRapidMinerDir().toPath().resolve(FileSystemService.RAPIDMINER_INTERNAL_CACHE_SEARCH_FULL); + + // set up of Lucene is done in initialize() + } catch (Exception e) { + setupError = true; + LogService.getRoot().log(Level.SEVERE, "com.rapidminer.global_search.searchindexer.setup_failed", e); + } + } + + /** + * Initializes the {@link GlobalSearchIndexer}. Calling multiple times has no effect. + */ + public void initialize() { + if (!initialized.get()) { + if (setupError) { + // should not happen at this point, but better be safe + return; + } + + // create the single index writer + try { + indexWriter = createIndexWriter(); + } catch (Exception e) { + // could not open the index. Try deleting the cache + LogService.getRoot().log(Level.INFO, "com.rapidminer.global_search.searchindexer.setup_self_fix_start", e); + boolean fixed = fixIndexCacheFolder(); + + if (fixed) { + LogService.getRoot().log(Level.INFO, "com.rapidminer.global_search.searchindexer.setup_self_fix_success"); + } else { + // nothing worked, cannot setup Global Search + setupError = true; + LogService.getRoot().log(Level.SEVERE, "com.rapidminer.global_search.searchindexer.setup_failed", e); + return; + } + } + + // add registry listener. If there is a setup error, we do not even get here + GlobalSearchRegistry.INSTANCE.addEventListener((GlobalSearchRegistryEvent e, GlobalSearchCategory category) -> { + // new registrations after initial indexing has been started/done + if (e.getEventType() == GlobalSearchRegistryEvent.RegistrationEvent.SEARCH_CATEGORY_REGISTERED) { + category.getManager().getSearchManagerEventHandler().addEventListener(searchManagerListener); + } else if (e.getEventType() == GlobalSearchRegistryEvent.RegistrationEvent.SEARCH_CATEGORY_UNREGISTERED) { + category.getManager().getSearchManagerEventHandler().removeEventListener(searchManagerListener); + removeCategory(category); + } + }); + + initialized.set(true); + } + } + + /** + * Returns whether the GlobalSearchIndexer was setup successfully. + * + * @return {@code true} if everything is ready; {@code false} otherwise + */ + public boolean isInitialized() { + return !setupError && initialized.get(); + } + + /** + * Removes all documents of a search category from the index. + * + * @param category + * the category for which all documents should be removed + */ + private void removeCategory(final GlobalSearchCategory category) { + try { + Term categoryToDeleteTerm = new Term(GlobalSearchUtilities.FIELD_CATEGORY, category.getCategoryId()); + indexWriter.deleteDocuments(categoryToDeleteTerm); + } catch (IOException e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.global_search.searchindexer.remove_failed", new Object[]{category.getCategoryId(), e.getMessage()}); + } + } + + /** + * Add the given documents to the index. + * + * @param category + * the origin of the search documents + * @param documents + * the documents to add to the index + */ + private void addDocuments(final GlobalSearchCategory category, final Collection documents) { + for (Document doc : documents) { + // make sure doc has necessary fields + if (!isDocValid(category.getCategoryId(), doc)) { + continue; + } + // store category id to make searching only for specific categories possible + doc.add(GlobalSearchUtilities.INSTANCE.createFieldForIdentifiers(GlobalSearchUtilities.FIELD_CATEGORY, category.getCategoryId())); + doc.add(GlobalSearchUtilities.INSTANCE.createFieldForIdentifiers(GlobalSearchHandler.FIELD_INTERNAL_UNIQUE_ID, createInternalId(category.getCategoryId(), doc))); + } + + try { + indexWriter.addDocuments(documents); + } catch (Exception e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.global_search.searchindexer.add_failed", new Object[] { category.getCategoryId(), e.getMessage() }); + } + } + + + /** + * Updates the documents for the given search category. Call this method if new documents/updated documents should + * be made available to the Global Search. + * + * @param category + * the search category. Must already be registered to the {@link GlobalSearchRegistry}. + * @param documents + * the documents to update on the index + * @throws IllegalStateException + * if the search category is not registered to the {@link GlobalSearchRegistry} + */ + private void updateDocuments(final GlobalSearchCategory category, final Collection documents) { + for (Document doc : documents) { + // make sure doc has necessary fields + if (!isDocValid(category.getCategoryId(), doc)) { + continue; + } + + // store category id to make searching only for specific categories possible + doc.add(GlobalSearchUtilities.INSTANCE.createFieldForIdentifiers(GlobalSearchUtilities.FIELD_CATEGORY, category.getCategoryId())); + doc.add(GlobalSearchUtilities.INSTANCE.createFieldForIdentifiers(GlobalSearchHandler.FIELD_INTERNAL_UNIQUE_ID, createInternalId(category.getCategoryId(), doc))); + + IndexableField field = doc.getField(GlobalSearchHandler.FIELD_INTERNAL_UNIQUE_ID); + Term termToUpdate = new Term(field.name(), field.stringValue()); + try { + indexWriter.updateDocument(termToUpdate, doc); + } catch (Exception e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.global_search.searchindexer.update_failed", new Object[]{category.getCategoryId(), e.getMessage()}); + } + } + } + + /** + * Removes all documents for the given search category from the index. + * + * @param category + * the origin of the search documents + * @param documents + * the documents to remove from the index + */ + private void removeDocuments(final GlobalSearchCategory category, final Collection documents) { + Term[] termsToDelete = new Term[documents.size()]; + int index = 0; + // these docs will likely not have the internal unique id set -> set it if needed + for (Document doc : documents) { + IndexableField field = doc.getField(GlobalSearchHandler.FIELD_INTERNAL_UNIQUE_ID); + if (field != null) { + termsToDelete[index++] = new Term(GlobalSearchHandler.FIELD_INTERNAL_UNIQUE_ID, field.stringValue()); + } else { + termsToDelete[index++] = new Term(GlobalSearchHandler.FIELD_INTERNAL_UNIQUE_ID, createInternalId(category.getCategoryId(), doc)); + } + } + + try { + indexWriter.deleteDocuments(termsToDelete); + } catch (Exception e) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.global_search.searchindexer.remove_failed", new Object[] { category.getCategoryId(), e.getMessage() }); + } + } + + /** + * Create the internal, application-unique id. + * + * @param categoryId + * the category id of the document + * @param document + * the document for which to generate the id + * @return the unique id + */ + private String createInternalId(final String categoryId, final Document document) { + String uniqueId = document.getField(GlobalSearchUtilities.FIELD_UNIQUE_ID).stringValue(); + return categoryId + "_" + uniqueId; + } + + /** + * Checks if the given {@link Document} adheres to the standards the Global Search needs. Logs if it is not. + * + * @param doc + * the document to check + * @return {@code true} if the document is considered valid; {@code false} otherwise + */ + private boolean isDocValid(final String categoryId, final Document doc) { + if (doc.getField(GlobalSearchUtilities.FIELD_UNIQUE_ID) == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.global_search.searchindexer.discarded_document_missing_field", + new Object[]{ categoryId, GlobalSearchUtilities.FIELD_UNIQUE_ID} ); + return false; + } + if (doc.getField(GlobalSearchUtilities.FIELD_NAME) == null) { + LogService.getRoot().log(Level.WARNING, "com.rapidminer.global_search.searchindexer.discarded_document_missing_field", + new Object[]{ categoryId, GlobalSearchUtilities.FIELD_NAME} ); + return false; + } + + return true; + } + + /** + * Tries to fix the index folder by deleting it and all its content. + * @return {@code true} if the fix was successful, {@code false} otherwise + */ + private boolean fixIndexCacheFolder() { + if (indexDirectoryPath != null && Files.exists(indexDirectoryPath)) { + try { + if (Files.isDirectory(indexDirectoryPath)) { + FileUtils.deleteDirectory(indexDirectoryPath.toFile()); + } else { + // this should not happen, but in case it does, delete the file + Files.delete(indexDirectoryPath); + } + + // a fix was applied, now try if we can use the index + indexWriter = createIndexWriter(); + + // all good, we fixed it! + return true; + } catch (Exception e) { + LogService.getRoot().log(Level.SEVERE, "com.rapidminer.global_search.searchindexer.setup_self_fix_failed", e); + } + } + + return false; + } + + /** + * Creates an instance of {@link IndexWriter}. + * + * @return the writer, never {@code null} + * @throws IOException + * if something goes wrong + */ + private IndexWriter createIndexWriter() throws IOException { + Directory dir = FSDirectory.open(indexDirectoryPath); + IndexWriterConfig config = new IndexWriterConfig(GlobalSearchUtilities.ANALYZER); + config.setOpenMode(IndexWriterConfig.OpenMode.CREATE); + return new IndexWriter(dir, config); + } + + /** + * Creates an instance of {@link IndexReader}. + * + * @return the reader, never {@code null} + * @throws IOException + * if something goes wrong + */ + protected IndexReader createIndexReader() throws IOException { + return DirectoryReader.open(indexWriter, true, false); + } + +} diff --git a/src/main/java/com/rapidminer/search/GlobalSearchManager.java b/src/main/java/com/rapidminer/search/GlobalSearchManager.java new file mode 100644 index 000000000..3206d0938 --- /dev/null +++ b/src/main/java/com/rapidminer/search/GlobalSearchManager.java @@ -0,0 +1,92 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.util.Collection; +import java.util.Map; + +import org.apache.lucene.document.Document; + +import com.rapidminer.search.event.GlobalSearchManagerEventHandler; + + +/** + * Manages the search functionality for {@link GlobalSearchable} things. + * Any implementation should extend {@link AbstractGlobalSearchManager} instead of implementing this interface directly. + * + * @author Marco Boeck + * @since 8.1 + */ +public interface GlobalSearchManager { + + /** + * Init code goes here. Must be explicitly called, as it is not called automatically. + */ + void initialize(); + + /** + * Returns whether this manager has finished initialization. + * + * @return {@code true} if initialization is finished successfully; {@code false} otherwise + */ + boolean isInitialized(); + + /** + * Returns the ID of this searchable category. This ID must be unique across RapidMiner Studio! + * + * @return the category id, never {@code null} + */ + String getSearchCategoryId(); + + /** + * Returns a map of all the custom fields that this {@link GlobalSearchManager} uses together with a human-readable + * explanation for its {@link Document}s. Used to get available search syntax information. + * + * @return the map with additional field information in the format {@code {key, information}} or {@code null} if no + * additional fields are created + */ + Map getAdditionalFieldDescriptions(); + + /** + * Returns all additional {@link org.apache.lucene.document.Field} keys and their relative weight which should be searched by default, i.e. + * when the user did not specify a field in the search query. An example where this is used are operators, where their tags are searched. + * By default, only the {@link GlobalSearchUtilities#FIELD_NAME} is searched. + *

+ * Note that the higher the weight difference, the more hits of the higher weighted field are favored, i.e. ranked higher. The {@link GlobalSearchUtilities#FIELD_NAME} has a weight of {@code 1f}. + *

+ * + * @return the keys and their relative weights of the additional fields for this {@link GlobalSearchable} to search or an empty collection if searching only + * the default name field is sufficient. Must not return {@code null}! + */ + Collection getAdditionalDefaultSearchFields(); + + /** + * Returns the {@link GlobalSearchManagerEventHandler} instance which is used to listen for search document changes. + * You can create one for your search category via {@code new GlobalSearchManagerEventHandler(categoryID)}. + *

Attention: All additions/updates/removals of + * searchable items need to be made known via this {@link GlobalSearchManagerEventHandler}! Call {@link + * GlobalSearchManagerEventHandler#fireDocumentsAdded(Collection)}, {@link GlobalSearchManagerEventHandler#fireDocumentsUpdated(Collection)}, + * and {@link GlobalSearchManagerEventHandler#fireDocumentsRemoved(Collection)} so that the {@link GlobalSearchHandler} will be + * able to find the changes!

+ * + * @return the event handler, never {@code null} + */ + GlobalSearchManagerEventHandler getSearchManagerEventHandler(); + +} diff --git a/src/main/java/com/rapidminer/search/GlobalSearchRegistry.java b/src/main/java/com/rapidminer/search/GlobalSearchRegistry.java new file mode 100644 index 000000000..4ee0f9d57 --- /dev/null +++ b/src/main/java/com/rapidminer/search/GlobalSearchRegistry.java @@ -0,0 +1,189 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; + +import com.rapidminer.search.event.GlobalSearchRegistryEvent; +import com.rapidminer.search.event.GlobalSearchRegistryEventListener; +import com.rapidminer.tools.LogService; + + +/** + * Register {@link GlobalSearchable} items here. Items registered here will be found when using the Global Search feature. You + * can call {@link #registerSearchCategory(GlobalSearchable)} to register things for the Global Search feature. If you don't + * want them to be searchable anymore, you can unregister them by calling {@link #unregisterSearchCategory(GlobalSearchable)}.

+ * To listen for registration changes, add a {@link GlobalSearchRegistryEventListener} by calling {@link + * #addEventListener(GlobalSearchRegistryEventListener)}.

+ * + * @author Marco Boeck + * @since 8.1 + */ +@SuppressWarnings("unused") +public enum GlobalSearchRegistry { + + INSTANCE; + + + private final Map map = new ConcurrentHashMap<>(); + + private final List listeners = Collections.synchronizedList(new ArrayList<>()); + + + /** + * Adds a {@link GlobalSearchRegistryEventListener} which will be informed of all changes to this registry. To remove it + * again, call {@link #removeEventListener(GlobalSearchRegistryEventListener)}. + * + * @param listener + * the listener instance to add + */ + public void addEventListener(final GlobalSearchRegistryEventListener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener must not be null!"); + } + listeners.add(listener); + } + + /** + * Removes the {@link GlobalSearchRegistryEventListener} from this registry. + * + * @param listener + * the listener instance to remove + */ + public void removeEventListener(final GlobalSearchRegistryEventListener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener must not be null!"); + } + listeners.remove(listener); + } + + /** + * Registers the given {@link GlobalSearchable}. Will call {@link AbstractGlobalSearchManager#init()}. + * These are high-level search categories which are presented in the global Search UI. + * + * @param searchable + * The searchable instance which is asked to return indexable items + * @throws IllegalStateException + * if registering a searchable with an ID that is already registered + */ + public void registerSearchCategory(final GlobalSearchable searchable) { + if (searchable == null) { + throw new IllegalArgumentException("searchable must not be null!"); + } + if (searchable.getSearchManager() == null) { + throw new IllegalArgumentException("searchable must not return null for the GlobalSearchManager!"); + } + GlobalSearchManager searchManager = searchable.getSearchManager(); + if (searchManager.getAdditionalDefaultSearchFields() == null) { + throw new IllegalArgumentException("getAdditionalDefaultSearchFields() must not return null!"); + } + String categoryId = searchManager.getSearchCategoryId(); + if (categoryId == null || categoryId.trim().isEmpty()) { + throw new IllegalArgumentException("categoryId must not be null or empty!"); + } + if (map.get(categoryId) != null) { + throw new IllegalStateException("searchable " + categoryId + " already registered!"); + } + if (!GlobalSearchIndexer.INSTANCE.isInitialized()) { + throw new IllegalStateException("GlobalSearchIndexer not initialized, Global Search disabled!"); + } + + searchManager.initialize(); + GlobalSearchCategory addedCategory = new GlobalSearchCategory(categoryId, searchManager); + map.put(categoryId, addedCategory); + fireRegistryEvent(GlobalSearchRegistryEvent.RegistrationEvent.SEARCH_CATEGORY_REGISTERED, addedCategory); + LogService.getRoot().log(Level.INFO, "com.rapidminer.search.GlobalSearchRegistry.category_added", addedCategory.getCategoryId()); + } + + /** + * Unregisters the given {@link GlobalSearchable}. If the given {@link GlobalSearchCategory} has already been unregistered, has + * no effect. + * + * @param searchable + * The searchable instance which should no longer provide search results + */ + public void unregisterSearchCategory(final GlobalSearchable searchable) { + if (searchable == null) { + throw new IllegalArgumentException("searchable must not be null!"); + } + String categoryId = searchable.getSearchManager().getSearchCategoryId(); + if (categoryId == null || categoryId.trim().isEmpty()) { + throw new IllegalArgumentException("categoryId must not be null or empty!"); + } + + GlobalSearchCategory removedCategory = map.remove(searchable.getSearchManager().getSearchCategoryId()); + if (removedCategory != null) { + fireRegistryEvent(GlobalSearchRegistryEvent.RegistrationEvent.SEARCH_CATEGORY_UNREGISTERED, removedCategory); + LogService.getRoot().log(Level.INFO, "com.rapidminer.search.GlobalSearchRegistry.category_removed", removedCategory.getCategoryId()); + } + } + + /** + * Returns all registered search categories. + * + * @return the registered search categories, never {@code null} + */ + public List getAllSearchCategories() { + return new ArrayList<>(map.values()); + } + + /** + * Returns the search category specified by the given id. If the categoryId is unknown, returns {@code null}! + * + * @param categoryId + * the category id for which the registered search category should be returned. + * @return the category or {@code null} if it is not registered + */ + public GlobalSearchCategory getSearchCategoryById(String categoryId) { + return map.get(categoryId); + } + + /** + * Checks if the given search category id is registered. + * + * @param categoryId + * the id, must not be {@code null} + * @return {@code true} if the search category is registered; {@code false} otherwise + */ + protected boolean isSearchCategoryRegistered(String categoryId) { + return map.containsKey(categoryId); + } + + + /** + * Fires the given {@link GlobalSearchRegistryEvent}. + * + * @param type + * the event type + * @param category + * the event origin {@link GlobalSearchCategory} instance + */ + private void fireRegistryEvent(final GlobalSearchRegistryEvent.RegistrationEvent type, final GlobalSearchCategory category) { + synchronized (listeners) { + for (GlobalSearchRegistryEventListener listener : listeners) { + listener.searchCategoryRegistrationChanged(new GlobalSearchRegistryEvent(type), category); + } + } + } +} diff --git a/src/main/java/com/rapidminer/search/GlobalSearchResult.java b/src/main/java/com/rapidminer/search/GlobalSearchResult.java new file mode 100644 index 000000000..62f6e3784 --- /dev/null +++ b/src/main/java/com/rapidminer/search/GlobalSearchResult.java @@ -0,0 +1,132 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.util.Collections; +import java.util.List; + +import org.apache.lucene.document.Document; +import org.apache.lucene.search.ScoreDoc; + + +/** + * POJO for Global Search results. Contains all relevant information of the search and its results. Use {@link + * GlobalSearchResultBuilder} to acquire {@link GlobalSearchResult}s. + * + * @author Marco Boeck + * @since 8.1 + */ +public final class GlobalSearchResult { + + private String query; + private List results; + private ScoreDoc lastResult; + private long maxPotentialResults; + private List bestFragments; + + /** + * Creates a new search results container. + * + * @param results + * the list of documents the search found + * @param query + * the query string that was used + * @param lastResult + * the last result if more exist than have been returned. Can be {@code null} + * @param maxPotentialResults + * the total number of result hits, or {code -1} if results are empty + * @param bestFragments + * the highlighted best fragments of the {@link GlobalSearchUtilities#FIELD_NAME} content, can be {@code null} if highlighting was disabled. Can also contain {@code null} elements. + */ + GlobalSearchResult(final List results, final String query, final ScoreDoc lastResult, final long maxPotentialResults, final List bestFragments) { + this.query = query; + this.results = results; + this.lastResult = lastResult; + this.maxPotentialResults = maxPotentialResults; + this.bestFragments = bestFragments; + } + + /** + * Returns a list of the actual result documents of this search. + * + * @return the results which may be empty, never {@code null} + */ + public List getResultDocuments() { + return results; + } + + /** + * The last result. If more potential hits exist than results have been returned, you can pass this as an offset + * to the next search call (see {@link GlobalSearchResultBuilder#setSearchOffset(ScoreDoc)}) to fetch the next results. + * + * @return the lowest ranked result or {@code null} if the results are empty + */ + public ScoreDoc getLastResult() { + return lastResult; + } + + /** + * The number of results included in this {@link GlobalSearchResult}. + * See {@link #getPotentialNumberOfResults()} for how many potential results can been found + * + * @return the number of hits contained in this result + */ + public int getNumberOfResults() { + return getResultDocuments().size(); + } + + /** + * Returns the total number of potential hits for the search query. + * + * @return the total number of hits or {@code -1} if the results are empty + */ + public long getPotentialNumberOfResults() { + return maxPotentialResults; + } + + /** + * The original query string. + * @return the query, never {@code null} + */ + public String getQuery() { + return query; + } + + /** + * Returns the highlighted best fragments of the {@link GlobalSearchUtilities#FIELD_NAME} content. Order is one-to-one same as the {@link #getResultDocuments()}. + * + * @return the html-formatted, highlighted best result fragments for the name field or {@code null} if no match was + * found, same order as {@link #getResultDocuments()}. Can also be {@code null} if highlighting was + * disabled. Use {@link com.rapidminer.gui.search.GlobalSearchGUIUtilities#createHTMLHighlightFromString(String, String[])} to create an HTML snippet highlighting the best matches. + */ + public List getBestFragments() { + return bestFragments; + } + + /** + * Returns an empty result. + * + * @param query + * the query which delivered the empty result + * @return an empty result, never {@code null} + */ + protected static GlobalSearchResult createEmptyResult(final String query) { + return new GlobalSearchResult(Collections.emptyList(), query, null, -1, null); + } +} diff --git a/src/main/java/com/rapidminer/search/GlobalSearchResultBuilder.java b/src/main/java/com/rapidminer/search/GlobalSearchResultBuilder.java new file mode 100644 index 000000000..fe41ce20b --- /dev/null +++ b/src/main/java/com/rapidminer/search/GlobalSearchResultBuilder.java @@ -0,0 +1,177 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.util.Arrays; +import java.util.List; + +import org.apache.lucene.queryparser.classic.ParseException; +import org.apache.lucene.search.ScoreDoc; + + +/** + * Fetches the search results by using a builder pattern. Call {@link #runSearch()} to execute the search query and + * get a {@link GlobalSearchResult}. + * + * @author Marco Boeck + * @since 8.1 + */ +public final class GlobalSearchResultBuilder { + + private static final int MAX_RESULTS_DEFAULT = 20; + + private final String searchTerm; + private int maxNumberOfResults; + private boolean highlightResult; + private boolean simpleMode; + private ScoreDoc after; + private List categories; + + /** + * Creates the search result builder for this search query with defaults for all other options. + * + * @param searchQuery + * the search query string, must neither be {@code null} nor empty + * @throws IllegalArgumentException + * if searchQuery is {@code null} or empty + * @throws IllegalStateException + * if {@link GlobalSearchIndexer#isInitialized()} returns {@code false} + */ + public GlobalSearchResultBuilder(final String searchQuery) { + if (searchQuery == null || searchQuery.trim().isEmpty()) { + throw new IllegalArgumentException("searchQuery must neither be null nor empty!"); + } + if (!GlobalSearchIndexer.INSTANCE.isInitialized()) { + throw new IllegalStateException("GlobalSearchIndexer is not initialized, cannot search"); + } + this.searchTerm = searchQuery; + + //set default values + this.maxNumberOfResults = MAX_RESULTS_DEFAULT; + this.highlightResult = false; + this.after = null; + this.categories = null; + } + + /** + * Set the maximum number of results to return. + * + *

By default, {@value #MAX_RESULTS_DEFAULT} are returned.

+ * + * @param maxNumberOfResults + * the maximum number of results + * @return the builder instance + */ + public GlobalSearchResultBuilder setMaxNumberOfResults(final int maxNumberOfResults) { + if (maxNumberOfResults <= 0) { + throw new IllegalArgumentException("maxNumberOfResults must be > 0!"); + } + this.maxNumberOfResults = maxNumberOfResults; + return this; + } + + /** + * Set if result matches for the {@value GlobalSearchUtilities#FIELD_NAME} field should be returned as {@link + * GlobalSearchResult#getBestFragments()}. + * + *

By default, search highlighting is disabled.

+ * + * @param highlightResult + * if {@code true}, the {@link GlobalSearchResult#getBestFragments()} will be created + * @return the builder instance + */ + public GlobalSearchResultBuilder setHighlightResult(final boolean highlightResult) { + this.highlightResult = highlightResult; + return this; + } + + /** + * Set an optional search offset. This can be used for result pagination by using {@link + * GlobalSearchResult#getLastResult()} as the offset for the next search. + * + *

By default, there is no offset and the n requested top-ranked documents are + * returned.

+ * + * @param after + * Optional. If not {@code null}, then the search results are retrieved from ranks lower than the given + * {@link ScoreDoc}. + * @return the builder instance + */ + public GlobalSearchResultBuilder setSearchOffset(final ScoreDoc after) { + this.after = after; + return this; + } + + /** + * Define which {@link GlobalSearchCategory}s to include in the search. See {@link GlobalSearchRegistry} for more + * information about registered search categories. + * + *

By default, all categories are included.

+ * + * @param categories + * Optional. If {@code null} or not specified, all registered search categories are included in the + * search. If given, they have to registered at the {@link GlobalSearchRegistry}, otherwise an {@link + * IllegalArgumentException} will be thrown + * @return the builder instance + * @throws IllegalArgumentException + * if categories which are not registered are passed + */ + public GlobalSearchResultBuilder setSearchCategories(final GlobalSearchCategory... categories) { + if (categories != null) { + for (GlobalSearchCategory category : categories) { + if (category == null) { + throw new IllegalArgumentException("search category NULL does not exist!"); + } else if (!GlobalSearchRegistry.INSTANCE.isSearchCategoryRegistered(category.getCategoryId())) { + throw new IllegalArgumentException("search category " + category.getCategoryId() + " is not registered!"); + } + } + this.categories = Arrays.asList(categories); + } + return this; + } + + /** + * If simple mode is activated, will try to make the query as user-friendly as possible, e.g. making it a wildcard search, etc. + * This may have no effect if the user is using advanced query syntax in the search query himself! + * Exact behavior might differ between Studio versions. + *

+ * Defaults to {@code false} if not specified. + *

+ * + * @param simpleMode + * if {@code true}, will try to make the query automatically user-friendly (e.g. adding wildcards and making the search fuzzy); {@code false} will not make any changes to the query. + * Note that if a simplified query cannot be parsed, the search will fall back to non-simple mode automatically. + * @return the builder instance + */ + public GlobalSearchResultBuilder setSimpleMode(final boolean simpleMode) { + this.simpleMode = simpleMode; + return this; + } + + /** + * Executes the actual search. + * + * @return the search result, never {@code null} + * @throws ParseException + * if the searchQuery was invalid + */ + public GlobalSearchResult runSearch() throws ParseException { + return GlobalSearchHandler.INSTANCE.search(searchTerm, categories, simpleMode, maxNumberOfResults, highlightResult, after); + } +} diff --git a/src/main/java/com/rapidminer/search/GlobalSearchUtilities.java b/src/main/java/com/rapidminer/search/GlobalSearchUtilities.java new file mode 100644 index 000000000..6ff679d6e --- /dev/null +++ b/src/main/java/com/rapidminer/search/GlobalSearchUtilities.java @@ -0,0 +1,315 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.CharArraySet; +import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.apache.lucene.document.DateTools; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.apache.lucene.document.FieldType; +import org.apache.lucene.document.SortedNumericDocValuesField; +import org.apache.lucene.document.StoredField; +import org.apache.lucene.document.StringField; +import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.IndexableField; +import org.apache.lucene.queryparser.classic.QueryParser; + + +/** + * Utility class for using Global Search features. + * + * @author Marco Boeck + * @since 8.1 + */ +@SuppressWarnings("unused") +public enum GlobalSearchUtilities { + + INSTANCE; + + + /** + * name of the {@link StringField} each document MUST have which + * represents the name/title/header of a document. + */ + public static final String FIELD_NAME = "name"; + + /** + * name of the {@link StringField} each document MUST have which also + * must be unique across the entire category + */ + public static final String FIELD_UNIQUE_ID = "id"; + + /** + * name of the category {@link org.apache.lucene.document.StringField} each document is given automatically + */ + public static final String FIELD_CATEGORY = "category"; + + /** + * name of the optional {@link org.apache.lucene.document.SortedNumericDocValuesField} a document can have which is used to sort search results. + * The field must be numeric and contain long values! + */ + public static final String FIELD_SORTING = "sort"; + + /** wildcard character in lucene */ + public static final String QUERY_WILDCARD = "*"; + + /** searching for a field in lucene works by using fieldname followed by this delimiter and then the search term */ + public static final String QUERY_FIELD_SPECIFIER = ":"; + + /** default boost of the name field in search results */ + public static final float DEFAULT_NAME_FIELD_BOOST = 1f; + + /** default boost of other fields in search results */ + public static final float DEFAULT_OTHER_FIELD_BOOST = 0.5f; + + /** + * The analyzer that should be used for indexing and searching. + * It uses a per-field analyzer where the {@link #FIELD_NAME} is analyzed without stop words, while all other fields are analyzed with stop words. + */ + public static final Analyzer ANALYZER; + + static { + Map analyzerMap = new HashMap<>(); + analyzerMap.put(FIELD_NAME, new StandardAnalyzer(CharArraySet.EMPTY_SET)); + + ANALYZER = new PerFieldAnalyzerWrapper(new StandardAnalyzer(), analyzerMap); + } + + + private static final String PATH_REPLACEMENT = "REPOSITORYPATHDELIMITER"; + private static final String WHITESPACE_REPLACEMENT = "WHITESPACEINPATH"; + private static final String PLUS_REPLACEMENT = "PLUS"; + private static final String MINUS_REPLACEMENT = "MINUS"; + private static final String AND_REPLACEMENT = "AMPERSAND"; + private static final String EXCLAMATION_MARK_REPLACEMENT = "EXCLAMATIONMARK"; + private static final String BRACKET_OPEN_REPLACEMENT = "BRACKETOPEN"; + private static final String BRACKET_CLOSE_REPLACEMENT = "BRACKETCLOSE"; + private static final String BRACKET_EDGED_OPEN_REPLACEMENT = "BRACKETEDGEDOPEN"; + private static final String BRACKET_EDGED_CLOSED_REPLACEMENT = "BRACKETEDGEDCLOSE"; + private static final String BRACKET_CURLY_OPEN_REPLACEMENT = "BRACKETCURLYOPEN"; + private static final String BRACKET_CURLY_CLOSED_REPLACEMENT = "BRACKETCURLYCLOSE"; + private static final String POWER_REPLACEMENT = "POWER"; + private static final String TILDE_REPLACEMENT = "TILDE"; + + /** key is what will be replaced, value is the replacement */ + private static final Map PATH_REPLACEMENT_MAP ; + + static { + PATH_REPLACEMENT_MAP = new HashMap<>(); + + // add things that need to be escaped from repository paths for the Global Search to not interfere with Lucene syntax + PATH_REPLACEMENT_MAP.put("\\/", PATH_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\s", WHITESPACE_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\+", PLUS_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\-", MINUS_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\&", AND_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\!", EXCLAMATION_MARK_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\(", BRACKET_OPEN_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\)", BRACKET_CLOSE_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\[", BRACKET_EDGED_OPEN_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\]", BRACKET_EDGED_CLOSED_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\{", BRACKET_CURLY_OPEN_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\}", BRACKET_CURLY_CLOSED_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("\\^", POWER_REPLACEMENT); + PATH_REPLACEMENT_MAP.put("~", TILDE_REPLACEMENT); + } + + private final FieldType titleFieldType; + private final FieldType textFieldType; + + + GlobalSearchUtilities() { + titleFieldType = new FieldType(); + titleFieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS); + titleFieldType.setStored(true); + titleFieldType.setTokenized(true); + + textFieldType = new FieldType(); + textFieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS); + textFieldType.setStored(true); + textFieldType.setTokenized(true); + textFieldType.setStoreTermVectors(true); + textFieldType.setStoreTermVectorPositions(true); + textFieldType.setStoreTermVectorOffsets(true); + textFieldType.setStoreTermVectorPayloads(true); + } + + /** + * Creates a {@link Document} instance in a way that can be used by the Global Search {@link GlobalSearchHandler} while you + * can also supply all the advanced fields you deem necessary.

See utility methods in this class to create + * fields:

  • {@link #createFieldForTitles(String, String)}
  • {@link #createFieldForTexts(String, + * String)}

+ * + * @param uniqueId + * this is a unique id across the search category. To later access it again, call {@link Document#get(String)} + * with {@link #FIELD_UNIQUE_ID} as parameter. + * @param title + * this is the title/name/header of a document + * @param fields + * Optional fields to add further search information, e.g. tags, timestamps, etc + * @return the document instance, never {@code null} + */ + public Document createDocument(final String uniqueId, final String title, final Field... fields) { + Document doc = new Document(); + doc.add(createFieldForIdentifiers(FIELD_UNIQUE_ID, uniqueId)); + doc.add(createFieldForTitles(FIELD_NAME, title)); + for (Field field : fields) { + doc.add(field); + } + + return doc; + } + + /** + * Tries to get the id of the {@link GlobalSearchCategory} from which this {@link Document} originates. + * + * @param document + * the document for which the category id should be returned + * @return the category id or {@code null} if it does not belong to any known category or to none at all + */ + public String getSearchCategoryIdForDocument(final Document document) { + if (document == null) { + throw new IllegalArgumentException("document must not be null!"); + } + + IndexableField categoryField = document.getField(FIELD_CATEGORY); + if (categoryField != null) { + String categoryId = categoryField.stringValue(); + if (GlobalSearchRegistry.INSTANCE.isSearchCategoryRegistered(categoryId)) { + return categoryId; + } + } + + return null; + } + + /** + * Creates a search document {@link Field} for very short strings like titles, names, etc. + * + * @param key the name of the field, e.g. {@link #FIELD_NAME} + * @param value + * the value string, e.g. a title + * @return the field, never {@code null} + */ + public Field createFieldForTitles(final String key, final String value) { + return new Field(key, value, titleFieldType); + } + + /** + * Creates a search document {@link Field} for longer search strings like texts, descriptions, etc. + * + * @param key the name of the field, e.g. {@code content} + * @param value + * the value string, e.g. a description text + * @return the field, never {@code null} + */ + public Field createFieldForTexts(final String key, final String value) { + return new Field(key, value, textFieldType); + } + + /** + * Creates a search document {@link Field} for date values (ms since epoch). + * + * @param key + * the name of the field, e.g. {@code modified} + * @param value + * the ms since epoch + * @return the field, never {@code null} + */ + public Field createFieldForDateValues(final String key, final long value) { + return createFieldForIdentifiers(key, DateTools.timeToString(value, DateTools.Resolution.DAY)); + } + + /** + * Creates a search document {@link Field} for identifier strings like tags, location, etc. + * + * @param key the name of the field, e.g. {@code location} + * @param value + * the value string, e.g. a description text + * @return the field, never {@code null} + */ + public Field createFieldForIdentifiers(final String key, final String value) { + return new StringField(key, value, Field.Store.YES); + } + + /** + * Creates a search document {@link Field} for binary data that should be stored but not searched. This can then later be retrieved again. + * + * @param key the name of the field, e.g. {@code data} + * @param bytes + * the byte array + * @return the field, never {@code null} + */ + public Field createFieldForBinary(final String key, final byte[] bytes) { + return new StoredField(key, bytes); + } + + /** + * Creates a search document {@link Field} for sorting with long values. + * + * @param value + * the long value. Higher values are sorted higher than lower values + * @return the field which is used for sorting, never {@code null} + */ + public Field createSortingField(final long value) { + return new SortedNumericDocValuesField("sort", value); + } + + /** + * Encodes a repository path (see {@link com.rapidminer.repository.RepositoryLocation}) for searching. + * This means that {@link com.rapidminer.repository.RepositoryLocation#REPOSITORY_PREFIX} and + * {@link com.rapidminer.repository.RepositoryLocation#SEPARATOR} will be replaced by a string and all whitespaces will be replaced by another string. + * + * @param path + * the full repository path + * @return the full repository path where path seperators and whitespaces have been replaced with a specific string + */ + public String encodeRepositoryPath(final String path) { + if (path == null) { + throw new IllegalArgumentException("path must not be null!"); + } + + String modifiedPath = path; + for (Map.Entry replacement : PATH_REPLACEMENT_MAP.entrySet()) { + modifiedPath = modifiedPath.replaceAll(replacement.getKey(), replacement.getValue()); + } + return modifiedPath; + } + + /** + * Encodes a query string so special syntax characters used by Lucene are encoded. + * + * @param query + * the query string to encode + * @return the encoded string, ready to be used by Lucene as a query string + */ + public String escapeQueryString(final String query) { + if (query == null) { + throw new IllegalArgumentException("query must not be null!"); + } + + return QueryParser.escape(query); + } +} diff --git a/src/main/java/com/rapidminer/search/GlobalSearchable.java b/src/main/java/com/rapidminer/search/GlobalSearchable.java new file mode 100644 index 000000000..9e4ee3e00 --- /dev/null +++ b/src/main/java/com/rapidminer/search/GlobalSearchable.java @@ -0,0 +1,36 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +/** + * Things that should be searchable via the Global Search feature must implement this interface. Register them to the {@link + * GlobalSearchRegistry} so they are automatically included in the search. + * + * @author Marco Boeck + * @since 8.1 + */ +public interface GlobalSearchable { + + /** + * Returns the {@link GlobalSearchManager} instance for this searchable item. + * + * @return the search manager instance, never {@code null} + */ + GlobalSearchManager getSearchManager(); +} diff --git a/src/main/java/com/rapidminer/search/event/GlobalSearchManagerEventHandler.java b/src/main/java/com/rapidminer/search/event/GlobalSearchManagerEventHandler.java new file mode 100644 index 000000000..9e522d09d --- /dev/null +++ b/src/main/java/com/rapidminer/search/event/GlobalSearchManagerEventHandler.java @@ -0,0 +1,145 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search.event; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import org.apache.lucene.document.Document; + +import com.rapidminer.search.GlobalSearchManager; +import com.rapidminer.search.GlobalSearchable; +import com.rapidminer.search.GlobalSearchUtilities; + + +/** + * Handles events relevant to searching for {@link GlobalSearchManager}s, e.g. addition/updates/removal + * of documents. Must be called by the {@link GlobalSearchable} whenever something changes and thus the + * search index should be updated. Needs the search category id (as defined in the {@link + * GlobalSearchManager}). + * + *

Attention: Please make sure that each {@link Document} has the following fields:

  • {@link + * org.apache.lucene.document.TextField} with the key {@value GlobalSearchUtilities#FIELD_NAME} which contains the + * name/title/header for a search document.
  • {@link org.apache.lucene.document.StringField} with the key {@value + * GlobalSearchUtilities#FIELD_UNIQUE_ID} which contains a unique id across the entire search category! This is necessary to + * either update or remove documents from the search later on.
+ *

+ * You can use {@link GlobalSearchUtilities} to create documents. + * + * @author Marco Boeck + * @since 8.1 + */ +public class GlobalSearchManagerEventHandler { + + private final List listeners = Collections.synchronizedList(new ArrayList<>()); + + private final String categoryId; + + /** + * Hidden to prevent instantiation without category id. + */ + @SuppressWarnings("unused") + private GlobalSearchManagerEventHandler() { + throw new UnsupportedOperationException("must be created with a category id!"); + } + + /** + * Creates a new search manager event handler for the given search manager instance. + * + * @param categoryId + * the search category id for this event handler instance, must not be {@code null} + */ + public GlobalSearchManagerEventHandler(String categoryId) { + this.categoryId = categoryId; + } + + /** + * Adds a {@link GlobalSearchManagerListener} which should be informed of all changes to the search manager. To remove it + * again, call {@link #removeEventListener(GlobalSearchManagerListener)}. + * + * @param listener + * the listener instance to add + */ + public void addEventListener(final GlobalSearchManagerListener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener must not be null!"); + } + listeners.add(listener); + } + + /** + * Removes the {@link GlobalSearchManagerListener} from this registry. + * + * @param listener + * the listener instance to remove + */ + public void removeEventListener(final GlobalSearchManagerListener listener) { + if (listener == null) { + throw new IllegalArgumentException("listener must not be null!"); + } + listeners.remove(listener); + } + + /** + * Notifies all registered {@link GlobalSearchManagerListener}s that new {@link Document}s have been added. See + * {@link GlobalSearchUtilities} for helper methods to create documents. + * + * @param addedDocuments + * the documents that have been added + */ + public void fireDocumentsAdded(Collection addedDocuments) { + synchronized (listeners) { + for (GlobalSearchManagerListener listener : listeners) { + listener.documentsAdded(categoryId, addedDocuments); + } + } + } + + /** + * Notifies all registered {@link GlobalSearchManagerListener}s that indexed {@link Document}s have been updated. See + * {@link GlobalSearchUtilities} for helper methods to create documents. + * + * @param updatedDocuments + * the documents that have been updated + */ + public void fireDocumentsUpdated(Collection updatedDocuments) { + synchronized (listeners) { + for (GlobalSearchManagerListener listener : listeners) { + listener.documentsUpdated(categoryId, updatedDocuments); + } + } + } + + /** + * Notifies all registered {@link GlobalSearchManagerListener}s that indexed {@link Document}s have been removed. See + * {@link GlobalSearchUtilities} for helper methods to create documents. + * + * @param removedDocuments + * the documents that have been removed + */ + public void fireDocumentsRemoved(Collection removedDocuments) { + synchronized (listeners) { + for (GlobalSearchManagerListener listener : listeners) { + listener.documentsRemoved(categoryId, removedDocuments); + } + } + } +} diff --git a/src/main/java/com/rapidminer/search/event/GlobalSearchManagerListener.java b/src/main/java/com/rapidminer/search/event/GlobalSearchManagerListener.java new file mode 100644 index 000000000..1943c946f --- /dev/null +++ b/src/main/java/com/rapidminer/search/event/GlobalSearchManagerListener.java @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search.event; + +import java.util.Collection; +import java.util.EventListener; + +import org.apache.lucene.document.Document; + +import com.rapidminer.search.GlobalSearchManager; + + +/** + * Listens for events on a {@link GlobalSearchManager}. + * + * @author Marco Boeck + * @since 8.1 + */ +public interface GlobalSearchManagerListener extends EventListener { + + /** + * Fired when {@link Document}s have been added. + * + * @param categoryId + * the id of the {@link GlobalSearchManager} search category + * @param addedDocuments + * the added documents, never {@code null} + */ + void documentsAdded(final String categoryId, final Collection addedDocuments); + + /** + * Fired when {@link Document}s have been updated. + * + * @param categoryId + * the id of the {@link GlobalSearchManager} search category + * @param updatedDocuments + * the updated documents, never {@code null} + */ + void documentsUpdated(final String categoryId, final Collection updatedDocuments); + + /** + * Fired when {@link Document}s have been removed. + * + * @param categoryId + * the id of the {@link GlobalSearchManager} search category + * @param removedDocuments + * the removed documents, never {@code null} + */ + void documentsRemoved(final String categoryId, final Collection removedDocuments); +} diff --git a/src/main/java/com/rapidminer/search/event/GlobalSearchRegistryEvent.java b/src/main/java/com/rapidminer/search/event/GlobalSearchRegistryEvent.java new file mode 100644 index 000000000..0392be37c --- /dev/null +++ b/src/main/java/com/rapidminer/search/event/GlobalSearchRegistryEvent.java @@ -0,0 +1,69 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search.event; + +import com.rapidminer.search.GlobalSearchRegistry; + + +/** + * Events for registrations/unregistrations at the {@link GlobalSearchRegistry}. + * + * @author Marco Boeck + * @since 8.1 + */ +public final class GlobalSearchRegistryEvent { + + + /** + * Defines different kind of {@link RegistrationEvent}s. + */ + public enum RegistrationEvent { + /** + * fired when a searchable has been registered + */ + SEARCH_CATEGORY_REGISTERED, + + /** + * fired when a searchable has been unregistered + */ + SEARCH_CATEGORY_UNREGISTERED + } + + private final RegistrationEvent type; + + /** + * Creates a new {@link GlobalSearchRegistryEvent} instance for the specified {@link RegistrationEvent}. + * + * @param type + * the event type + */ + public GlobalSearchRegistryEvent(final RegistrationEvent type) { + this.type = type; + } + + /** + * Returns the {@link RegistrationEvent}. + * + * @return the type of the event + */ + public RegistrationEvent getEventType() { + return type; + } + +} diff --git a/src/main/java/com/rapidminer/search/event/GlobalSearchRegistryEventListener.java b/src/main/java/com/rapidminer/search/event/GlobalSearchRegistryEventListener.java new file mode 100644 index 000000000..ccffef22c --- /dev/null +++ b/src/main/java/com/rapidminer/search/event/GlobalSearchRegistryEventListener.java @@ -0,0 +1,48 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. +*/ +package com.rapidminer.search.event; + +import java.util.EventListener; + +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchable; +import com.rapidminer.search.GlobalSearchCategory; + + +/** + * An object listening for {@link GlobalSearchRegistryEvent}s on the {@link GlobalSearchRegistry}. + * + * @author Marco Boeck + * @since 8.1 + * + */ +public interface GlobalSearchRegistryEventListener extends EventListener { + + /** + * Called when a new {@link GlobalSearchable} has been registered to the {@link + * GlobalSearchRegistry}. + * + * @param e + * the event instance, never {@code null} + * @param category + * the search category that triggered the event, never {@code null} + */ + void searchCategoryRegistrationChanged(final GlobalSearchRegistryEvent e, final GlobalSearchCategory category); + +} diff --git a/src/main/java/com/rapidminer/security/PluginSandboxPolicy.java b/src/main/java/com/rapidminer/security/PluginSandboxPolicy.java index cd81aff8f..50865a902 100644 --- a/src/main/java/com/rapidminer/security/PluginSandboxPolicy.java +++ b/src/main/java/com/rapidminer/security/PluginSandboxPolicy.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -210,11 +210,7 @@ private static boolean isUnsignedPlugin(ProtectionDomain domain) { * */ private static boolean isGroovyScript(ProtectionDomain domain) { - if (domain.getCodeSource().getLocation() != null - && domain.getCodeSource().getLocation().getPath().contains(ScriptingOperator.GROOVY_DOMAIN)) { - return true; - } - return false; + return domain.getCodeSource().getLocation() != null && domain.getCodeSource().getLocation().getPath().contains(ScriptingOperator.GROOVY_DOMAIN); } /** @@ -226,10 +222,7 @@ private static boolean isGroovyScript(ProtectionDomain domain) { * */ private static boolean isUnknown(ProtectionDomain domain) { - if (domain == null || domain.getCodeSource() == null) { - return true; - } - return false; + return domain == null || domain.getCodeSource() == null; } /** @@ -274,36 +267,38 @@ private static PermissionCollection createUnsignedPermissions(final PluginClassL permissions.add(new PropertyPermission("*", "read")); - AccessController.doPrivileged(new PrivilegedAction() { - - @Override - public Void run() { - String userHome = System.getProperty("user.home"); - String tmpDir = System.getProperty("java.io.tmpdir"); - String pluginKey = loader.getPluginKey(); - - // delete access to the general temp directory - permissions.add(new FilePermission(tmpDir, "read, write")); - permissions.add(new FilePermission(tmpDir + "/-", "read, write, delete")); - - // extensions can only delete files in their own subfolder of the - // .RapidMiner/extensions/workspace folder - if (pluginKey != null) { - String pluginFolder = pluginKey; - - permissions.add(new FilePermission(userHome + "/.RapidMiner/extensions", "read")); - permissions.add(new FilePermission(userHome + "/.RapidMiner/extensions/workspace", "read")); - permissions.add(new FilePermission(userHome + "/.RapidMiner/extensions/workspace/" + pluginFolder, - "read, write")); - permissions.add(new FilePermission(userHome + "/.RapidMiner/extensions/workspace/" + pluginFolder + "/-", - "read, write, delete")); - } - - // unfortunately currently we have to give all location permissons to read/write - // files to not block extensions that add "Read/Write xyz" operators - permissions.add(new FilePermission("<>", "read, write")); - return null; + AccessController.doPrivileged((PrivilegedAction) () -> { + + String userHome = System.getProperty("user.home"); + String tmpDir = System.getProperty("java.io.tmpdir"); + String pluginKey = loader.getPluginKey(); + + // delete access to the general temp directory + permissions.add(new FilePermission(tmpDir, "read, write")); + permissions.add(new FilePermission(tmpDir + "/-", "read, write, delete")); + + // extensions can only delete files in their own subfolder of the + // .RapidMiner/extensions/workspace folder + if (pluginKey != null) { + + permissions.add(new FilePermission(userHome + "/.RapidMiner/extensions", "read")); + permissions.add(new FilePermission(userHome + "/.RapidMiner/extensions/workspace", "read")); + permissions.add(new FilePermission(userHome + "/.RapidMiner/extensions/workspace/" + pluginKey, + "read, write")); + permissions.add(new FilePermission(userHome + "/.RapidMiner/extensions/workspace/" + pluginKey + "/-", + "read, write, delete")); + + // global search permissions + permissions.add(new FilePermission(userHome + "/.RapidMiner/internal cache/search/", + "read, write")); + permissions.add(new FilePermission(userHome + "/.RapidMiner/internal cache/search/-", + "read, write, delete")); } + + // unfortunately currently we have to give all location permissons to read/write + // files to not block extensions that add "Read/Write xyz" operators + permissions.add(new FilePermission("<>", "read, write")); + return null; }); addCommonPermissions(permissions); @@ -317,9 +312,8 @@ public Void run() { * @return the permissions, never {@code null} */ private static PermissionCollection createUnknownSourcePermissions() { - Permissions permissions = new Permissions(); // empty permissions, not allowed to do anything - return permissions; + return new Permissions(); } /** @@ -399,6 +393,10 @@ private static void addCommonPermissions(Permissions permissions) { * during verification of all certificates. Can be {@code null} */ private static void verifyCertificates(Certificate[] certificates) throws GeneralSecurityException { + if (certificates == null || certificates.length == 0) { + throw new GeneralSecurityException("No code certificates found!"); + } + GeneralSecurityException lastException = null; boolean verified = false; for (Certificate certificate : certificates) { @@ -425,13 +423,7 @@ private static void verifyCertificates(Certificate[] certificates) throws Genera private static boolean isSecurityEnforced() { // no need to synchronize, if this is entered multiple times it's fine if (enforced == null) { - enforced = AccessController.doPrivileged(new PrivilegedAction() { - - @Override - public Boolean run() { - return Boolean.parseBoolean(System.getProperty(PROPERTY_SECURITY_ENFORCED)); - } - }); + enforced = AccessController.doPrivileged((PrivilegedAction) () -> Boolean.parseBoolean(System.getProperty(PROPERTY_SECURITY_ENFORCED))); if (enforced) { LogService.getRoot().log(Level.INFO, diff --git a/src/main/java/com/rapidminer/security/PluginSecurityManager.java b/src/main/java/com/rapidminer/security/PluginSecurityManager.java index 21c5029d9..37df07ab1 100644 --- a/src/main/java/com/rapidminer/security/PluginSecurityManager.java +++ b/src/main/java/com/rapidminer/security/PluginSecurityManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/security/internal/InternalPluginClassLoader.java b/src/main/java/com/rapidminer/security/internal/InternalPluginClassLoader.java index 9d87afdc6..afe21b95c 100644 --- a/src/main/java/com/rapidminer/security/internal/InternalPluginClassLoader.java +++ b/src/main/java/com/rapidminer/security/internal/InternalPluginClassLoader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/ConcurrencyExecutionService.java b/src/main/java/com/rapidminer/studio/concurrency/internal/ConcurrencyExecutionService.java index 3e451a51c..80dc44d19 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/ConcurrencyExecutionService.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/ConcurrencyExecutionService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/ConcurrencyExecutionServiceProvider.java b/src/main/java/com/rapidminer/studio/concurrency/internal/ConcurrencyExecutionServiceProvider.java index 3ef58ee8c..8d131e78b 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/ConcurrencyExecutionServiceProvider.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/ConcurrencyExecutionServiceProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/ExecutionExceptionHandling.java b/src/main/java/com/rapidminer/studio/concurrency/internal/ExecutionExceptionHandling.java index 46ac3b81a..b3868627f 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/ExecutionExceptionHandling.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/ExecutionExceptionHandling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,17 +18,17 @@ */ package com.rapidminer.studio.concurrency.internal; -import java.util.List; import java.util.concurrent.ExecutionException; import com.rapidminer.Process; +import com.rapidminer.operator.ExecutionUnit; import com.rapidminer.operator.Operator; +import com.rapidminer.operator.OperatorChain; import com.rapidminer.operator.OperatorException; import com.rapidminer.operator.PortUserError; import com.rapidminer.operator.UserError; -import com.rapidminer.operator.ports.InputPort; -import com.rapidminer.operator.ports.OutputPort; import com.rapidminer.operator.ports.Port; +import com.rapidminer.operator.ports.Ports; /** @@ -46,6 +46,19 @@ public enum ExecutionExceptionHandling { /** the singleton instance */ INSTANCE; + /** + * Finds the corresponding Port in original Ports by the index of the source Port in source Ports. + */ + private Port getMatchingPort(Port sourcePort, Ports sourcePorts, Ports originalPorts) { + for (int i = 0; i < sourcePorts.getNumberOfPorts(); i++) { + if (sourcePorts.getPortByIndex(i).equals(sourcePort)) { + return originalPorts.getPortByIndex(i); + } + } + + return null; + } + /** * Tries to get the underlying cause of an {@link ExecutionException} which occurred while using * {@link ConcurrencyExecutionServiceProvider}. @@ -96,22 +109,38 @@ public OperatorException processExecutionException(ExecutionException e, Process } if (sourceOperator != null && cause instanceof PortUserError) { PortUserError portError = (PortUserError) error; - List inputPorts = sourceOperator.getInputPorts().getAllPorts(); Port errorPort = portError.getPort(); - boolean portFound = false; - for (int i = 0; i < inputPorts.size(); i++) { - if (inputPorts.get(i).equals(errorPort)) { - portError.setPort(error.getOperator().getInputPorts().getAllPorts().get(i)); - portFound = true; - break; - } + + Port originalPort = getMatchingPort(errorPort, sourceOperator.getInputPorts(), error.getOperator().getInputPorts()); + if (originalPort != null) { + portError.setPort(originalPort); + return portError; + } + + originalPort = getMatchingPort(errorPort, sourceOperator.getOutputPorts(), error.getOperator().getOutputPorts()); + if (originalPort != null) { + portError.setPort(originalPort); + return portError; } - if (!portFound) { - List outputPorts = sourceOperator.getOutputPorts().getAllPorts(); - for (int i = 0; i < outputPorts.size(); i++) { - if (outputPorts.get(i).equals(errorPort)) { - portError.setPort(error.getOperator().getOutputPorts().getAllPorts().get(i)); - break; + + if (sourceOperator instanceof OperatorChain) { + OperatorChain sourceOperatorChain = (OperatorChain) sourceOperator; + OperatorChain originalOperatorChain = (OperatorChain) error.getOperator(); + + for (int i = 0; i < sourceOperatorChain.getNumberOfSubprocesses(); i++) { + ExecutionUnit sourceExecutionUnit = sourceOperatorChain.getSubprocess(i); + ExecutionUnit originalExecutionUnit = originalOperatorChain.getSubprocess(i); + + originalPort = getMatchingPort(errorPort, sourceExecutionUnit.getInnerSinks(), originalExecutionUnit.getInnerSinks()); + if (originalPort != null) { + portError.setPort(originalPort); + return portError; + } + + originalPort = getMatchingPort(errorPort, sourceExecutionUnit.getInnerSources(), originalExecutionUnit.getInnerSources()); + if (originalPort != null) { + portError.setPort(originalPort); + return portError; } } } diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/RecursiveWrapper.java b/src/main/java/com/rapidminer/studio/concurrency/internal/RecursiveWrapper.java index daff0c921..3ab649f8d 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/RecursiveWrapper.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/RecursiveWrapper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/StudioConcurrencyContext.java b/src/main/java/com/rapidminer/studio/concurrency/internal/StudioConcurrencyContext.java index f2e2bb894..54eb03819 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/StudioConcurrencyContext.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/StudioConcurrencyContext.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -139,20 +139,18 @@ public List call(List> callables) } } + ForkJoinPool forkJoinPool = AccessController.doPrivileged( + (PrivilegedAction) this::getForkJoinPool); // handle submissions from inside and outside the pool differently Thread currentThread = Thread.currentThread(); if (currentThread instanceof ForkJoinWorkerThread - && ((ForkJoinWorkerThread) currentThread).getPool() == getForkJoinPool()) { + && ((ForkJoinWorkerThread) currentThread).getPool() == forkJoinPool) { return RecursiveWrapper.call(callables); } else { final List> futures = new ArrayList<>(callables.size()); - AccessController.doPrivileged((PrivilegedAction) () -> { - - for (Callable callable : callables) { - futures.add(getForkJoinPool().submit(callable)); - } - return null; - }); + for (Callable callable : callables) { + futures.add(forkJoinPool.submit(callable)); + } return collectResults(futures); } } @@ -175,16 +173,25 @@ public List> submit(List> callables) throws IllegalArg } } - // submit callables without further checks - final List> futures = new ArrayList<>(callables.size()); - AccessController.doPrivileged((PrivilegedAction) () -> { - + ForkJoinPool forkJoinPool = AccessController.doPrivileged( + (PrivilegedAction) this::getForkJoinPool); + // handle submissions from inside and outside the pool differently + Thread currentThread = Thread.currentThread(); + if (currentThread instanceof ForkJoinWorkerThread + && ((ForkJoinWorkerThread) currentThread).getPool() == forkJoinPool) { + final List> futures = new ArrayList<>(callables.size()); + for (Callable callable : callables) { + futures.add(ForkJoinTask.adapt(callable).fork()); + } + return futures; + } else { + // submit callables without further checks + final List> futures = new ArrayList<>(callables.size()); for (Callable callable : callables) { - futures.add(getForkJoinPool().submit(callable)); + futures.add(forkJoinPool.submit(callable)); } - return null; - }); - return futures; + return futures; + } } @Override @@ -242,7 +249,8 @@ public List collectResults(List> futures) @Override public int getParallelism() { if (pool != null) { - return getForkJoinPool().getParallelism(); + return AccessController.doPrivileged((PrivilegedAction) this::getForkJoinPool) + .getParallelism(); } else { return getDesiredParallelismLevel(); } @@ -261,7 +269,8 @@ public T invoke(ForkJoinTask task) throws ExecutionException, ExecutionSt } @Override - public List invokeAll(final List> tasks) throws ExecutionException, ExecutionStoppedException { + public List invokeAll(final List> tasks) throws ExecutionException, + ExecutionStoppedException { throw new UnsupportedOperationException(); } @@ -292,7 +301,8 @@ protected ForkJoinPool getForkJoinPool() { } int desiredParallelismLevel = getDesiredParallelismLevel(); pool = new ForkJoinPool(desiredParallelismLevel); - LogService.getRoot().log(Level.CONFIG, "com.rapidminer.concurrency.concurrency_context.pool_creation", + LogService.getRoot().log(Level.CONFIG, + "com.rapidminer.concurrency.concurrency_context.pool_creation", desiredParallelismLevel); return pool; } finally { diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/util/BackgroundExecution.java b/src/main/java/com/rapidminer/studio/concurrency/internal/util/BackgroundExecution.java index 14293a51b..00ea24c04 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/util/BackgroundExecution.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/util/BackgroundExecution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/util/BackgroundExecutionServiceListener.java b/src/main/java/com/rapidminer/studio/concurrency/internal/util/BackgroundExecutionServiceListener.java index ad6002d71..cc89fbe4f 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/util/BackgroundExecutionServiceListener.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/util/BackgroundExecutionServiceListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/util/ExampleSetAppender.java b/src/main/java/com/rapidminer/studio/concurrency/internal/util/ExampleSetAppender.java index 3b3a5308a..1a6087577 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/util/ExampleSetAppender.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/util/ExampleSetAppender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessBackgroundExecution.java b/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessBackgroundExecution.java index 56d75c0e1..40cb69ea6 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessBackgroundExecution.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessBackgroundExecution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessBackgroundExecutionState.java b/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessBackgroundExecutionState.java index 8d1d4484f..f46c437da 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessBackgroundExecutionState.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessBackgroundExecutionState.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessExecutionStackEntry.java b/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessExecutionStackEntry.java index b59bec75e..992a3f665 100644 --- a/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessExecutionStackEntry.java +++ b/src/main/java/com/rapidminer/studio/concurrency/internal/util/ProcessExecutionStackEntry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/internal/NoStartupDialogRegistreredException.java b/src/main/java/com/rapidminer/studio/internal/NoStartupDialogRegistreredException.java index 305a1a6ad..c801e7a77 100644 --- a/src/main/java/com/rapidminer/studio/internal/NoStartupDialogRegistreredException.java +++ b/src/main/java/com/rapidminer/studio/internal/NoStartupDialogRegistreredException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/internal/ParameterServiceProvider.java b/src/main/java/com/rapidminer/studio/internal/ParameterServiceProvider.java index d9bcee427..253b16cf3 100644 --- a/src/main/java/com/rapidminer/studio/internal/ParameterServiceProvider.java +++ b/src/main/java/com/rapidminer/studio/internal/ParameterServiceProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/internal/ParameterServiceRegistry.java b/src/main/java/com/rapidminer/studio/internal/ParameterServiceRegistry.java index c646d9749..b309f4735 100644 --- a/src/main/java/com/rapidminer/studio/internal/ParameterServiceRegistry.java +++ b/src/main/java/com/rapidminer/studio/internal/ParameterServiceRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/internal/ProcessFlowFilterRegistry.java b/src/main/java/com/rapidminer/studio/internal/ProcessFlowFilterRegistry.java index 444227ce1..601001d89 100644 --- a/src/main/java/com/rapidminer/studio/internal/ProcessFlowFilterRegistry.java +++ b/src/main/java/com/rapidminer/studio/internal/ProcessFlowFilterRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/internal/ProcessStoppedRuntimeException.java b/src/main/java/com/rapidminer/studio/internal/ProcessStoppedRuntimeException.java index f69c81c22..a3f8e1f82 100644 --- a/src/main/java/com/rapidminer/studio/internal/ProcessStoppedRuntimeException.java +++ b/src/main/java/com/rapidminer/studio/internal/ProcessStoppedRuntimeException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/internal/Resources.java b/src/main/java/com/rapidminer/studio/internal/Resources.java index a3a0b21ab..defaa7861 100644 --- a/src/main/java/com/rapidminer/studio/internal/Resources.java +++ b/src/main/java/com/rapidminer/studio/internal/Resources.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/internal/RuleProvider.java b/src/main/java/com/rapidminer/studio/internal/RuleProvider.java index aa28fe03e..10b1a282e 100644 --- a/src/main/java/com/rapidminer/studio/internal/RuleProvider.java +++ b/src/main/java/com/rapidminer/studio/internal/RuleProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/internal/RuleProviderRegistry.java b/src/main/java/com/rapidminer/studio/internal/RuleProviderRegistry.java index 0ffba2c25..018380664 100644 --- a/src/main/java/com/rapidminer/studio/internal/RuleProviderRegistry.java +++ b/src/main/java/com/rapidminer/studio/internal/RuleProviderRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/internal/StartupDialogProvider.java b/src/main/java/com/rapidminer/studio/internal/StartupDialogProvider.java index f4db3b9f5..8c35bf222 100644 --- a/src/main/java/com/rapidminer/studio/internal/StartupDialogProvider.java +++ b/src/main/java/com/rapidminer/studio/internal/StartupDialogProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/internal/StartupDialogRegistry.java b/src/main/java/com/rapidminer/studio/internal/StartupDialogRegistry.java index aa1f9e2e4..de0e34e99 100644 --- a/src/main/java/com/rapidminer/studio/internal/StartupDialogRegistry.java +++ b/src/main/java/com/rapidminer/studio/internal/StartupDialogRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/DataSetReader.java b/src/main/java/com/rapidminer/studio/io/data/DataSetReader.java index 777c62d44..e923785e6 100644 --- a/src/main/java/com/rapidminer/studio/io/data/DataSetReader.java +++ b/src/main/java/com/rapidminer/studio/io/data/DataSetReader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/DefaultColumnMetaData.java b/src/main/java/com/rapidminer/studio/io/data/DefaultColumnMetaData.java index f022f61c0..2d281abb6 100644 --- a/src/main/java/com/rapidminer/studio/io/data/DefaultColumnMetaData.java +++ b/src/main/java/com/rapidminer/studio/io/data/DefaultColumnMetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/DefaultDataSetMetaData.java b/src/main/java/com/rapidminer/studio/io/data/DefaultDataSetMetaData.java index e373697af..b346ad2f6 100644 --- a/src/main/java/com/rapidminer/studio/io/data/DefaultDataSetMetaData.java +++ b/src/main/java/com/rapidminer/studio/io/data/DefaultDataSetMetaData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/HeaderRowBehindStartRowException.java b/src/main/java/com/rapidminer/studio/io/data/HeaderRowBehindStartRowException.java index f96cf2e80..3f8c9eece 100644 --- a/src/main/java/com/rapidminer/studio/io/data/HeaderRowBehindStartRowException.java +++ b/src/main/java/com/rapidminer/studio/io/data/HeaderRowBehindStartRowException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/HeaderRowNotFoundException.java b/src/main/java/com/rapidminer/studio/io/data/HeaderRowNotFoundException.java index 3819960ef..97844f07c 100644 --- a/src/main/java/com/rapidminer/studio/io/data/HeaderRowNotFoundException.java +++ b/src/main/java/com/rapidminer/studio/io/data/HeaderRowNotFoundException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/StartRowNotFoundException.java b/src/main/java/com/rapidminer/studio/io/data/StartRowNotFoundException.java index 3dbba6927..e6aad5def 100644 --- a/src/main/java/com/rapidminer/studio/io/data/StartRowNotFoundException.java +++ b/src/main/java/com/rapidminer/studio/io/data/StartRowNotFoundException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/ResultSetAdapter.java b/src/main/java/com/rapidminer/studio/io/data/internal/ResultSetAdapter.java index 7cd34c81c..608b9ac93 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/ResultSetAdapter.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/ResultSetAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/ResultSetAdapterUtils.java b/src/main/java/com/rapidminer/studio/io/data/internal/ResultSetAdapterUtils.java index c93852ea6..c5410b49e 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/ResultSetAdapterUtils.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/ResultSetAdapterUtils.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileDataSource.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileDataSource.java index 3237b5c9d..ac4a4fb5a 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileDataSource.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileDataSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileDataSourceFactory.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileDataSourceFactory.java index 205e4fc22..cb4e5f413 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileDataSourceFactory.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileDataSourceFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileLocationChooserView.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileLocationChooserView.java index de858e743..97c332a06 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileLocationChooserView.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileLocationChooserView.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileLocationWizardStep.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileLocationWizardStep.java index 3138a4d26..15717dd6b 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileLocationWizardStep.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/LocalFileLocationWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryDataSource.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryDataSource.java index d57590e3f..fade35ed9 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryDataSource.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryDataSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryDataSourceFactory.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryDataSourceFactory.java index 1a1999276..f75d2326a 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryDataSourceFactory.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryDataSourceFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryImportDestinationChooser.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryImportDestinationChooser.java index 083f29448..995f80862 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryImportDestinationChooser.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/BinaryImportDestinationChooser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/DumpToRepositoryStep.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/DumpToRepositoryStep.java index c7fda3fb5..f444e1829 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/DumpToRepositoryStep.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/binary/DumpToRepositoryStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -21,7 +21,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; - import javax.swing.JPanel; import com.rapidminer.core.io.gui.ImportWizard; @@ -33,6 +32,7 @@ import com.rapidminer.repository.Folder; import com.rapidminer.repository.RepositoryException; import com.rapidminer.repository.RepositoryLocation; +import com.rapidminer.repository.internal.remote.RemoteFolder; import com.rapidminer.studio.io.gui.internal.steps.AbstractToRepositoryStep; @@ -75,6 +75,11 @@ protected ProgressThread getImportThread(final RepositoryLocation entryLocation, @Override public void run() { try { + String originalFilename = source.getLocation().getFileName().toString(); + if (parent instanceof RemoteFolder && + ((RemoteFolder) parent).getRepository().isFileExtensionBlacklisted(originalFilename)) { + throw new RepositoryException("File extension blacklisted for " + originalFilename); + } parent.createBlobEntry(entryLocation.getName()); Entry newEntry = entryLocation.locateEntry(); if (newEntry == null) { @@ -82,7 +87,7 @@ public void run() { } BlobEntry blob = (BlobEntry) newEntry; try (FileInputStream fileInputStream = new FileInputStream(source.getLocation().toFile()); - OutputStream outputStream = blob.openOutputStream(getChooser().getMediaType())) { + OutputStream outputStream = blob.openOutputStream(getChooser().getMediaType())) { byte[] buffer = new byte[1024 * 20]; int length; while ((length = fileInputStream.read(buffer)) != -1) { diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSource.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSource.java index 2aabbecda..3131241e5 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSource.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSourceFactory.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSourceFactory.java index c142ebc2f..8dd48a162 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSourceFactory.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSourceFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVFormatSpecificationPanel.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVFormatSpecificationPanel.java index f1f8490df..beb5444e9 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVFormatSpecificationPanel.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVFormatSpecificationPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVFormatSpecificationWizardStep.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVFormatSpecificationWizardStep.java index 0b8f91ae0..5edeb0896 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVFormatSpecificationWizardStep.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVFormatSpecificationWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVResultSetAdapter.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVResultSetAdapter.java index d408fe694..1c0610ae1 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVResultSetAdapter.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/csv/CSVResultSetAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/CellRangeSelection.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/CellRangeSelection.java index c7be07de8..e8e3d05f4 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/CellRangeSelection.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/CellRangeSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSource.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSource.java index 4ead04c61..2ee249ab2 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSource.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -234,6 +234,8 @@ void createMetaData() throws DataSetException { configuration.setWorkbookFile(getLocation().toFile()); configuration.setSheet(getResultSetConfiguration().getSheet()); + configuration.setSheetByName(getResultSetConfiguration().getSheetByName()); + configuration.setSheetSelectionMode(getResultSetConfiguration().getSheetSelectionMode()); configuration.setColumnOffset(getResultSetConfiguration().getColumnOffset()); configuration.setColumnLast(getResultSetConfiguration().getColumnLast()); configuration.setEncoding(getResultSetConfiguration().getEncoding()); diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceConfiguration.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceConfiguration.java index e26deebc0..d8153c33c 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceConfiguration.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceConfiguration.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceFactory.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceFactory.java index 983247232..1b0ebebd0 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceFactory.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelResultSetAdapter.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelResultSetAdapter.java index 6323ad89e..714b11486 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelResultSetAdapter.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelResultSetAdapter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionModelListener.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionModelListener.java index bf134b5de..94280dba7 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionModelListener.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionModelListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionPanel.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionPanel.java index e56793b17..779f72f12 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionPanel.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionPanelModel.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionPanelModel.java index ae8e73d29..f5d0abe9f 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionPanelModel.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionPanelModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionWizardStep.java b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionWizardStep.java index accbe1218..e19348cc7 100644 --- a/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionWizardStep.java +++ b/src/main/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelSheetSelectionWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -143,6 +143,7 @@ public void viewWillBecomeInvisible(WizardDirection direction) throws InvalidCon // update the selected sheet configuration.setSheet(workbookSelectionPanel.getSheetIndex()); + configuration.setSheetSelectionMode(ExcelResultSetConfiguration.SheetSelectionMode.BY_INDEX); // update the cell range selection configuration.setColumnOffset(selection.getColumnIndexStart()); diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizard.java b/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizard.java index 07026ac4c..363b92d03 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizard.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizard.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizardBuilder.java b/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizardBuilder.java index df856014a..f8216c5fe 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizardBuilder.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizardBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizardUtils.java b/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizardUtils.java index 3f97c8f25..84d71c2e8 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizardUtils.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/DataImportWizardUtils.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/DataWizardEventType.java b/src/main/java/com/rapidminer/studio/io/gui/internal/DataWizardEventType.java index eb8b2b75e..5ac6b657b 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/DataWizardEventType.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/DataWizardEventType.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/AbstractToRepositoryStep.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/AbstractToRepositoryStep.java index 70606472f..e58e286e0 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/AbstractToRepositoryStep.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/AbstractToRepositoryStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/AbstractWizardStep.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/AbstractWizardStep.java index 9aa730f8d..da800cd13 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/AbstractWizardStep.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/AbstractWizardStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/LocationSelectionStep.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/LocationSelectionStep.java index 62a63daa0..123cbb51f 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/LocationSelectionStep.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/LocationSelectionStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/StoreToRepositoryStep.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/StoreToRepositoryStep.java index 32da6368e..b15073103 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/StoreToRepositoryStep.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/StoreToRepositoryStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/TypeSelectionStep.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/TypeSelectionStep.java index 19d9e4dc1..cb920eb74 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/TypeSelectionStep.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/TypeSelectionStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/TypeSelectionView.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/TypeSelectionView.java index 5187ffdff..46fa9a628 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/TypeSelectionView.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/TypeSelectionView.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/AbstractErrorWarningTableModel.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/AbstractErrorWarningTableModel.java index 3a32392d9..54f7570a6 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/AbstractErrorWarningTableModel.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/AbstractErrorWarningTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/CollapsibleErrorTable.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/CollapsibleErrorTable.java index 694fa8e22..9eeae12f4 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/CollapsibleErrorTable.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/CollapsibleErrorTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ColumnError.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ColumnError.java index 2fd43b4a3..42b245d08 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ColumnError.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ColumnError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataStep.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataStep.java index 411067cb7..1a16ced67 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataStep.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataStep.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableHeader.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableHeader.java index b849feb5d..9af4c9ea1 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableHeader.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableHeader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableModel.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableModel.java index 7d5faedf5..6f70075a2 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableModel.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataValidator.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataValidator.java index 0bee66c79..e11f10991 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataValidator.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataValidator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataView.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataView.java index ef7624c6d..293cd83d6 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataView.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataView.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ErrorWarningTableModel.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ErrorWarningTableModel.java index bf1ece3e3..7d5230add 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ErrorWarningTableModel.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ErrorWarningTableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ParsingError.java b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ParsingError.java index 5af0bb287..d81830bcb 100644 --- a/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ParsingError.java +++ b/src/main/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ParsingError.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/template/Template.java b/src/main/java/com/rapidminer/template/Template.java index e37e49973..bb52835f5 100644 --- a/src/main/java/com/rapidminer/template/Template.java +++ b/src/main/java/com/rapidminer/template/Template.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/template/TemplateManager.java b/src/main/java/com/rapidminer/template/TemplateManager.java index 0c62caf95..6e623aa91 100644 --- a/src/main/java/com/rapidminer/template/TemplateManager.java +++ b/src/main/java/com/rapidminer/template/TemplateManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/test/asserter/AsserterFactory.java b/src/main/java/com/rapidminer/test/asserter/AsserterFactory.java index 8783b1b06..419c8fc6a 100644 --- a/src/main/java/com/rapidminer/test/asserter/AsserterFactory.java +++ b/src/main/java/com/rapidminer/test/asserter/AsserterFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/test/asserter/AsserterFactoryRapidMiner.java b/src/main/java/com/rapidminer/test/asserter/AsserterFactoryRapidMiner.java index 6e87b66fe..8a8bf2c3c 100644 --- a/src/main/java/com/rapidminer/test/asserter/AsserterFactoryRapidMiner.java +++ b/src/main/java/com/rapidminer/test/asserter/AsserterFactoryRapidMiner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/test_utils/Asserter.java b/src/main/java/com/rapidminer/test_utils/Asserter.java index 5b40d90f7..76a1c5f35 100644 --- a/src/main/java/com/rapidminer/test_utils/Asserter.java +++ b/src/main/java/com/rapidminer/test_utils/Asserter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/test_utils/AsserterRegistry.java b/src/main/java/com/rapidminer/test_utils/AsserterRegistry.java index 9e2ad81c8..7d86becb5 100644 --- a/src/main/java/com/rapidminer/test_utils/AsserterRegistry.java +++ b/src/main/java/com/rapidminer/test_utils/AsserterRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/test_utils/RapidAssert.java b/src/main/java/com/rapidminer/test_utils/RapidAssert.java index c7e38ddd3..66e45288c 100644 --- a/src/main/java/com/rapidminer/test_utils/RapidAssert.java +++ b/src/main/java/com/rapidminer/test_utils/RapidAssert.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/test_utils/Util.java b/src/main/java/com/rapidminer/test_utils/Util.java index 6652f8bc4..bd426d908 100644 --- a/src/main/java/com/rapidminer/test_utils/Util.java +++ b/src/main/java/com/rapidminer/test_utils/Util.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/AbstractChangeAwareSaveable.java b/src/main/java/com/rapidminer/tools/AbstractChangeAwareSaveable.java index c4cc1c065..aaf78bb07 100644 --- a/src/main/java/com/rapidminer/tools/AbstractChangeAwareSaveable.java +++ b/src/main/java/com/rapidminer/tools/AbstractChangeAwareSaveable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/AbstractObservable.java b/src/main/java/com/rapidminer/tools/AbstractObservable.java index 6fa29f744..21c573cb4 100644 --- a/src/main/java/com/rapidminer/tools/AbstractObservable.java +++ b/src/main/java/com/rapidminer/tools/AbstractObservable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/BugReport.java b/src/main/java/com/rapidminer/tools/BugReport.java index 3d6d5df42..0e87a9086 100644 --- a/src/main/java/com/rapidminer/tools/BugReport.java +++ b/src/main/java/com/rapidminer/tools/BugReport.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/CSVParseException.java b/src/main/java/com/rapidminer/tools/CSVParseException.java index f6b7e5d78..4bdd39997 100644 --- a/src/main/java/com/rapidminer/tools/CSVParseException.java +++ b/src/main/java/com/rapidminer/tools/CSVParseException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ChangeAwareSaveable.java b/src/main/java/com/rapidminer/tools/ChangeAwareSaveable.java index 56c63a690..54d166348 100644 --- a/src/main/java/com/rapidminer/tools/ChangeAwareSaveable.java +++ b/src/main/java/com/rapidminer/tools/ChangeAwareSaveable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ClassColorMap.java b/src/main/java/com/rapidminer/tools/ClassColorMap.java index e8471e6df..1a4e41dc2 100644 --- a/src/main/java/com/rapidminer/tools/ClassColorMap.java +++ b/src/main/java/com/rapidminer/tools/ClassColorMap.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ClassNameMapper.java b/src/main/java/com/rapidminer/tools/ClassNameMapper.java index 086bb3bb7..345d7bf0d 100644 --- a/src/main/java/com/rapidminer/tools/ClassNameMapper.java +++ b/src/main/java/com/rapidminer/tools/ClassNameMapper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/DateParser.java b/src/main/java/com/rapidminer/tools/DateParser.java index 0cd3de2e9..495a4f95f 100644 --- a/src/main/java/com/rapidminer/tools/DateParser.java +++ b/src/main/java/com/rapidminer/tools/DateParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/DefaultMailSessionFactory.java b/src/main/java/com/rapidminer/tools/DefaultMailSessionFactory.java index e7251073f..2a796db6f 100644 --- a/src/main/java/com/rapidminer/tools/DefaultMailSessionFactory.java +++ b/src/main/java/com/rapidminer/tools/DefaultMailSessionFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/DelegatingObserver.java b/src/main/java/com/rapidminer/tools/DelegatingObserver.java index 3d126d730..9e2878ea4 100644 --- a/src/main/java/com/rapidminer/tools/DelegatingObserver.java +++ b/src/main/java/com/rapidminer/tools/DelegatingObserver.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/DominatingClassFinder.java b/src/main/java/com/rapidminer/tools/DominatingClassFinder.java index 5ad9c9824..835eaefa4 100644 --- a/src/main/java/com/rapidminer/tools/DominatingClassFinder.java +++ b/src/main/java/com/rapidminer/tools/DominatingClassFinder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/DynamicIcon.java b/src/main/java/com/rapidminer/tools/DynamicIcon.java index 1e7d459f4..52a6871e2 100644 --- a/src/main/java/com/rapidminer/tools/DynamicIcon.java +++ b/src/main/java/com/rapidminer/tools/DynamicIcon.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/DynamicIconUrlStreamHandler.java b/src/main/java/com/rapidminer/tools/DynamicIconUrlStreamHandler.java index 58b87ee67..ca93c7efe 100644 --- a/src/main/java/com/rapidminer/tools/DynamicIconUrlStreamHandler.java +++ b/src/main/java/com/rapidminer/tools/DynamicIconUrlStreamHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ExtensibleResourceBundle.java b/src/main/java/com/rapidminer/tools/ExtensibleResourceBundle.java index f0faee92f..e5df29297 100644 --- a/src/main/java/com/rapidminer/tools/ExtensibleResourceBundle.java +++ b/src/main/java/com/rapidminer/tools/ExtensibleResourceBundle.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/FileSystemService.java b/src/main/java/com/rapidminer/tools/FileSystemService.java index b2b781d01..65c7b44a6 100644 --- a/src/main/java/com/rapidminer/tools/FileSystemService.java +++ b/src/main/java/com/rapidminer/tools/FileSystemService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -37,9 +37,15 @@ public class FileSystemService { /** folder in which extensions have their workspace */ private static final String RAPIDMINER_EXTENSIONS_FOLDER = "extensions"; /** folder in which extensions get their own folder to work with files */ - private static final String RAPIDMINER_EXTENSIONS_WORKSPACE_FOLDER = "workspace"; + public static final String RAPIDMINER_EXTENSIONS_WORKSPACE_FOLDER = "workspace"; /** folder which can be used to share data between extensions */ private static final String RAPIDMINER_SHARED_DATA = "shared data"; + /** folder which can be used for internal caching of the Global Search feature */ + private static final String RAPIDMINER_INTERNAL_CACHE = "internal cache"; + /** folder which can be used for internal caching of the Global Search feature */ + private static final String RAPIDMINER_INTERNAL_CACHE_SEARCH = "search"; + + public static final String RAPIDMINER_INTERNAL_CACHE_SEARCH_FULL = "internal cache/search"; /** folder which can be used to load additional building blocks */ public static final String RAPIDMINER_BUILDINGBLOCKS = "buildingblocks"; @@ -76,52 +82,16 @@ public static File getUserRapidMinerDir() { File extensionsWorkspaceFolder = new File(extensionsWorkspaceRootFolder, RAPIDMINER_EXTENSIONS_WORKSPACE_FOLDER); File sharedDataDir = new File(userHomeDir, RAPIDMINER_SHARED_DATA); File buildingBlocksFolder = new File(userHomeDir, RAPIDMINER_BUILDINGBLOCKS); - - if (!userHomeDir.exists()) { - LogService.getRoot().log(Level.CONFIG, "com.rapidminer.tools.FileSystemService.creating_directory", userHomeDir); - boolean result = userHomeDir.mkdir(); - if (!result) { - LogService.getRoot().log(Level.WARNING, - "com.rapidminer.tools.FileSystemService.creating_home_directory_error", userHomeDir); - } - } - if (!extensionsWorkspaceRootFolder.exists()) { - LogService.getRoot().log(Level.CONFIG, "com.rapidminer.tools.FileSystemService.creating_directory", - extensionsWorkspaceRootFolder); - boolean result = extensionsWorkspaceRootFolder.mkdir(); - if (!result) { - LogService.getRoot().log(Level.WARNING, - "com.rapidminer.tools.FileSystemService.creating_home_directory_error", - extensionsWorkspaceRootFolder); - } - } - if (!extensionsWorkspaceFolder.exists()) { - LogService.getRoot().log(Level.CONFIG, "com.rapidminer.tools.FileSystemService.creating_directory", - extensionsWorkspaceFolder); - boolean result = extensionsWorkspaceFolder.mkdir(); - if (!result) { - LogService.getRoot().log(Level.WARNING, - "com.rapidminer.tools.FileSystemService.creating_home_directory_error", extensionsWorkspaceFolder); - } - } - if (!sharedDataDir.exists()) { - LogService.getRoot().log(Level.CONFIG, "com.rapidminer.tools.FileSystemService.creating_directory", - sharedDataDir); - boolean result = sharedDataDir.mkdir(); - if (!result) { - LogService.getRoot().log(Level.WARNING, - "com.rapidminer.tools.FileSystemService.creating_home_directory_error", sharedDataDir); - } - } - if (!buildingBlocksFolder.exists()) { - LogService.getRoot().log(Level.CONFIG, "com.rapidminer.tools.FileSystemService.creating_directory", - buildingBlocksFolder); - boolean result = buildingBlocksFolder.mkdir(); - if (!result) { - LogService.getRoot().log(Level.WARNING, - "com.rapidminer.tools.FileSystemService.creating_home_directory_error", buildingBlocksFolder); - } - } + File internalCacheFolder = new File(userHomeDir, RAPIDMINER_INTERNAL_CACHE); + File internalCacheSearchFolder = new File(internalCacheFolder, RAPIDMINER_INTERNAL_CACHE_SEARCH); + + checkAndCreateFolder(userHomeDir); + checkAndCreateFolder(extensionsWorkspaceRootFolder); + checkAndCreateFolder(internalCacheFolder); + checkAndCreateFolder(internalCacheSearchFolder); + checkAndCreateFolder(extensionsWorkspaceFolder); + checkAndCreateFolder(sharedDataDir); + checkAndCreateFolder(buildingBlocksFolder); return userHomeDir; } @@ -187,4 +157,22 @@ public static File getSourceResourceFile(String name) { } } + + /** + * Tries to create the given folder location if it does not yet exist. + * + * @param newFolder + * the folder location in question. + */ + private static void checkAndCreateFolder(File newFolder) { + if (!newFolder.exists()) { + LogService.getRoot().log(Level.CONFIG, "com.rapidminer.tools.FileSystemService.creating_directory", newFolder); + boolean result = newFolder.mkdir(); + if (!result) { + LogService.getRoot().log(Level.WARNING, + "com.rapidminer.tools.FileSystemService.creating_home_directory_error", newFolder); + } + } + } + } diff --git a/src/main/java/com/rapidminer/tools/FixedConsoleHandler.java b/src/main/java/com/rapidminer/tools/FixedConsoleHandler.java index 1d4432276..da3ce0cb2 100644 --- a/src/main/java/com/rapidminer/tools/FixedConsoleHandler.java +++ b/src/main/java/com/rapidminer/tools/FixedConsoleHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/FontTools.java b/src/main/java/com/rapidminer/tools/FontTools.java index 3747ddc45..3c725dbf8 100644 --- a/src/main/java/com/rapidminer/tools/FontTools.java +++ b/src/main/java/com/rapidminer/tools/FontTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/GenericOperatorFactory.java b/src/main/java/com/rapidminer/tools/GenericOperatorFactory.java index ecfa6aa70..18df4532f 100644 --- a/src/main/java/com/rapidminer/tools/GenericOperatorFactory.java +++ b/src/main/java/com/rapidminer/tools/GenericOperatorFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/GlobCompiler.java b/src/main/java/com/rapidminer/tools/GlobCompiler.java index 141aa7bca..70a31fc36 100644 --- a/src/main/java/com/rapidminer/tools/GlobCompiler.java +++ b/src/main/java/com/rapidminer/tools/GlobCompiler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/GlobalAuthenticator.java b/src/main/java/com/rapidminer/tools/GlobalAuthenticator.java index 2daab2698..34430ec32 100644 --- a/src/main/java/com/rapidminer/tools/GlobalAuthenticator.java +++ b/src/main/java/com/rapidminer/tools/GlobalAuthenticator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/GroupTree.java b/src/main/java/com/rapidminer/tools/GroupTree.java index ba6ce49a6..057ee41a9 100644 --- a/src/main/java/com/rapidminer/tools/GroupTree.java +++ b/src/main/java/com/rapidminer/tools/GroupTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/GroupTreeNode.java b/src/main/java/com/rapidminer/tools/GroupTreeNode.java index e24fcc3c4..f1263e51e 100644 --- a/src/main/java/com/rapidminer/tools/GroupTreeNode.java +++ b/src/main/java/com/rapidminer/tools/GroupTreeNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/GroupTreeRoot.java b/src/main/java/com/rapidminer/tools/GroupTreeRoot.java index 9e94084d2..ff5503f82 100644 --- a/src/main/java/com/rapidminer/tools/GroupTreeRoot.java +++ b/src/main/java/com/rapidminer/tools/GroupTreeRoot.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/I18N.java b/src/main/java/com/rapidminer/tools/I18N.java index 1e1a01b31..9f211d386 100644 --- a/src/main/java/com/rapidminer/tools/I18N.java +++ b/src/main/java/com/rapidminer/tools/I18N.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -188,7 +188,7 @@ public static String getMessage(ResourceBundle bundle, String key, Object... arg } } catch (MissingResourceException e) { - LogService.getRoot().log(Level.FINE, "com.rapidminer.tools.I18N.missing_key", key); + LogService.getRoot().log(Level.FINEST, "com.rapidminer.tools.I18N.missing_key", key); return key; } } diff --git a/src/main/java/com/rapidminer/tools/IterationArrayList.java b/src/main/java/com/rapidminer/tools/IterationArrayList.java index e07b2b6d7..78295da0e 100644 --- a/src/main/java/com/rapidminer/tools/IterationArrayList.java +++ b/src/main/java/com/rapidminer/tools/IterationArrayList.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/LaunchListener.java b/src/main/java/com/rapidminer/tools/LaunchListener.java index a702fe5b5..188227107 100644 --- a/src/main/java/com/rapidminer/tools/LaunchListener.java +++ b/src/main/java/com/rapidminer/tools/LaunchListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/LineParser.java b/src/main/java/com/rapidminer/tools/LineParser.java index 6fb162ff9..47b096ebc 100644 --- a/src/main/java/com/rapidminer/tools/LineParser.java +++ b/src/main/java/com/rapidminer/tools/LineParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/LogService.java b/src/main/java/com/rapidminer/tools/LogService.java index a14cda0e0..f432406e3 100644 --- a/src/main/java/com/rapidminer/tools/LogService.java +++ b/src/main/java/com/rapidminer/tools/LogService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/LoggingHandler.java b/src/main/java/com/rapidminer/tools/LoggingHandler.java index 1dd93eb12..1766288e2 100644 --- a/src/main/java/com/rapidminer/tools/LoggingHandler.java +++ b/src/main/java/com/rapidminer/tools/LoggingHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/MailSender.java b/src/main/java/com/rapidminer/tools/MailSender.java index 706bbc703..efab8c0f1 100644 --- a/src/main/java/com/rapidminer/tools/MailSender.java +++ b/src/main/java/com/rapidminer/tools/MailSender.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/MailSenderSMTP.java b/src/main/java/com/rapidminer/tools/MailSenderSMTP.java index 8defee7e3..07026f4df 100644 --- a/src/main/java/com/rapidminer/tools/MailSenderSMTP.java +++ b/src/main/java/com/rapidminer/tools/MailSenderSMTP.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/MailSenderSendmail.java b/src/main/java/com/rapidminer/tools/MailSenderSendmail.java index b4f66322f..068720ef3 100644 --- a/src/main/java/com/rapidminer/tools/MailSenderSendmail.java +++ b/src/main/java/com/rapidminer/tools/MailSenderSendmail.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/MailSessionFactory.java b/src/main/java/com/rapidminer/tools/MailSessionFactory.java index b4674f444..4500209eb 100644 --- a/src/main/java/com/rapidminer/tools/MailSessionFactory.java +++ b/src/main/java/com/rapidminer/tools/MailSessionFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/MailUtilities.java b/src/main/java/com/rapidminer/tools/MailUtilities.java index f8fa11b61..0ed9560d1 100644 --- a/src/main/java/com/rapidminer/tools/MailUtilities.java +++ b/src/main/java/com/rapidminer/tools/MailUtilities.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/NetTools.java b/src/main/java/com/rapidminer/tools/NetTools.java index f9594f0f3..366219f2a 100644 --- a/src/main/java/com/rapidminer/tools/NetTools.java +++ b/src/main/java/com/rapidminer/tools/NetTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/NonClosingZipInputStream.java b/src/main/java/com/rapidminer/tools/NonClosingZipInputStream.java index 6c927f37a..f7fdd4aeb 100644 --- a/src/main/java/com/rapidminer/tools/NonClosingZipInputStream.java +++ b/src/main/java/com/rapidminer/tools/NonClosingZipInputStream.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/NumberParser.java b/src/main/java/com/rapidminer/tools/NumberParser.java index 59dfde519..f7667e2bd 100644 --- a/src/main/java/com/rapidminer/tools/NumberParser.java +++ b/src/main/java/com/rapidminer/tools/NumberParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ObjectVisualizerService.java b/src/main/java/com/rapidminer/tools/ObjectVisualizerService.java index a69c1e492..4d642c5af 100644 --- a/src/main/java/com/rapidminer/tools/ObjectVisualizerService.java +++ b/src/main/java/com/rapidminer/tools/ObjectVisualizerService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/Observable.java b/src/main/java/com/rapidminer/tools/Observable.java index 9227a7134..939b06104 100644 --- a/src/main/java/com/rapidminer/tools/Observable.java +++ b/src/main/java/com/rapidminer/tools/Observable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/Observer.java b/src/main/java/com/rapidminer/tools/Observer.java index 560fba6ef..9dd84963b 100644 --- a/src/main/java/com/rapidminer/tools/Observer.java +++ b/src/main/java/com/rapidminer/tools/Observer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/Ontology.java b/src/main/java/com/rapidminer/tools/Ontology.java index 01766492c..1bf6f92fb 100644 --- a/src/main/java/com/rapidminer/tools/Ontology.java +++ b/src/main/java/com/rapidminer/tools/Ontology.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/OperatorResourceConsumptionHandler.java b/src/main/java/com/rapidminer/tools/OperatorResourceConsumptionHandler.java index 1a7412c23..6e25d21e7 100644 --- a/src/main/java/com/rapidminer/tools/OperatorResourceConsumptionHandler.java +++ b/src/main/java/com/rapidminer/tools/OperatorResourceConsumptionHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/OperatorService.java b/src/main/java/com/rapidminer/tools/OperatorService.java index 8fe084f3c..2ae306c4d 100644 --- a/src/main/java/com/rapidminer/tools/OperatorService.java +++ b/src/main/java/com/rapidminer/tools/OperatorService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -35,15 +35,13 @@ import java.util.Set; import java.util.TreeMap; import java.util.logging.Level; - -import javax.xml.parsers.DocumentBuilderFactory; - import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import com.rapidminer.RapidMiner; +import com.rapidminer.gui.processeditor.search.OperatorGlobalSearch; import com.rapidminer.io.process.XMLTools; import com.rapidminer.operator.IOObject; import com.rapidminer.operator.Operator; @@ -55,6 +53,7 @@ import com.rapidminer.operator.ports.Ports; import com.rapidminer.operator.ports.metadata.MetaData; import com.rapidminer.operator.tools.OperatorCreationHook; +import com.rapidminer.search.GlobalSearchable; import com.rapidminer.tools.documentation.OperatorDocBundle; import com.rapidminer.tools.documentation.OperatorDocumentation; import com.rapidminer.tools.documentation.XMLOperatorDocBundle; @@ -123,7 +122,14 @@ public static interface OperatorServiceListener { private static final GroupTreeRoot groupTreeRoot = new GroupTreeRoot(); + private static GlobalSearchable operatorSearchable; + public static void init() { + // this serves 2 purposes: + // 1: Add Global Search capabilities for operators by registering OperatorServiceListener + // 2: Keep reference so that weak listener reference is not killed via GC + operatorSearchable = new OperatorGlobalSearch(); + URL mainOperators = getMainOperators(); if (mainOperators == null) { LogService.getRoot().log(Level.SEVERE, @@ -256,7 +262,7 @@ public static void registerOperators(String name, InputStream operatorsXML, Clas String version = null; Document document = null; try { - document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(operatorsXML); + document = XMLTools.createDocumentBuilder().parse(operatorsXML); if (!document.getDocumentElement().getTagName().toLowerCase().equals("operators")) { LogService.getRoot().log(Level.SEVERE, "com.rapidminer.tools.OperatorService.operator_description_file_outermost_tag", name); diff --git a/src/main/java/com/rapidminer/tools/OutputStreamMultiplier.java b/src/main/java/com/rapidminer/tools/OutputStreamMultiplier.java index 6d5d1318b..6def7873c 100644 --- a/src/main/java/com/rapidminer/tools/OutputStreamMultiplier.java +++ b/src/main/java/com/rapidminer/tools/OutputStreamMultiplier.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ParameterService.java b/src/main/java/com/rapidminer/tools/ParameterService.java index 88cda7b85..566d10c6e 100644 --- a/src/main/java/com/rapidminer/tools/ParameterService.java +++ b/src/main/java/com/rapidminer/tools/ParameterService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -27,6 +27,7 @@ import java.io.InputStream; import java.security.AccessControlException; import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.Collection; import java.util.HashSet; import java.util.LinkedList; @@ -172,11 +173,6 @@ public static void setParameterValue(ParameterType type, String value) { * might be removed in further versions. */ public static void setParameterValue(String key, String value) { - // this might be removed later. It remains only for compatibility - if (System.getProperty(key) == null) { - System.setProperty(key, value); - } - // Before changing, check if the Parameter is protected if (RapidMiner.isParameterProtected(key)) { // If yes, only extensions with enough permissions should be allowed to change it diff --git a/src/main/java/com/rapidminer/tools/ParentResolvingMap.java b/src/main/java/com/rapidminer/tools/ParentResolvingMap.java index f210e450e..00aabf3f7 100644 --- a/src/main/java/com/rapidminer/tools/ParentResolvingMap.java +++ b/src/main/java/com/rapidminer/tools/ParentResolvingMap.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/PasswordInputCanceledException.java b/src/main/java/com/rapidminer/tools/PasswordInputCanceledException.java index b9d092019..9d4f680af 100644 --- a/src/main/java/com/rapidminer/tools/PasswordInputCanceledException.java +++ b/src/main/java/com/rapidminer/tools/PasswordInputCanceledException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/PlatformUtilities.java b/src/main/java/com/rapidminer/tools/PlatformUtilities.java index cde36d28f..bd5a5a0fd 100644 --- a/src/main/java/com/rapidminer/tools/PlatformUtilities.java +++ b/src/main/java/com/rapidminer/tools/PlatformUtilities.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ProcessTools.java b/src/main/java/com/rapidminer/tools/ProcessTools.java index 43e492701..0ba26e34b 100644 --- a/src/main/java/com/rapidminer/tools/ProcessTools.java +++ b/src/main/java/com/rapidminer/tools/ProcessTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ProgressListener.java b/src/main/java/com/rapidminer/tools/ProgressListener.java index b64455881..330a0f777 100644 --- a/src/main/java/com/rapidminer/tools/ProgressListener.java +++ b/src/main/java/com/rapidminer/tools/ProgressListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ProxySettings.java b/src/main/java/com/rapidminer/tools/ProxySettings.java index 779fa818d..36d26453e 100644 --- a/src/main/java/com/rapidminer/tools/ProxySettings.java +++ b/src/main/java/com/rapidminer/tools/ProxySettings.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/RMUrlHandler.java b/src/main/java/com/rapidminer/tools/RMUrlHandler.java index 31d6a8d6c..81f8b9bce 100644 --- a/src/main/java/com/rapidminer/tools/RMUrlHandler.java +++ b/src/main/java/com/rapidminer/tools/RMUrlHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/RandomGenerator.java b/src/main/java/com/rapidminer/tools/RandomGenerator.java index 50f7e2614..b6c65053b 100644 --- a/src/main/java/com/rapidminer/tools/RandomGenerator.java +++ b/src/main/java/com/rapidminer/tools/RandomGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ReferenceCache.java b/src/main/java/com/rapidminer/tools/ReferenceCache.java index 15d210ed3..2dbf372fa 100644 --- a/src/main/java/com/rapidminer/tools/ReferenceCache.java +++ b/src/main/java/com/rapidminer/tools/ReferenceCache.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ResourceSource.java b/src/main/java/com/rapidminer/tools/ResourceSource.java index 8128d79af..c02c0662a 100644 --- a/src/main/java/com/rapidminer/tools/ResourceSource.java +++ b/src/main/java/com/rapidminer/tools/ResourceSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/ResultService.java b/src/main/java/com/rapidminer/tools/ResultService.java index 613f3d38a..369d33ab6 100644 --- a/src/main/java/com/rapidminer/tools/ResultService.java +++ b/src/main/java/com/rapidminer/tools/ResultService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/SimpleObservable.java b/src/main/java/com/rapidminer/tools/SimpleObservable.java index 159e89fe6..cd2fd1a5b 100644 --- a/src/main/java/com/rapidminer/tools/SimpleObservable.java +++ b/src/main/java/com/rapidminer/tools/SimpleObservable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/StrictDecimalFormat.java b/src/main/java/com/rapidminer/tools/StrictDecimalFormat.java index 271a099d6..d96c934f1 100644 --- a/src/main/java/com/rapidminer/tools/StrictDecimalFormat.java +++ b/src/main/java/com/rapidminer/tools/StrictDecimalFormat.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -87,7 +87,7 @@ public Number parse(String source) throws ParseException { * throw an error if a parse error has occurred somewhere in the source string, not only at * the beginning as in {@link NumberFormat} */ - if (parsePosition.getIndex() < source.length()) { + if (result == null || parsePosition.getIndex() < source.length()) { // try also with lowercase "e" as the exponent symbol (generally, lowercase version of // the exponent separator) String exponentSeparator = getDecimalFormatSymbols().getExponentSeparator(); diff --git a/src/main/java/com/rapidminer/tools/StringColorMap.java b/src/main/java/com/rapidminer/tools/StringColorMap.java index 01085a65f..56f39b506 100644 --- a/src/main/java/com/rapidminer/tools/StringColorMap.java +++ b/src/main/java/com/rapidminer/tools/StringColorMap.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/StringProperties.java b/src/main/java/com/rapidminer/tools/StringProperties.java index d83c4f4c6..914e19030 100644 --- a/src/main/java/com/rapidminer/tools/StringProperties.java +++ b/src/main/java/com/rapidminer/tools/StringProperties.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/SystemInfoUtilities.java b/src/main/java/com/rapidminer/tools/SystemInfoUtilities.java index 79a7805b2..b4574228a 100644 --- a/src/main/java/com/rapidminer/tools/SystemInfoUtilities.java +++ b/src/main/java/com/rapidminer/tools/SystemInfoUtilities.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/TimeFormat.java b/src/main/java/com/rapidminer/tools/TimeFormat.java index 4dc2757df..87783f439 100644 --- a/src/main/java/com/rapidminer/tools/TimeFormat.java +++ b/src/main/java/com/rapidminer/tools/TimeFormat.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/Tools.java b/src/main/java/com/rapidminer/tools/Tools.java index a5ac15b6e..e3cab0eb5 100644 --- a/src/main/java/com/rapidminer/tools/Tools.java +++ b/src/main/java/com/rapidminer/tools/Tools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -47,6 +47,7 @@ import java.util.Arrays; import java.util.Calendar; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; @@ -66,10 +67,7 @@ import java.util.zip.GZIPInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; - import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; @@ -84,6 +82,7 @@ import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.VersionNumber; import com.rapidminer.io.process.XMLImporter; +import com.rapidminer.io.process.XMLTools; import com.rapidminer.operator.Operator; import com.rapidminer.operator.OperatorException; import com.rapidminer.operator.ProcessStoppedException; @@ -188,7 +187,7 @@ protected DateFormat initialValue() { /** the current settings value of number of fraction digits shown */ private static int numberOfFractionDigits; - private static final LinkedList ALL_RESOURCE_SOURCES = new LinkedList<>(); + private static final List ALL_RESOURCE_SOURCES = Collections.synchronizedList(new LinkedList<>()); public static final String RESOURCE_PREFIX = "com/rapidminer/resources/"; @@ -1004,7 +1003,7 @@ public static void addResourceSource(ResourceSource source) { /** Adds a new resource source before the others. Might be used by plugins etc. */ public static void prependResourceSource(ResourceSource source) { - ALL_RESOURCE_SOURCES.addFirst(source); + ALL_RESOURCE_SOURCES.add(0, source); } public static URL getResource(ClassLoader loader, String name) { @@ -1022,12 +1021,12 @@ public static URL getResource(ClassLoader loader, String prefix, String name) { * only allowed to use '/' as separator instead of File.separator! */ public static URL getResource(String name) { - Iterator i = ALL_RESOURCE_SOURCES.iterator(); - while (i.hasNext()) { - ResourceSource source = i.next(); - URL url = source.getResource(name); - if (url != null) { - return url; + synchronized (ALL_RESOURCE_SOURCES) { + for (ResourceSource source : ALL_RESOURCE_SOURCES) { + URL url = source.getResource(name); + if (url != null) { + return url; + } } } @@ -1079,8 +1078,7 @@ public static String readTextFile(File file) throws IOException { try (FileInputStream inStream = new FileInputStream(file)) { try { - DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); + DocumentBuilder documentBuilder = XMLTools.createDocumentBuilder(); Document processXmlDocument = documentBuilder.parse(inStream); XPathFactory xPathFactory = XPathFactory.newInstance(); XPath xPath = xPathFactory.newXPath(); @@ -1093,8 +1091,6 @@ public static String readTextFile(File file) throws IOException { useFallback = true; } catch (SAXException e) { useFallback = true; - } catch (ParserConfigurationException e) { - useFallback = true; } catch (IOException e) { useFallback = true; } catch (NumberFormatException e) { diff --git a/src/main/java/com/rapidminer/tools/WebServiceTools.java b/src/main/java/com/rapidminer/tools/WebServiceTools.java index 2f19c62a1..5736eaf0e 100644 --- a/src/main/java/com/rapidminer/tools/WebServiceTools.java +++ b/src/main/java/com/rapidminer/tools/WebServiceTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -26,9 +26,12 @@ import java.net.URLConnection; import java.util.Map; import java.util.logging.Level; - import javax.xml.ws.BindingProvider; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.rapidminer.tools.parameter.ParameterChangeListener; @@ -154,6 +157,30 @@ public static InputStream openStreamFromURL(URL url, int timeout) throws IOExcep return connection.getInputStream(); } + /** + * Tries to create an instance of the defined entity class from a JSON String. + * + * @param jsonString + * the JSON as string + * @param entityClass + * the class to parse the json string into + * @param failOnUnknown + * if {@code true}, parsing will fail with a {@link JsonMappingException} if unknown properties are encountered + * @return the parsed object + * @throws JsonParseException + * see {@link ObjectMapper#readValue(String, Class)} + * @throws JsonMappingException + * see {@link ObjectMapper#readValue(String, Class)} + * @throws IOException + * see {@link ObjectMapper#readValue(String, Class)} + * @since 8.1 + */ + public static T parseJsonString(String jsonString, Class entityClass, boolean failOnUnknown) throws JsonParseException, JsonMappingException, IOException { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, failOnUnknown); + return mapper.readValue(jsonString, entityClass); + } + /** Clears all (Java-)cached credentials for Web services. */ public static void clearAuthCache() { try { @@ -169,4 +196,5 @@ public static void clearAuthCache() { LogService.getRoot().log(Level.WARNING, "Could not clear auth cache!", t); } } + } diff --git a/src/main/java/com/rapidminer/tools/WeightedObject.java b/src/main/java/com/rapidminer/tools/WeightedObject.java index eb54818d1..bc99e84b1 100644 --- a/src/main/java/com/rapidminer/tools/WeightedObject.java +++ b/src/main/java/com/rapidminer/tools/WeightedObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/WrapperLoggingHandler.java b/src/main/java/com/rapidminer/tools/WrapperLoggingHandler.java index 88a29497f..6e2df0384 100644 --- a/src/main/java/com/rapidminer/tools/WrapperLoggingHandler.java +++ b/src/main/java/com/rapidminer/tools/WrapperLoggingHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/WriterMultiplier.java b/src/main/java/com/rapidminer/tools/WriterMultiplier.java index f0194819f..b7e5c2e73 100644 --- a/src/main/java/com/rapidminer/tools/WriterMultiplier.java +++ b/src/main/java/com/rapidminer/tools/WriterMultiplier.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/XMLException.java b/src/main/java/com/rapidminer/tools/XMLException.java index d9d9a1a6e..ef2db5bd2 100644 --- a/src/main/java/com/rapidminer/tools/XMLException.java +++ b/src/main/java/com/rapidminer/tools/XMLException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/XMLParserException.java b/src/main/java/com/rapidminer/tools/XMLParserException.java new file mode 100644 index 000000000..479bee3ee --- /dev/null +++ b/src/main/java/com/rapidminer/tools/XMLParserException.java @@ -0,0 +1,19 @@ +/** + * Copyright (C) 2001-2018 RapidMiner GmbH + */ +package com.rapidminer.tools; + +import java.io.IOException; + + +/** + * Marker Exception to use special Exception handling if required + * + * @author Andreas Timm + * @since 8.1 + */ +public class XMLParserException extends IOException { + public XMLParserException(Throwable e) { + super(e); + } +} diff --git a/src/main/java/com/rapidminer/tools/XMLSerialization.java b/src/main/java/com/rapidminer/tools/XMLSerialization.java index f402e0825..b93b1bb90 100644 --- a/src/main/java/com/rapidminer/tools/XMLSerialization.java +++ b/src/main/java/com/rapidminer/tools/XMLSerialization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/XmlRpcHandler.java b/src/main/java/com/rapidminer/tools/XmlRpcHandler.java index 945f949ef..14304211f 100644 --- a/src/main/java/com/rapidminer/tools/XmlRpcHandler.java +++ b/src/main/java/com/rapidminer/tools/XmlRpcHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/att/AttributeDataSource.java b/src/main/java/com/rapidminer/tools/att/AttributeDataSource.java index f9f24be84..1648f3d18 100644 --- a/src/main/java/com/rapidminer/tools/att/AttributeDataSource.java +++ b/src/main/java/com/rapidminer/tools/att/AttributeDataSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -28,9 +28,6 @@ import java.util.StringTokenizer; import java.util.logging.Level; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -42,6 +39,7 @@ import com.rapidminer.example.Attributes; import com.rapidminer.example.table.AttributeFactory; import com.rapidminer.example.table.NominalMapping; +import com.rapidminer.io.process.XMLTools; import com.rapidminer.tools.LogService; import com.rapidminer.tools.LoggingHandler; import com.rapidminer.tools.Ontology; @@ -128,8 +126,8 @@ public Element writeXML(Document document, File defaultSource) throws IOExceptio /** Returns a list of {@link AttributeDataSource}s read from the file. */ public static AttributeDataSources createAttributeDataSources(File attributeDescriptionFile, boolean sourceColRequired, - LoggingHandler logging) throws XMLException, ParserConfigurationException, SAXException, IOException { - Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(attributeDescriptionFile); + LoggingHandler logging) throws XMLException, SAXException, IOException { + Document document = XMLTools.createDocumentBuilder().parse(attributeDescriptionFile); Element attributeSet = document.getDocumentElement(); if (!attributeSet.getTagName().equals("attributeset")) { diff --git a/src/main/java/com/rapidminer/tools/att/AttributeDataSourceCreator.java b/src/main/java/com/rapidminer/tools/att/AttributeDataSourceCreator.java index 08d37788e..803fd641b 100644 --- a/src/main/java/com/rapidminer/tools/att/AttributeDataSourceCreator.java +++ b/src/main/java/com/rapidminer/tools/att/AttributeDataSourceCreator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/att/AttributeDataSources.java b/src/main/java/com/rapidminer/tools/att/AttributeDataSources.java index 2f12924d4..232172aae 100644 --- a/src/main/java/com/rapidminer/tools/att/AttributeDataSources.java +++ b/src/main/java/com/rapidminer/tools/att/AttributeDataSources.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/att/AttributeSet.java b/src/main/java/com/rapidminer/tools/att/AttributeSet.java index 0db25ea20..e527f0b1c 100644 --- a/src/main/java/com/rapidminer/tools/att/AttributeSet.java +++ b/src/main/java/com/rapidminer/tools/att/AttributeSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/cipher/CipherException.java b/src/main/java/com/rapidminer/tools/cipher/CipherException.java index dc5bb72ba..068d47d71 100644 --- a/src/main/java/com/rapidminer/tools/cipher/CipherException.java +++ b/src/main/java/com/rapidminer/tools/cipher/CipherException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/cipher/CipherKeyProvider.java b/src/main/java/com/rapidminer/tools/cipher/CipherKeyProvider.java index 9bc60af67..0d593b2b5 100644 --- a/src/main/java/com/rapidminer/tools/cipher/CipherKeyProvider.java +++ b/src/main/java/com/rapidminer/tools/cipher/CipherKeyProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/cipher/CipherTools.java b/src/main/java/com/rapidminer/tools/cipher/CipherTools.java index edc75283c..21ad9c969 100644 --- a/src/main/java/com/rapidminer/tools/cipher/CipherTools.java +++ b/src/main/java/com/rapidminer/tools/cipher/CipherTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -112,15 +112,7 @@ public static String encrypt(String text, Key key) throws CipherException { base64 = Base64.encodeBytes(outputBytes); } return base64; - } catch (NoSuchAlgorithmException e) { - throw new CipherException("Failed to encrypt text: " + e.getMessage()); - } catch (NoSuchPaddingException e) { - throw new CipherException("Failed to encrypt text: " + e.getMessage()); - } catch (InvalidKeyException e) { - throw new CipherException("Failed to encrypt text: " + e.getMessage()); - } catch (IllegalBlockSizeException e) { - throw new CipherException("Failed to encrypt text: " + e.getMessage()); - } catch (BadPaddingException e) { + } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) { throw new CipherException("Failed to encrypt text: " + e.getMessage()); } } @@ -168,17 +160,7 @@ public static String decrypt(String text, Key key) throws CipherException { byte[] outputBytes = cipher.doFinal(encrypted); String ret = new String(outputBytes); return ret; - } catch (NoSuchAlgorithmException e) { - throw new CipherException("Failed to decrypt text: " + e.getMessage()); - } catch (NoSuchPaddingException e) { - throw new CipherException("Failed to decrypt text: " + e.getMessage()); - } catch (IOException e) { - throw new CipherException("Failed to decrypt text: " + e.getMessage()); - } catch (InvalidKeyException e) { - throw new CipherException("Failed to decrypt text: " + e.getMessage()); - } catch (IllegalBlockSizeException e) { - throw new CipherException("Failed to decrypt text: " + e.getMessage()); - } catch (BadPaddingException e) { + } catch (NoSuchAlgorithmException | NoSuchPaddingException | IOException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException | IllegalArgumentException e) { throw new CipherException("Failed to decrypt text: " + e.getMessage()); } } diff --git a/src/main/java/com/rapidminer/tools/cipher/FileCipherKeyProvider.java b/src/main/java/com/rapidminer/tools/cipher/FileCipherKeyProvider.java index f09149af0..f2cd32d09 100644 --- a/src/main/java/com/rapidminer/tools/cipher/FileCipherKeyProvider.java +++ b/src/main/java/com/rapidminer/tools/cipher/FileCipherKeyProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/cipher/KeyGenerationException.java b/src/main/java/com/rapidminer/tools/cipher/KeyGenerationException.java index 15920a64f..a1fa4cff0 100644 --- a/src/main/java/com/rapidminer/tools/cipher/KeyGenerationException.java +++ b/src/main/java/com/rapidminer/tools/cipher/KeyGenerationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/cipher/KeyGeneratorTool.java b/src/main/java/com/rapidminer/tools/cipher/KeyGeneratorTool.java index dac68c9d6..c50dcb154 100644 --- a/src/main/java/com/rapidminer/tools/cipher/KeyGeneratorTool.java +++ b/src/main/java/com/rapidminer/tools/cipher/KeyGeneratorTool.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/cipher/KeyLoadingException.java b/src/main/java/com/rapidminer/tools/cipher/KeyLoadingException.java index efe3ad304..5a327c040 100644 --- a/src/main/java/com/rapidminer/tools/cipher/KeyLoadingException.java +++ b/src/main/java/com/rapidminer/tools/cipher/KeyLoadingException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/cipher/KeyStoringException.java b/src/main/java/com/rapidminer/tools/cipher/KeyStoringException.java index c2d2ab19e..83a977cb8 100644 --- a/src/main/java/com/rapidminer/tools/cipher/KeyStoringException.java +++ b/src/main/java/com/rapidminer/tools/cipher/KeyStoringException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/AbstractConfigurable.java b/src/main/java/com/rapidminer/tools/config/AbstractConfigurable.java index fe2e39079..ab63f1a35 100644 --- a/src/main/java/com/rapidminer/tools/config/AbstractConfigurable.java +++ b/src/main/java/com/rapidminer/tools/config/AbstractConfigurable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/AbstractConfigurator.java b/src/main/java/com/rapidminer/tools/config/AbstractConfigurator.java index 9b3587ae7..d135a66df 100644 --- a/src/main/java/com/rapidminer/tools/config/AbstractConfigurator.java +++ b/src/main/java/com/rapidminer/tools/config/AbstractConfigurator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/ClientConfigurationManager.java b/src/main/java/com/rapidminer/tools/config/ClientConfigurationManager.java index 00fa273a4..b9707efa1 100644 --- a/src/main/java/com/rapidminer/tools/config/ClientConfigurationManager.java +++ b/src/main/java/com/rapidminer/tools/config/ClientConfigurationManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/Configurable.java b/src/main/java/com/rapidminer/tools/config/Configurable.java index 88a10f58e..051050af1 100644 --- a/src/main/java/com/rapidminer/tools/config/Configurable.java +++ b/src/main/java/com/rapidminer/tools/config/Configurable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/ConfigurationException.java b/src/main/java/com/rapidminer/tools/config/ConfigurationException.java index 250be02b7..dd58706cb 100644 --- a/src/main/java/com/rapidminer/tools/config/ConfigurationException.java +++ b/src/main/java/com/rapidminer/tools/config/ConfigurationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/ConfigurationManager.java b/src/main/java/com/rapidminer/tools/config/ConfigurationManager.java index 801e276b0..3ee70fc90 100644 --- a/src/main/java/com/rapidminer/tools/config/ConfigurationManager.java +++ b/src/main/java/com/rapidminer/tools/config/ConfigurationManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -32,6 +32,7 @@ import java.util.Objects; import java.util.Set; import java.util.TreeMap; +import java.util.WeakHashMap; import java.util.function.Predicate; import java.util.logging.Level; import java.util.stream.Collectors; @@ -42,12 +43,14 @@ import com.rapidminer.io.process.XMLTools; import com.rapidminer.parameter.ParameterHandler; import com.rapidminer.parameter.ParameterType; +import com.rapidminer.repository.ConnectionListener; +import com.rapidminer.repository.ConnectionRepository; import com.rapidminer.repository.Folder; import com.rapidminer.repository.Repository; import com.rapidminer.repository.RepositoryAccessor; +import com.rapidminer.repository.RepositoryException; import com.rapidminer.repository.RepositoryListener; import com.rapidminer.repository.RepositoryManager; -import com.rapidminer.repository.internal.remote.ConnectionListener; import com.rapidminer.repository.internal.remote.RemoteRepository; import com.rapidminer.tools.I18N; import com.rapidminer.tools.LogService; @@ -165,7 +168,7 @@ public List getParameterTypes() { public static final String RM_SERVER_CONFIGURATION_URL_PREFIX = "/api/rest/configuration/"; /** - * User name of admin, used to check the access of a user to remote connections + * User name of the default admin, used to check the access of a user to remote connections */ public static final String RM_SERVER_CONFIGURATION_USER_ADMIN = "admin"; @@ -184,11 +187,11 @@ public List getParameterTypes() { private ConnectionListener loadOnConnectListener = new ConnectionListener() { @Override - public void connectionLost(RemoteRepository rmServer) {} + public void connectionLost(ConnectionRepository rmServer) {} @Override - public void connectionEstablished(RemoteRepository rmServer) { - loadFromRepository(rmServer); + public void connectionEstablished(ConnectionRepository rmServer) { + loadFromRepository((RemoteRepository) rmServer); } }; @@ -198,7 +201,9 @@ public void connectionEstablished(RemoteRepository rmServer) { @Override public void folderRefreshed(Folder folder) { if (folder instanceof RemoteRepository) { - loadFromRepository((RemoteRepository) folder); + if(consumeRefreshRequest(((RemoteRepository) folder).getRepository())) { + loadFromRepository((RemoteRepository) folder); + } } } @@ -218,6 +223,9 @@ protected ConfigurationManager() {} /** mapping between configuration type ids and configurables */ private Map, Configurable>> configurables = new HashMap<>(); + /** stores refresh requests **/ + private Map refreshRequests = Collections.synchronizedMap(new WeakHashMap<>()); + /** mapping configurables to permitted groups */ private static Map, Set>> permittedGroups = new HashMap<>(); @@ -336,6 +344,22 @@ public boolean hasTypeId(String typeId) { return configurators.keySet().contains(typeId); } + /** + * Refreshes the given repository + * + * @param source The repository that should be refreshed + * @throws RepositoryException if the refresh failed + */ + public void refresh(RemoteRepository source) throws RepositoryException { + refreshRequests.merge(source, 1, Integer::sum); + try { + source.refresh(); + } catch (RepositoryException e) { + refreshRequests.remove(source); + throw e; + } + } + /** * Returns all configurable names. Better to use * {@link #getAllConfigurableNamesAndSources(String)}. @@ -580,6 +604,45 @@ public String getTypeId() { } } + /** + * Checks if {@code requestCount} can be initialized or decremented + * + * @param repository + * The repository that should be refreshed (unused) + * @param requestCount + * The current refresh request count + * @return 0 if {@code requestCount} is {@code null}, {@code requestCount}-1 if {@code requestCount} > 0 + * @throws IllegalArgumentException + * if {@code requestCount} is <= 0 + */ + private static Integer decrementOrInitializeRequestCount(final RemoteRepository repository, final Integer requestCount) { + if (requestCount == null) { + //Initial call + return 0; + } else if (requestCount <= 0) { + //Already loaded, no request + throw new IllegalArgumentException("requestCount should not be 0"); + } else { + //Request exists, decrement + return requestCount - 1; + } + } + + /** + * Atomically decrements the request counter + * + * @param source + * @return true if a refresh request exists for the source + */ + private boolean consumeRefreshRequest(RemoteRepository source) { + try { + refreshRequests.compute(source, ConfigurationManager::decrementOrInitializeRequestCount); + } catch (IllegalArgumentException e) { + return false; + } + return true; + } + /** * Loads all configurations from the configuration database or file. *

@@ -748,7 +811,7 @@ public Set getPermittedGroupsForConfigurable(Configurable configurable) permittedGroups.get(typeId).put(new ComparablePair<>(configurable.getName(), source), new HashSet()); } - return permittedGroups.get(typeId).get(new ComparablePair<>(configurable.getName(), source)); + return new HashSet<>(permittedGroups.get(typeId).get(new ComparablePair<>(configurable.getName(), source))); } /** @@ -1056,6 +1119,19 @@ private static Element toXMLAndChangeEncryption(Document doc, AbstractConfigurat if (configurable.getId() != -1) { element.setAttribute("id", String.valueOf(configurable.getId())); } + String source = getSourceNameForConfigurable(configurable); + if (permittedGroups != null && permittedGroups.get(configurable.getTypeId()) != null && permittedGroups + .get(configurable.getTypeId()).get(new ComparablePair<>(configurable.getName(), source)) != null) { + Element permittedGroupsElement = doc.createElement("permittedGroups"); + Set configPermittedGroups = permittedGroups.get(configurable.getTypeId()) + .get(new ComparablePair<>(configurable.getName(), source)); + for (String group : configPermittedGroups) { + Element valueElement = doc.createElement("value"); + valueElement.appendChild(doc.createTextNode(group)); + permittedGroupsElement.appendChild(valueElement); + } + element.appendChild(permittedGroupsElement); + } for (Entry param : configurable.getParameters().entrySet()) { String key = param.getKey(); String value = null; diff --git a/src/main/java/com/rapidminer/tools/config/ConfigurationNameConflictException.java b/src/main/java/com/rapidminer/tools/config/ConfigurationNameConflictException.java index 7e8bc32cd..7ce57417c 100644 --- a/src/main/java/com/rapidminer/tools/config/ConfigurationNameConflictException.java +++ b/src/main/java/com/rapidminer/tools/config/ConfigurationNameConflictException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/Configurator.java b/src/main/java/com/rapidminer/tools/config/Configurator.java index ce7cffb66..74b6d2952 100644 --- a/src/main/java/com/rapidminer/tools/config/Configurator.java +++ b/src/main/java/com/rapidminer/tools/config/Configurator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/ConfiguratorParameterHandler.java b/src/main/java/com/rapidminer/tools/config/ConfiguratorParameterHandler.java index c3f8284b2..7eb98d2a7 100644 --- a/src/main/java/com/rapidminer/tools/config/ConfiguratorParameterHandler.java +++ b/src/main/java/com/rapidminer/tools/config/ConfiguratorParameterHandler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/ParameterTypeConfigurable.java b/src/main/java/com/rapidminer/tools/config/ParameterTypeConfigurable.java index 827952c06..38d5f03d5 100644 --- a/src/main/java/com/rapidminer/tools/config/ParameterTypeConfigurable.java +++ b/src/main/java/com/rapidminer/tools/config/ParameterTypeConfigurable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/TestConfigurableAction.java b/src/main/java/com/rapidminer/tools/config/TestConfigurableAction.java index 87b2d4cf5..aedaf9045 100644 --- a/src/main/java/com/rapidminer/tools/config/TestConfigurableAction.java +++ b/src/main/java/com/rapidminer/tools/config/TestConfigurableAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/actions/ActionResult.java b/src/main/java/com/rapidminer/tools/config/actions/ActionResult.java index cbc1392ef..b25e0b63b 100644 --- a/src/main/java/com/rapidminer/tools/config/actions/ActionResult.java +++ b/src/main/java/com/rapidminer/tools/config/actions/ActionResult.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/actions/ConfigurableAction.java b/src/main/java/com/rapidminer/tools/config/actions/ConfigurableAction.java index 4f6a20b55..a217a61dc 100644 --- a/src/main/java/com/rapidminer/tools/config/actions/ConfigurableAction.java +++ b/src/main/java/com/rapidminer/tools/config/actions/ConfigurableAction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/actions/SimpleActionResult.java b/src/main/java/com/rapidminer/tools/config/actions/SimpleActionResult.java index 2c2869338..3df0f8abe 100644 --- a/src/main/java/com/rapidminer/tools/config/actions/SimpleActionResult.java +++ b/src/main/java/com/rapidminer/tools/config/actions/SimpleActionResult.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/gui/ConfigurableAdminPasswordDialog.java b/src/main/java/com/rapidminer/tools/config/gui/ConfigurableAdminPasswordDialog.java index 2790e7eb3..febb04306 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/ConfigurableAdminPasswordDialog.java +++ b/src/main/java/com/rapidminer/tools/config/gui/ConfigurableAdminPasswordDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -165,7 +165,6 @@ private JPanel makeMainPanel() { c.gridy += 1; mainPanel.add(userLabel, c); c.gridx += 1; - userField.setEditable(false); userField.setMinimumSize(userField.getPreferredSize()); mainPanel.add(userField, c); c.gridx += 1; diff --git a/src/main/java/com/rapidminer/tools/config/gui/ConfigurableController.java b/src/main/java/com/rapidminer/tools/config/gui/ConfigurableController.java index eee566567..d93b680e9 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/ConfigurableController.java +++ b/src/main/java/com/rapidminer/tools/config/gui/ConfigurableController.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -21,6 +21,7 @@ import java.io.IOException; import java.net.HttpURLConnection; import java.security.Key; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -184,7 +185,17 @@ protected void addConfigurable(String typeId, String name, RemoteRepository sour */ protected void renameConfigurable(Configurable configurable, String newName) { String oldConfigurableName = configurable.getName(); - configurable.setName(newName); + + //Update permitted groups + if (configurable.getSource() != null) { + Set permittedGroups = ConfigurationManager.getInstance().getPermittedGroupsForConfigurable(configurable); + //Clear old entries + ConfigurationManager.getInstance().setPermittedGroupsForConfigurable(configurable, Collections.emptySet()); + configurable.setName(newName); + ConfigurationManager.getInstance().setPermittedGroupsForConfigurable(configurable, permittedGroups); + } else { + configurable.setName(newName); + } // Update ParameterHandler ConfigurationManager.getInstance().getAbstractConfigurator(configurable.getTypeId()) diff --git a/src/main/java/com/rapidminer/tools/config/gui/ConfigurableCreationDialog.java b/src/main/java/com/rapidminer/tools/config/gui/ConfigurableCreationDialog.java index 633e8e40e..1c48e5467 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/ConfigurableCreationDialog.java +++ b/src/main/java/com/rapidminer/tools/config/gui/ConfigurableCreationDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -269,6 +269,7 @@ public void modelChanged(ConfigurableEvent e) { } } } + requestedToAddConfigurable.clear(); } } }; diff --git a/src/main/java/com/rapidminer/tools/config/gui/ConfigurableDialog.java b/src/main/java/com/rapidminer/tools/config/gui/ConfigurableDialog.java index 38a5d1e49..c6c08fe6c 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/ConfigurableDialog.java +++ b/src/main/java/com/rapidminer/tools/config/gui/ConfigurableDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -712,14 +712,7 @@ private void updateParameterPanel(Configurable config) { parameterPanel.removeAll(); // save previously edited parameters - if (configParamPanel != null && previousConfigurable != null) { - if (previousConfigurable.getSource() == null) { - localController.saveConfigurable(previousConfigurable, configParamPanel.getParameters()); - } else { - remoteControllers.get(previousConfigurable.getSource().getName()).saveConfigurable(previousConfigurable, - configParamPanel.getParameters()); - } - } + updateModel(); if (config != null) { try { // stripped text depending on the size of the panel @@ -2052,4 +2045,18 @@ public void refreshConfigurables(String source) { // reload the configurables (contains resetConnection) updateConfigurables(source, remoteTaskPanes.get(source)); } + + /** + * Updates the underlying {@link ConfigurableModel} with the currently displayed parameter data + */ + public void updateModel(){ + if (configParamPanel != null && previousConfigurable != null) { + if (previousConfigurable.getSource() == null) { + localController.saveConfigurable(previousConfigurable, configParamPanel.getParameters()); + } else { + remoteControllers.get(previousConfigurable.getSource().getName()).saveConfigurable(previousConfigurable, + configParamPanel.getParameters()); + } + } + } } diff --git a/src/main/java/com/rapidminer/tools/config/gui/ConfigurableUserAccessDialog.java b/src/main/java/com/rapidminer/tools/config/gui/ConfigurableUserAccessDialog.java index 2beafcdaa..d3130bcac 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/ConfigurableUserAccessDialog.java +++ b/src/main/java/com/rapidminer/tools/config/gui/ConfigurableUserAccessDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -30,6 +30,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -140,19 +141,18 @@ public void mouseClicked(MouseEvent e) { @Override public void run() { - List allGroups; + Collection allGroups; try { allGroups = configurable.getSource().getContentManager().getAllGroupNames(); } catch (PasswordInputCanceledException | RepositoryException e) { - allGroups = new ArrayList<>( - ConfigurationManager.getInstance().getPermittedGroupsForConfigurable(configurable)); + allGroups = ConfigurationManager.getInstance().getPermittedGroupsForConfigurable(configurable); } final Set permittedGroups = ConfigurationManager.getInstance() .getPermittedGroupsForConfigurable(configurable); - final List allGroupsFinal = allGroups; + final Collection allGroupsFinal = allGroups; SwingUtilities.invokeLater(new Runnable() { diff --git a/src/main/java/com/rapidminer/tools/config/gui/ConfiguratorParameterPanel.java b/src/main/java/com/rapidminer/tools/config/gui/ConfiguratorParameterPanel.java index 4b8ca9687..0207fdcad 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/ConfiguratorParameterPanel.java +++ b/src/main/java/com/rapidminer/tools/config/gui/ConfiguratorParameterPanel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/gui/LoginAsAdminDropDownButton.java b/src/main/java/com/rapidminer/tools/config/gui/LoginAsAdminDropDownButton.java index e1e1399ab..3733e435d 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/LoginAsAdminDropDownButton.java +++ b/src/main/java/com/rapidminer/tools/config/gui/LoginAsAdminDropDownButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/gui/RefreshConfigurablesDropDownButton.java b/src/main/java/com/rapidminer/tools/config/gui/RefreshConfigurablesDropDownButton.java index 4eb25bbc9..c3c8bd078 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/RefreshConfigurablesDropDownButton.java +++ b/src/main/java/com/rapidminer/tools/config/gui/RefreshConfigurablesDropDownButton.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -31,6 +31,7 @@ import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.gui.tools.components.DropDownPopupButton; +import com.rapidminer.gui.tools.dialogs.ConfirmDialog; import com.rapidminer.tools.I18N; @@ -125,8 +126,18 @@ public JPopupMenu getPopupMenu() { /** reloads the configurables of all connected servers */ private void refreshAllConfigurables() { + refreshConfigurables(remoteControllers.keySet().toArray(new String[0])); + } - for (String serverName : remoteControllers.keySet()) { + /** reloads the configurables of the selected servers */ + private void refreshConfigurables(String... serverNames) { + + // show dialog if necessary + if (!userAcceptsDataLoss(serverNames)) { + return; + } + + for (String serverName : serverNames) { ConfigurableController controller = remoteControllers.get(serverName); // if the connection to the server is established @@ -137,15 +148,31 @@ private void refreshAllConfigurables() { } } - /** reloads the configurables of the selected server */ - private void refreshConfigurables(String serverName) { - ConfigurableController controller = remoteControllers.get(serverName); - // if the connection to the server is established - if (controller.getModel().getSource().isConnected()) { - // refresh the configurables - controller.getView().refreshConfigurables(serverName); + /** + * Displays a confirm dialog if unsaved changes would be lost + * + * @param serverNames + * @return false if the refresh should be cancelled + */ + private boolean userAcceptsDataLoss(String... serverNames) { + for (String serverName : serverNames) { + ConfigurableController controller = remoteControllers.get(serverName); + //Don't check if not connected + if (!controller.getModel().getSource().isConnected()) { + continue; + } + //Update the model from the current view + controller.getView().updateModel(); + //Check if modes has changed + if (controller.getModel().isModified()) { + //Ask if refresh should continue + return SwingTools.showConfirmDialog(remoteControllers.values().iterator().next().getView(), "configurable_confirm_refresh", + ConfirmDialog.YES_NO_OPTION) == ConfirmDialog.YES_OPTION; + } } + //No changes, refresh + return true; } } diff --git a/src/main/java/com/rapidminer/tools/config/gui/event/ConfigurableEvent.java b/src/main/java/com/rapidminer/tools/config/gui/event/ConfigurableEvent.java index 967c07e23..beeaacf50 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/event/ConfigurableEvent.java +++ b/src/main/java/com/rapidminer/tools/config/gui/event/ConfigurableEvent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/gui/event/ConfigurableModelEventListener.java b/src/main/java/com/rapidminer/tools/config/gui/event/ConfigurableModelEventListener.java index 189ec971c..5871133cc 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/event/ConfigurableModelEventListener.java +++ b/src/main/java/com/rapidminer/tools/config/gui/event/ConfigurableModelEventListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/gui/model/ConfigurableModel.java b/src/main/java/com/rapidminer/tools/config/gui/model/ConfigurableModel.java index c0a7aa8d5..11ff164dd 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/model/ConfigurableModel.java +++ b/src/main/java/com/rapidminer/tools/config/gui/model/ConfigurableModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,6 +18,7 @@ */ package com.rapidminer.tools.config.gui.model; +import java.io.IOException; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -26,6 +27,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.event.EventListenerList; import javax.xml.ws.WebServiceException; @@ -46,6 +49,8 @@ import com.rapidminer.tools.config.gui.event.ConfigurableEvent; import com.rapidminer.tools.config.gui.event.ConfigurableEvent.EventType; import com.rapidminer.tools.config.gui.event.ConfigurableModelEventListener; +import com.rapidminer.tools.config.jwt.JwtClaim; +import com.rapidminer.tools.config.jwt.JwtReader; import com.rapidminer.tools.container.Pair; @@ -57,6 +62,7 @@ */ public class ConfigurableModel implements Observer> { + private static final Logger LOGGER = Logger.getLogger(ConfigurableModel.class.getName()); /** comparator for Configurables */ private static Comparator COMPARATOR = new ConfigurationManager.ConfigurableComparator(); @@ -66,6 +72,9 @@ public class ConfigurableModel implements Observer /** the list of all {@link Configurable}s in this model */ private List listOfConfigurables; + /** Shared lock for backup modifications */ + private Object backupLock = new Object(); + /** * this map stores the original parameters for each {@link Configurable} which existed during * construction @@ -109,6 +118,16 @@ public class ConfigurableModel implements Observer */ private boolean adminRights = false; + /** + * defines whether {@link #adminRights} variable was initialized + */ + private volatile boolean adminRightsInitialized = false; + + /** + * lock for {@link #adminRights} initialization + */ + private Object adminRightsInitLock = new Object(); + /** * Creates a new {@link ConfigurableModel} instance including all available {@link Configurable} * s. @@ -153,7 +172,6 @@ private void initModel(boolean allConfigurables, RemoteRepository source) { this.originalNames = new HashMap<>(); this.originalPermittedUserGroups = new HashMap<>(); this.source = source; - checkForAdminRights(); if (source != null) { originalCredentials = Wallet.getInstance().getEntry(source.getAlias(), source.getBaseUrl().toString()); if (originalCredentials == null) { @@ -180,7 +198,7 @@ private void initModel(boolean allConfigurables, RemoteRepository source) { originalParameters.put(configurable, new HashMap<>(parameterMap)); originalNames.put(configurable, configurable.getName()); originalPermittedUserGroups.put(configurable, - ConfigurationManager.getInstance().getPermittedGroupsForConfigurable(configurable)); + ConfigurationManager.getInstance().getPermittedGroupsForConfigurable(configurable)); } } @@ -194,20 +212,27 @@ private void initModel(boolean allConfigurables, RemoteRepository source) { * need to be stored separately. */ private void updateBackup() { - for (Configurable configurable : listOfConfigurables) { - // copy key-value pairs and save them in new map - Map parameterMap = new HashMap<>(); - for (String key : configurable.getParameters().keySet()) { - if (configurable instanceof AbstractConfigurable) { - parameterMap.put(key, ((AbstractConfigurable) configurable).getParameterAsXMLString(key)); - } else { - parameterMap.put(key, configurable.getParameter(key)); + synchronized (backupLock) { + originalParameters.clear(); + originalNames.clear(); + originalPermittedUserGroups.clear(); + synchronized (listOfConfigurables) { + for (Configurable configurable : listOfConfigurables) { + // copy key-value pairs and save them in new map + Map parameterMap = new HashMap<>(); + for (String key : configurable.getParameters().keySet()) { + if (configurable instanceof AbstractConfigurable) { + parameterMap.put(key, ((AbstractConfigurable) configurable).getParameterAsXMLString(key)); + } else { + parameterMap.put(key, configurable.getParameter(key)); + } + } + originalParameters.put(configurable, parameterMap); + originalNames.put(configurable, configurable.getName()); + originalPermittedUserGroups.put(configurable, + ConfigurationManager.getInstance().getPermittedGroupsForConfigurable(configurable)); } } - originalParameters.put(configurable, new HashMap<>(parameterMap)); - originalNames.put(configurable, configurable.getName()); - originalPermittedUserGroups.put(configurable, - ConfigurationManager.getInstance().getPermittedGroupsForConfigurable(configurable)); } } @@ -235,6 +260,52 @@ public void checkVersion() { } } + /** + * Check if the model contains unsaved data + * + * @return true if the model was modified since the last refresh + */ + public boolean isModified(){ + //Fetch local copies of the original data + Map> originalPermittedUserGroups = getBackupPermittedUserGroups(); + Map> originalParameters = getBackupParameters(); + Map originalNames = getBackupNames(); + + //Check size + if (listOfConfigurables.size() != originalPermittedUserGroups.size()){ + return true; + } + for(Configurable configurable: listOfConfigurables){ + //Compare names // find missing + if(!configurable.getName().equals(originalNames.get(configurable))){ + return true; + } + //Compare parameters + Map originalParameterMap = originalParameters.get(configurable); + if (configurable.getParameters().size() != originalParameterMap.size()) { + return true; + } + for (Map.Entry parameterEntry : originalParameterMap.entrySet()) { + if (!parameterEntry.getValue().toString() + .equals(configurable.getParameter(parameterEntry.getKey()).toString())) { + // If the string comparison of the 2 objects with equals() returns false + return true; + } + } + //Compare groups + Set originalGroups = originalPermittedUserGroups.get(configurable); + Set currentGroups = ConfigurationManager.getInstance().getPermittedGroupsForConfigurable(configurable); + + if(originalGroups.size() != currentGroups.size()){ + return true; + } + if(!originalGroups.containsAll(currentGroups)){ + return true; + } + } + return false; + } + /** * Adds a {@link ConfigurableModelEventListener} which will be informed of all changes to this * model. @@ -262,9 +333,11 @@ public void removeEventListener(final ConfigurableModelEventListener listener) { */ public List getListOfUniqueNamesForType(String typeId) { List list = new LinkedList<>(); - for (Configurable c : listOfConfigurables) { - if (c.getTypeId().equals(typeId)) { - list.add(c.getName()); + synchronized (listOfConfigurables) { + for (Configurable c : listOfConfigurables) { + if (c.getTypeId().equals(typeId)) { + list.add(c.getName()); + } } } @@ -285,7 +358,9 @@ public RemoteRepository getSource() { * @return */ public Map> getBackupParameters() { - return new HashMap<>(originalParameters); + synchronized (backupLock) { + return new HashMap<>(originalParameters); + } } /** @@ -295,7 +370,9 @@ public Map> getBackupParameters() { * @return */ public Map getBackupNames() { - return new HashMap<>(originalNames); + synchronized (backupLock) { + return new HashMap<>(originalNames); + } } /** @@ -305,7 +382,9 @@ public Map getBackupNames() { * @return */ public Map> getBackupPermittedUserGroups() { - return originalPermittedUserGroups; + synchronized (backupLock) { + return new HashMap<>(originalPermittedUserGroups); + } } /** @@ -316,6 +395,8 @@ public boolean isEditingPossible() { if (!wasVersionCheckDone()) { try { checkVersion(); + /**also initialize the {@link adminRights} variable**/ + checkForAdminRights(); } catch (WebServiceException e) { // no connection possible return false; @@ -337,18 +418,22 @@ public boolean wasVersionCheckDone() { * checks whether the user logged in has admin rights */ public void checkForAdminRights() { - if (source == null) { - adminRights = true; - } else if (source.getUsername().equals(ConfigurationManager.RM_SERVER_CONFIGURATION_USER_ADMIN)) { - adminRights = true; - } + final boolean local = source == null; + adminRightsInitialized = true; + adminRights = local || hasAdminRightsOnServer(); } /** - * * @return whether the user is allowed to edit, add, remove and save configurables */ public boolean hasAdminRights() { + if(!adminRightsInitialized){ + synchronized (adminRightsInitLock){ + if(!adminRightsInitialized) { + checkForAdminRights(); + } + } + } return adminRights; } @@ -389,7 +474,9 @@ public void removeConfigurable(Configurable configurable) { * @return */ public List getConfigurables() { - return new LinkedList<>(listOfConfigurables); + synchronized (listOfConfigurables) { + return new LinkedList<>(listOfConfigurables); + } } /** @@ -487,7 +574,15 @@ public void resetConfigurables() { if (source != null) { for (Configurable originalConfig : originalNames.keySet()) { ConfigurationManager.getInstance().removeConfigurable(originalConfig.getTypeId(), - originalNames.get(originalConfig), source.getName()); + originalNames.get(originalConfig), source.getName()); + listOfConfigurables.remove(originalConfig); + } + synchronized (listOfConfigurables) { + for (Configurable newConfig : listOfConfigurables) { + ConfigurationManager.getInstance().removeConfigurable(newConfig.getTypeId(), + newConfig.getName(), source.getName()); + fireConfigurableRemovedEvent(newConfig); + } } listOfConfigurables.clear(); } @@ -513,7 +608,7 @@ public void resetConnection() throws RepositoryException { } try { // clear the cache - source.refresh(); + ConfigurationManager.getInstance().refresh(source); } catch (RepositoryException e) { // if no connection could be established firstException = e; @@ -545,4 +640,23 @@ public void resetCredentials() { } } } + + /** + * Check if the user has admin rights on a remote repository + * + * @return true if user has admin rights + */ + private boolean hasAdminRightsOnServer() { + try { + JwtClaim userInfo = new JwtReader().readClaim(getSource()); + if (userInfo != null) { + return userInfo.isAdmin(); + } + } catch (IOException | RepositoryException e) { + adminRightsInitialized = false; + LOGGER.log(Level.INFO, "Could not retrieve JSON Web Token from server " + (source == null ? "" : source.getBaseUrl()), e); + } + return false; + } + } diff --git a/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurableInfoLabelRenderer.java b/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurableInfoLabelRenderer.java index 496baae75..211a6fd50 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurableInfoLabelRenderer.java +++ b/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurableInfoLabelRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurableRenderer.java b/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurableRenderer.java index e40508c24..8156cc98e 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurableRenderer.java +++ b/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurableRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurationRenderer.java b/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurationRenderer.java index f89b00ab3..9ece4993a 100644 --- a/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurationRenderer.java +++ b/src/main/java/com/rapidminer/tools/config/gui/renderer/ConfigurationRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/config/jwt/JwtClaim.java b/src/main/java/com/rapidminer/tools/config/jwt/JwtClaim.java new file mode 100644 index 000000000..dbfd5150b --- /dev/null +++ b/src/main/java/com/rapidminer/tools/config/jwt/JwtClaim.java @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.tools.config.jwt; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + + +/** + * Contains information about the repository user + * + * @since 8.1.0 + * @author Jonas Wilms-Pfau + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class JwtClaim { + + private boolean admin; + + private String sub; + + public boolean isAdmin() { + return admin; + } + + public void setAdmin(boolean admin) { + this.admin = admin; + } + + public String getSub() { + return sub; + } + + public void setSub(String sub) { + this.sub = sub; + } +} diff --git a/src/main/java/com/rapidminer/tools/config/jwt/JwtReader.java b/src/main/java/com/rapidminer/tools/config/jwt/JwtReader.java new file mode 100644 index 000000000..9245b9361 --- /dev/null +++ b/src/main/java/com/rapidminer/tools/config/jwt/JwtReader.java @@ -0,0 +1,112 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.tools.config.jwt; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URLConnection; +import java.util.Base64; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.rapidminer.repository.RepositoryException; +import com.rapidminer.repository.internal.remote.RemoteRepository; + + +/** + * Retrieves a {@link JwtClaim} from a {@link RemoteRepository}, which contains additional information about the user + * + * @since 8.1.0 + * @author Jonas Wilms-Pfau + */ +public class JwtReader { + /** + * JWT Specification + */ + private static final int JWT_HEADER = 0; + private static final int JWT_PAYLOAD = 1; + private static final int JWT_SIGNATURE = 2; + private static final int[] JWT_STRUCTURE = {JWT_HEADER, JWT_PAYLOAD, JWT_SIGNATURE}; + /** + * Regex for the JWT Separator + */ + private static final String JWT_SEPARATOR_REGEX = "\\."; + /** + * Location of the tokenservice + */ + private static final String TOKENSERVICE_RELATIVE_URL = "internal/jaxrest/tokenservice"; + + + /** + * Read the claim from the remote token service without verifying the signature + * + *

+ * Warning: Don't use the result of this method to give access to sensitive information! + *

+ * + * @return JwtClaim or null + * + * @throws RepositoryException + * @throws IOException + */ + public JwtClaim readClaim(RemoteRepository source) throws RepositoryException, IOException { + if (source == null) { + return null; + } + URLConnection connection = source.getHTTPConnection(TOKENSERVICE_RELATIVE_URL, true); + ObjectMapper mapper = new ObjectMapper(); + try (InputStream inputStream = connection.getInputStream()) { + //First extract the outer wrapper + JwtWrapper wrapper = mapper.readValue(inputStream, JwtWrapper.class); + //Split the token into header, payload and signature + String[] token = wrapper.getIdToken().split(JWT_SEPARATOR_REGEX); + //Verify the structure of the Token + if (token.length == JWT_STRUCTURE.length) { + //Extract the payload + String base64Body = token[JWT_PAYLOAD]; + //Base64 Decode + byte[] jsonBody = Base64.getDecoder().decode(base64Body); + //Read the decoded JSON + return mapper.readValue(jsonBody, JwtClaim.class); + } else { + throw new RepositoryException("Invalid response from TokenService."); + } + } + } + + /*** + * JWT Wrapper object + * + * @since 8.1.0 + * @author Jonas Wilms-Pfau + */ + @JsonIgnoreProperties(ignoreUnknown = true) + private static class JwtWrapper { + + private String idToken; + + public String getIdToken() { + return idToken; + } + + public void setIdToken(String idToken) { + this.idToken = idToken; + } + } +} diff --git a/src/main/java/com/rapidminer/tools/container/ComparablePair.java b/src/main/java/com/rapidminer/tools/container/ComparablePair.java index c0ab32232..97244bba9 100644 --- a/src/main/java/com/rapidminer/tools/container/ComparablePair.java +++ b/src/main/java/com/rapidminer/tools/container/ComparablePair.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/container/MultidimensionalArraySet.java b/src/main/java/com/rapidminer/tools/container/MultidimensionalArraySet.java index 0763233dd..0bce9d6eb 100644 --- a/src/main/java/com/rapidminer/tools/container/MultidimensionalArraySet.java +++ b/src/main/java/com/rapidminer/tools/container/MultidimensionalArraySet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/container/Pair.java b/src/main/java/com/rapidminer/tools/container/Pair.java index 4eb4d4ddf..728bafc12 100644 --- a/src/main/java/com/rapidminer/tools/container/Pair.java +++ b/src/main/java/com/rapidminer/tools/container/Pair.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/container/Triple.java b/src/main/java/com/rapidminer/tools/container/Triple.java index 08d9bfb05..834aa9030 100644 --- a/src/main/java/com/rapidminer/tools/container/Triple.java +++ b/src/main/java/com/rapidminer/tools/container/Triple.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/container/Tupel.java b/src/main/java/com/rapidminer/tools/container/Tupel.java index f77d615a7..c37d87792 100644 --- a/src/main/java/com/rapidminer/tools/container/Tupel.java +++ b/src/main/java/com/rapidminer/tools/container/Tupel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/container/ValueAndCount.java b/src/main/java/com/rapidminer/tools/container/ValueAndCount.java index dbe92c886..ba13e5d37 100644 --- a/src/main/java/com/rapidminer/tools/container/ValueAndCount.java +++ b/src/main/java/com/rapidminer/tools/container/ValueAndCount.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/container/ValueSet.java b/src/main/java/com/rapidminer/tools/container/ValueSet.java index 9e979ab74..e4ca552d7 100644 --- a/src/main/java/com/rapidminer/tools/container/ValueSet.java +++ b/src/main/java/com/rapidminer/tools/container/ValueSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/documentation/ExampleProcess.java b/src/main/java/com/rapidminer/tools/documentation/ExampleProcess.java index 91f86cfcc..26c913574 100644 --- a/src/main/java/com/rapidminer/tools/documentation/ExampleProcess.java +++ b/src/main/java/com/rapidminer/tools/documentation/ExampleProcess.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/documentation/GroupDocumentation.java b/src/main/java/com/rapidminer/tools/documentation/GroupDocumentation.java index 183487147..0cd19a709 100644 --- a/src/main/java/com/rapidminer/tools/documentation/GroupDocumentation.java +++ b/src/main/java/com/rapidminer/tools/documentation/GroupDocumentation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/documentation/OperatorDocBundle.java b/src/main/java/com/rapidminer/tools/documentation/OperatorDocBundle.java index cb10ab85d..26d5d1728 100644 --- a/src/main/java/com/rapidminer/tools/documentation/OperatorDocBundle.java +++ b/src/main/java/com/rapidminer/tools/documentation/OperatorDocBundle.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/documentation/OperatorDocumentation.java b/src/main/java/com/rapidminer/tools/documentation/OperatorDocumentation.java index 0f5e89a2b..46bb0c8db 100644 --- a/src/main/java/com/rapidminer/tools/documentation/OperatorDocumentation.java +++ b/src/main/java/com/rapidminer/tools/documentation/OperatorDocumentation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/documentation/XMLOperatorDocBundle.java b/src/main/java/com/rapidminer/tools/documentation/XMLOperatorDocBundle.java index 26b3e9001..4b839c294 100644 --- a/src/main/java/com/rapidminer/tools/documentation/XMLOperatorDocBundle.java +++ b/src/main/java/com/rapidminer/tools/documentation/XMLOperatorDocBundle.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -18,11 +18,6 @@ */ package com.rapidminer.tools.documentation; -import com.rapidminer.io.process.XMLTools; -import com.rapidminer.tools.I18N; -import com.rapidminer.tools.LogService; -import com.rapidminer.tools.XMLException; - import java.io.IOException; import java.net.URL; import java.util.Arrays; @@ -31,14 +26,17 @@ import java.util.ResourceBundle; import java.util.logging.Level; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import com.rapidminer.io.process.XMLTools; +import com.rapidminer.tools.I18N; +import com.rapidminer.tools.LogService; +import com.rapidminer.tools.XMLException; +import com.rapidminer.tools.XMLParserException; + /** * A resource bundle that maps operator names to {@link OperatorDocumentation} instances. Instances @@ -134,11 +132,10 @@ public ResourceBundle newBundle(String baseName, Locale locale, String format, C public XMLOperatorDocBundle(URL url, String resourceName) throws IOException { Document document; try { - document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(url.openStream()); + document = XMLTools.createDocumentBuilder().parse(url.openStream()); } catch (SAXException e) { throw new IOException("Malformed XML operator help bundle: " + e, e); - } catch (ParserConfigurationException e) { - // LogService.getRoot().log(Level.WARNING, "Cannot create XML parser: "+e, e); + } catch (XMLParserException e) { LogService.getRoot().log( Level.WARNING, I18N.getMessage(LogService.getRoot().getResourceBundle(), diff --git a/src/main/java/com/rapidminer/tools/expression/Constant.java b/src/main/java/com/rapidminer/tools/expression/Constant.java index ecd0291c8..3abf2c356 100644 --- a/src/main/java/com/rapidminer/tools/expression/Constant.java +++ b/src/main/java/com/rapidminer/tools/expression/Constant.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/DoubleCallable.java b/src/main/java/com/rapidminer/tools/expression/DoubleCallable.java index 0497bcbea..8e8c624e4 100644 --- a/src/main/java/com/rapidminer/tools/expression/DoubleCallable.java +++ b/src/main/java/com/rapidminer/tools/expression/DoubleCallable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/ExampleResolver.java b/src/main/java/com/rapidminer/tools/expression/ExampleResolver.java index 909cfd2e3..94813a087 100644 --- a/src/main/java/com/rapidminer/tools/expression/ExampleResolver.java +++ b/src/main/java/com/rapidminer/tools/expression/ExampleResolver.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/Expression.java b/src/main/java/com/rapidminer/tools/expression/Expression.java index d025e4a52..67c3acdef 100644 --- a/src/main/java/com/rapidminer/tools/expression/Expression.java +++ b/src/main/java/com/rapidminer/tools/expression/Expression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/ExpressionContext.java b/src/main/java/com/rapidminer/tools/expression/ExpressionContext.java index d08db1c9b..02fd1732d 100644 --- a/src/main/java/com/rapidminer/tools/expression/ExpressionContext.java +++ b/src/main/java/com/rapidminer/tools/expression/ExpressionContext.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/ExpressionEvaluator.java b/src/main/java/com/rapidminer/tools/expression/ExpressionEvaluator.java index 6803763c1..6e0fa6835 100644 --- a/src/main/java/com/rapidminer/tools/expression/ExpressionEvaluator.java +++ b/src/main/java/com/rapidminer/tools/expression/ExpressionEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/ExpressionException.java b/src/main/java/com/rapidminer/tools/expression/ExpressionException.java index c06ed8672..64eb28d84 100644 --- a/src/main/java/com/rapidminer/tools/expression/ExpressionException.java +++ b/src/main/java/com/rapidminer/tools/expression/ExpressionException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/ExpressionParser.java b/src/main/java/com/rapidminer/tools/expression/ExpressionParser.java index 88c756b53..2791940e0 100644 --- a/src/main/java/com/rapidminer/tools/expression/ExpressionParser.java +++ b/src/main/java/com/rapidminer/tools/expression/ExpressionParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/ExpressionParserBuilder.java b/src/main/java/com/rapidminer/tools/expression/ExpressionParserBuilder.java index 74e202a72..f9921df38 100644 --- a/src/main/java/com/rapidminer/tools/expression/ExpressionParserBuilder.java +++ b/src/main/java/com/rapidminer/tools/expression/ExpressionParserBuilder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/ExpressionParserModule.java b/src/main/java/com/rapidminer/tools/expression/ExpressionParserModule.java index 83f6e71cb..4148dd448 100644 --- a/src/main/java/com/rapidminer/tools/expression/ExpressionParserModule.java +++ b/src/main/java/com/rapidminer/tools/expression/ExpressionParserModule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/ExpressionParsingException.java b/src/main/java/com/rapidminer/tools/expression/ExpressionParsingException.java index d2ae6a7c3..d049a0911 100644 --- a/src/main/java/com/rapidminer/tools/expression/ExpressionParsingException.java +++ b/src/main/java/com/rapidminer/tools/expression/ExpressionParsingException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/ExpressionRegistry.java b/src/main/java/com/rapidminer/tools/expression/ExpressionRegistry.java index 2b1c00345..ca62c396f 100644 --- a/src/main/java/com/rapidminer/tools/expression/ExpressionRegistry.java +++ b/src/main/java/com/rapidminer/tools/expression/ExpressionRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/ExpressionType.java b/src/main/java/com/rapidminer/tools/expression/ExpressionType.java index 8aa19c16b..1ac17a354 100644 --- a/src/main/java/com/rapidminer/tools/expression/ExpressionType.java +++ b/src/main/java/com/rapidminer/tools/expression/ExpressionType.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/Function.java b/src/main/java/com/rapidminer/tools/expression/Function.java index 4f9fe7552..e5286457c 100644 --- a/src/main/java/com/rapidminer/tools/expression/Function.java +++ b/src/main/java/com/rapidminer/tools/expression/Function.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/FunctionDescription.java b/src/main/java/com/rapidminer/tools/expression/FunctionDescription.java index 89119ce20..a981ccdb2 100644 --- a/src/main/java/com/rapidminer/tools/expression/FunctionDescription.java +++ b/src/main/java/com/rapidminer/tools/expression/FunctionDescription.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/FunctionInput.java b/src/main/java/com/rapidminer/tools/expression/FunctionInput.java index c66286972..335feb8ff 100644 --- a/src/main/java/com/rapidminer/tools/expression/FunctionInput.java +++ b/src/main/java/com/rapidminer/tools/expression/FunctionInput.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/FunctionInputException.java b/src/main/java/com/rapidminer/tools/expression/FunctionInputException.java index 03046dd70..af49fbf29 100644 --- a/src/main/java/com/rapidminer/tools/expression/FunctionInputException.java +++ b/src/main/java/com/rapidminer/tools/expression/FunctionInputException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/MacroResolver.java b/src/main/java/com/rapidminer/tools/expression/MacroResolver.java index 4afea13ee..702baa1c8 100644 --- a/src/main/java/com/rapidminer/tools/expression/MacroResolver.java +++ b/src/main/java/com/rapidminer/tools/expression/MacroResolver.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/Resolver.java b/src/main/java/com/rapidminer/tools/expression/Resolver.java index a0770d256..f07d01f2a 100644 --- a/src/main/java/com/rapidminer/tools/expression/Resolver.java +++ b/src/main/java/com/rapidminer/tools/expression/Resolver.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/UnknownValue.java b/src/main/java/com/rapidminer/tools/expression/UnknownValue.java index 9c4d9d29e..a63cbcbbc 100644 --- a/src/main/java/com/rapidminer/tools/expression/UnknownValue.java +++ b/src/main/java/com/rapidminer/tools/expression/UnknownValue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/BasicConstants.java b/src/main/java/com/rapidminer/tools/expression/internal/BasicConstants.java index e19322e0e..0524cf423 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/BasicConstants.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/BasicConstants.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/ConstantResolver.java b/src/main/java/com/rapidminer/tools/expression/internal/ConstantResolver.java index ae9d9dd3a..a5eaac6bc 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/ConstantResolver.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/ConstantResolver.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/ExpressionParserConstants.java b/src/main/java/com/rapidminer/tools/expression/internal/ExpressionParserConstants.java index 9e19c5c67..21a62e08b 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/ExpressionParserConstants.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/ExpressionParserConstants.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/ExpressionParserUtils.java b/src/main/java/com/rapidminer/tools/expression/internal/ExpressionParserUtils.java index a93010ea9..75e389c36 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/ExpressionParserUtils.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/ExpressionParserUtils.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/SimpleConstant.java b/src/main/java/com/rapidminer/tools/expression/internal/SimpleConstant.java index 0b3a65115..1a92064dc 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/SimpleConstant.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/SimpleConstant.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/SimpleExpressionContext.java b/src/main/java/com/rapidminer/tools/expression/internal/SimpleExpressionContext.java index c2cd0186b..6a0cd6b63 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/SimpleExpressionContext.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/SimpleExpressionContext.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/SimpleExpressionEvaluator.java b/src/main/java/com/rapidminer/tools/expression/internal/SimpleExpressionEvaluator.java index eb4c87b94..04cbe7674 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/SimpleExpressionEvaluator.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/SimpleExpressionEvaluator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/StandardFunctionsWithConstants.java b/src/main/java/com/rapidminer/tools/expression/internal/StandardFunctionsWithConstants.java index 60db6ca40..7ade4ab73 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/StandardFunctionsWithConstants.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/StandardFunctionsWithConstants.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/StandardOperations.java b/src/main/java/com/rapidminer/tools/expression/internal/StandardOperations.java index 9fa814727..3b9b8a7ea 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/StandardOperations.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/StandardOperations.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/UnknownResolverVariableException.java b/src/main/java/com/rapidminer/tools/expression/internal/UnknownResolverVariableException.java index abc5ca88a..4bdf4fd70 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/UnknownResolverVariableException.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/UnknownResolverVariableException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/AntlrParser.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/AntlrParser.java index 1bc938d0b..3d8d0d1e6 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/AntlrParser.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/AntlrParser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingErrorStrategy.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingErrorStrategy.java index 35655bc1f..f1fd094ee 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingErrorStrategy.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingErrorStrategy.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingFunctionExpressionLexer.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingFunctionExpressionLexer.java index 145d54580..c8d958638 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingFunctionExpressionLexer.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingFunctionExpressionLexer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingRuntimeException.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingRuntimeException.java index 60c99daa8..b410306f4 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingRuntimeException.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/CapitulatingRuntimeException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/EvaluatorCreationVisitor.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/EvaluatorCreationVisitor.java index 9b6923713..db0254a0c 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/EvaluatorCreationVisitor.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/EvaluatorCreationVisitor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/ExpressionErrorListener.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/ExpressionErrorListener.java index 4254acef8..37aa90466 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/ExpressionErrorListener.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/ExpressionErrorListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/FunctionListener.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/FunctionListener.java index 762f04820..66ebc08cf 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/FunctionListener.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/FunctionListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/SimpleExpression.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/SimpleExpression.java index eb4bb369d..e6f532bf0 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/SimpleExpression.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/SimpleExpression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownDynamicVariableException.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownDynamicVariableException.java index 901c053c9..b20822ca0 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownDynamicVariableException.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownDynamicVariableException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownFunctionException.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownFunctionException.java index 535aae4db..bce0cc7a9 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownFunctionException.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownFunctionException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownScopeConstantException.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownScopeConstantException.java index 914f7815c..c9edd9907 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownScopeConstantException.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownScopeConstantException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownVariableException.java b/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownVariableException.java index 705ab5ba6..c86539380 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownVariableException.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/antlr/UnknownVariableException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/Abstract1DoubleInputFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/Abstract1DoubleInputFunction.java index 8e42565b0..879e7e818 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/Abstract1DoubleInputFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/Abstract1DoubleInputFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/Abstract2DoubleInputFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/Abstract2DoubleInputFunction.java index a23292a75..733bc0da5 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/Abstract2DoubleInputFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/Abstract2DoubleInputFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractArbitraryDoubleInputFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractArbitraryDoubleInputFunction.java index c54ff85a5..26ca30dee 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractArbitraryDoubleInputFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractArbitraryDoubleInputFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractArbitraryStringInputStringOutputFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractArbitraryStringInputStringOutputFunction.java index e1a85a7c4..e81efad5b 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractArbitraryStringInputStringOutputFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractArbitraryStringInputStringOutputFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractFunction.java index d7d8eda63..2b661a073 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/AbstractFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Divide.java b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Divide.java index 3010a4e3a..4c720c114 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Divide.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Divide.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Minus.java b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Minus.java index 3bca34c60..cc5b22ed4 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Minus.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Minus.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Modulus.java b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Modulus.java index ff2556e89..570123b72 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Modulus.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Modulus.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Multiply.java b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Multiply.java index 8d6906759..9d8d91655 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Multiply.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Multiply.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Plus.java b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Plus.java index 1e913dd7e..cbd6224b7 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Plus.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Plus.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Power.java b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Power.java index 59f5f2f2a..686fa24fe 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Power.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/basic/Power.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitAnd.java b/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitAnd.java index 43deebc10..8f86e82c4 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitAnd.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitAnd.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitNot.java b/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitNot.java index e5c1c43c1..4617a1de3 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitNot.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitNot.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitOr.java b/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitOr.java index 8bacc3726..b34613136 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitOr.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitOr.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitXor.java b/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitXor.java index 389183454..087d2a930 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitXor.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/bitwise/BitXor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/AbstractComparisonFunctionWith2Inputs.java b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/AbstractComparisonFunctionWith2Inputs.java index 2201677a6..47970b629 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/AbstractComparisonFunctionWith2Inputs.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/AbstractComparisonFunctionWith2Inputs.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/AbstractEqualityFunctionWith2Inputs.java b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/AbstractEqualityFunctionWith2Inputs.java index 25306dd3c..d2ea01be0 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/AbstractEqualityFunctionWith2Inputs.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/AbstractEqualityFunctionWith2Inputs.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Equals.java b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Equals.java index 1b2867ba6..1dc91df57 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Equals.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Equals.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Finite.java b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Finite.java index 2352014bb..8068d92ae 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Finite.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Finite.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/GreaterEqualThan.java b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/GreaterEqualThan.java index ac76618cc..392210ab7 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/GreaterEqualThan.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/GreaterEqualThan.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/GreaterThan.java b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/GreaterThan.java index 127b9d583..32a8bffb0 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/GreaterThan.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/GreaterThan.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/LessEqualThan.java b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/LessEqualThan.java index e18780ace..e0f9fb4a5 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/LessEqualThan.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/LessEqualThan.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/LessThan.java b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/LessThan.java index 7f45d17eb..7614ab8c6 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/LessThan.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/LessThan.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Missing.java b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Missing.java index c9d96c772..d976272b9 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Missing.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/Missing.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/NotEquals.java b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/NotEquals.java index 13c113cc9..9f401cf15 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/NotEquals.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/comparison/NotEquals.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParse.java b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParse.java index 91a303d1a..b2196fae7 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParse.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParse.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParseCustom.java b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParseCustom.java index 75574f1d4..54ecef231 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParseCustom.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParseCustom.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParseWithLocale.java b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParseWithLocale.java index d3feb1e3f..fd9b671ce 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParseWithLocale.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateParseWithLocale.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateString.java b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateString.java index 02f8a9dd2..a3163de0a 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateString.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateString.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateStringCustom.java b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateStringCustom.java index e482032fd..617cb7464 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateStringCustom.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateStringCustom.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateStringLocale.java b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateStringLocale.java index 9def7d6c8..74416bffb 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateStringLocale.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/DateStringLocale.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/NumericalToString.java b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/NumericalToString.java index f2d578e74..2d654ddc1 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/NumericalToString.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/NumericalToString.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/StringToNumerical.java b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/StringToNumerical.java index 427044fc1..31505a87f 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/StringToNumerical.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/conversion/StringToNumerical.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/Abstract2DateInputBooleanOutput.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/Abstract2DateInputBooleanOutput.java index 30c44e094..ba09ac219 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/Abstract2DateInputBooleanOutput.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/Abstract2DateInputBooleanOutput.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/Abstract2DateInputIntegerOutputFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/Abstract2DateInputIntegerOutputFunction.java index f90d88727..d105ec53e 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/Abstract2DateInputIntegerOutputFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/Abstract2DateInputIntegerOutputFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/AbstractDateManipulationFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/AbstractDateManipulationFunction.java index 54ffe6336..00babed93 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/AbstractDateManipulationFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/AbstractDateManipulationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateAdd.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateAdd.java index 2c9f7543b..33c725fce 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateAdd.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateAdd.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateAfter.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateAfter.java index a289ccc7e..6cd07d3b5 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateAfter.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateAfter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateBefore.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateBefore.java index 872db67f1..9a4228d10 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateBefore.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateBefore.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateDiff.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateDiff.java index c6eaab69c..f48fff546 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateDiff.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateDiff.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateGet.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateGet.java index efcacc912..4dda25194 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateGet.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateGet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateMillis.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateMillis.java index 944610cbc..2fe12d638 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateMillis.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateMillis.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateNow.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateNow.java index c5960b0e1..de9a02d6d 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateNow.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateNow.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateSet.java b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateSet.java index 60c5dbd8e..1b159d252 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateSet.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/date/DateSet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/eval/Evaluation.java b/src/main/java/com/rapidminer/tools/expression/internal/function/eval/Evaluation.java index 702009f38..bc138f159 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/eval/Evaluation.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/eval/Evaluation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/eval/SubexpressionEvaluationException.java b/src/main/java/com/rapidminer/tools/expression/internal/function/eval/SubexpressionEvaluationException.java index 402418e0b..5325372a0 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/eval/SubexpressionEvaluationException.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/eval/SubexpressionEvaluationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/eval/TypeConstants.java b/src/main/java/com/rapidminer/tools/expression/internal/function/eval/TypeConstants.java index f118f6766..a0414a724 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/eval/TypeConstants.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/eval/TypeConstants.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunction.java index 825771a9b..303cf1fb9 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunctionWith1Input.java b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunctionWith1Input.java index d7e1d50c2..dd82a4bb0 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunctionWith1Input.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunctionWith1Input.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunctionWith2Inputs.java b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunctionWith2Inputs.java index 513927ca5..89d0db851 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunctionWith2Inputs.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/AbstractLogicalFunctionWith2Inputs.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/And.java b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/And.java index 02b90d256..48b26a380 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/And.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/And.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/If.java b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/If.java index 68c8f2424..3515e5ca0 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/If.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/If.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/Not.java b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/Not.java index 46641b010..bdedcba24 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/Not.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/Not.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/Or.java b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/Or.java index d6399bc79..9e97a6090 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/logical/Or.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/logical/Or.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/AbsoluteValue.java b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/AbsoluteValue.java index 58ca07904..ba0f44fd9 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/AbsoluteValue.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/AbsoluteValue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/BinaryLogarithm.java b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/BinaryLogarithm.java index e690da259..5d6beccad 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/BinaryLogarithm.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/BinaryLogarithm.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/CommonLogarithm.java b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/CommonLogarithm.java index 4caa1c0d4..ded60d612 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/CommonLogarithm.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/CommonLogarithm.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/ExponentialFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/ExponentialFunction.java index d888e8148..a4e8956bf 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/ExponentialFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/ExponentialFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/ModulusAsFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/ModulusAsFunction.java index a7f3059f7..0c172bee7 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/ModulusAsFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/ModulusAsFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/NaturalLogarithm.java b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/NaturalLogarithm.java index 2e94b7053..f32c53728 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/NaturalLogarithm.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/NaturalLogarithm.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/PowerAsFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/PowerAsFunction.java index 7f05d3612..7908e3df6 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/PowerAsFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/PowerAsFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/Signum.java b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/Signum.java index 11082ff95..69c0e7486 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/Signum.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/Signum.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/SquareRoot.java b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/SquareRoot.java index f3ed21d02..c2b7e0dad 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/SquareRoot.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/mathematical/SquareRoot.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/process/MacroValue.java b/src/main/java/com/rapidminer/tools/expression/internal/function/process/MacroValue.java index bc89a6a6d..07525dc5f 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/process/MacroValue.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/process/MacroValue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/process/ParameterValue.java b/src/main/java/com/rapidminer/tools/expression/internal/function/process/ParameterValue.java index 3c75deea4..b7715663d 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/process/ParameterValue.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/process/ParameterValue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Abstract1or2DoubleInputFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Abstract1or2DoubleInputFunction.java index 10e434429..6c8cf4522 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Abstract1or2DoubleInputFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Abstract1or2DoubleInputFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Ceil.java b/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Ceil.java index bae3591d2..8a1c1197b 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Ceil.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Ceil.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Floor.java b/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Floor.java index 5dd3ae146..de64ff4f6 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Floor.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Floor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Rint.java b/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Rint.java index 544b5b608..817309385 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Rint.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Rint.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Round.java b/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Round.java index cd658b41f..620201137 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Round.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/rounding/Round.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Average.java b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Average.java index 2c953fa9d..20943bdca 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Average.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Average.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Binominal.java b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Binominal.java index 3cc4d0fb2..ec2bb2851 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Binominal.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Binominal.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Maximum.java b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Maximum.java index 445386b07..588a2d0d4 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Maximum.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Maximum.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Minimum.java b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Minimum.java index 5e01fba95..fa0b2570a 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Minimum.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Minimum.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Random.java b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Random.java index 3aa03d7c7..5ef58f23c 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Random.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Random.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Sum.java b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Sum.java index d06350649..cc4580724 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Sum.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/statistical/Sum.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract1StringInputIntegerOutputFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract1StringInputIntegerOutputFunction.java index a5cb31fbe..1b4a4603e 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract1StringInputIntegerOutputFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract1StringInputIntegerOutputFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract2StringInputBooleanOutputFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract2StringInputBooleanOutputFunction.java index b8170327f..49d045823 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract2StringInputBooleanOutputFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract2StringInputBooleanOutputFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract2StringInputIntegerOutputFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract2StringInputIntegerOutputFunction.java index b3fb07363..fb511a689 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract2StringInputIntegerOutputFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Abstract2StringInputIntegerOutputFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/AbstractStringIntegerInputStringOutputFunction.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/AbstractStringIntegerInputStringOutputFunction.java index 1998f7ba8..045af2de8 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/AbstractStringIntegerInputStringOutputFunction.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/AbstractStringIntegerInputStringOutputFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/CharAt.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/CharAt.java index 4304c0e0d..f02b57c54 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/CharAt.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/CharAt.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Compare.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Compare.java index 08c6d53a4..1d1cd46a8 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Compare.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Compare.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Concat.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Concat.java index 4ab22124a..ce0ec4a5b 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Concat.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Concat.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Contains.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Contains.java index dcffc5f1f..c26403e4e 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Contains.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Contains.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Cut.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Cut.java index aaf9505a3..d0db9e99d 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Cut.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Cut.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Ends.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Ends.java index ee062f5b8..afec7c200 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Ends.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Ends.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/EscapeHTML.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/EscapeHTML.java index 4db33851b..1620de4a2 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/EscapeHTML.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/EscapeHTML.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Finds.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Finds.java index adb5bf18f..f1e3e3cb1 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Finds.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Finds.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Index.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Index.java index cdbc29fbd..9f1b12c50 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Index.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Index.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Length.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Length.java index ef7366d57..b4b16d247 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Length.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Length.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Lower.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Lower.java index 5450ea544..fde3a9185 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Lower.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Lower.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Matches.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Matches.java index 2ee23040f..9a1902f52 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Matches.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Matches.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Prefix.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Prefix.java index 450313291..b3ad34457 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Prefix.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Prefix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Replace.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Replace.java index 7603a311b..1ec31827c 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Replace.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Replace.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/ReplaceAll.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/ReplaceAll.java index 9e3dec8b7..1854cf0fd 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/ReplaceAll.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/ReplaceAll.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Starts.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Starts.java index 91eb212af..415d2bc7d 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Starts.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Starts.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Suffix.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Suffix.java index 9c212ce4b..91cca8d72 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Suffix.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Suffix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/TextEquals.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/TextEquals.java index cb3da2523..7b81ce1a8 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/TextEquals.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/TextEquals.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Trim.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Trim.java index 77af46de2..d466a20f6 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Trim.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Trim.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Upper.java b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Upper.java index 74ee8f0c2..33b87d9b9 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/text/Upper.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/text/Upper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcCosine.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcCosine.java index 9c2484860..e57a22340 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcCosine.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcCosine.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicCosine.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicCosine.java index 5e320a7e4..0cfa6ebba 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicCosine.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicCosine.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicSine.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicSine.java index 1f9024e0e..24d705325 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicSine.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicSine.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicTangent.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicTangent.java index 5fe17fa49..d27539256 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicTangent.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcHyperbolicTangent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcSine.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcSine.java index f14193861..4ea8c95fb 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcSine.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcSine.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcTangent.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcTangent.java index 28c112b78..e31a91cfd 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcTangent.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcTangent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcTangent2.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcTangent2.java index c9e7794e6..5d67046ab 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcTangent2.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/ArcTangent2.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cosecant.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cosecant.java index d651fb74e..f880afb0c 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cosecant.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cosecant.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cosine.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cosine.java index 558b2d143..00479867f 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cosine.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cosine.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cotangent.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cotangent.java index d81a786ee..b58264b1d 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cotangent.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Cotangent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicCosine.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicCosine.java index 9b8fb976f..b0a6ae767 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicCosine.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicCosine.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicSine.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicSine.java index c57b6fc5f..0ab0ecec5 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicSine.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicSine.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicTangent.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicTangent.java index 2b99d7133..c585e28e4 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicTangent.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/HyperbolicTangent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Secant.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Secant.java index 0ad5e958b..e187e7f43 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Secant.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Secant.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Sinus.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Sinus.java index 7386661f3..695f2ce20 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Sinus.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Sinus.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Tangent.java b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Tangent.java index b9b528ece..9dabf71d2 100644 --- a/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Tangent.java +++ b/src/main/java/com/rapidminer/tools/expression/internal/function/trigonometric/Tangent.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/io/Encoding.java b/src/main/java/com/rapidminer/tools/io/Encoding.java index 5820849d8..5b02cad96 100644 --- a/src/main/java/com/rapidminer/tools/io/Encoding.java +++ b/src/main/java/com/rapidminer/tools/io/Encoding.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/io/GlobFilenameFilter.java b/src/main/java/com/rapidminer/tools/io/GlobFilenameFilter.java index cf91b271c..2c863a8a3 100644 --- a/src/main/java/com/rapidminer/tools/io/GlobFilenameFilter.java +++ b/src/main/java/com/rapidminer/tools/io/GlobFilenameFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/io/ProgressReportingInputStream.java b/src/main/java/com/rapidminer/tools/io/ProgressReportingInputStream.java index 941697700..3f2b6e1bb 100644 --- a/src/main/java/com/rapidminer/tools/io/ProgressReportingInputStream.java +++ b/src/main/java/com/rapidminer/tools/io/ProgressReportingInputStream.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/io/ProgressReportingOutputStream.java b/src/main/java/com/rapidminer/tools/io/ProgressReportingOutputStream.java index 1df5893eb..fd1642e5a 100644 --- a/src/main/java/com/rapidminer/tools/io/ProgressReportingOutputStream.java +++ b/src/main/java/com/rapidminer/tools/io/ProgressReportingOutputStream.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/io/TransferableImage.java b/src/main/java/com/rapidminer/tools/io/TransferableImage.java index fc30cb271..a6db3978f 100644 --- a/src/main/java/com/rapidminer/tools/io/TransferableImage.java +++ b/src/main/java/com/rapidminer/tools/io/TransferableImage.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/AnovaCalculator.java b/src/main/java/com/rapidminer/tools/math/AnovaCalculator.java index 8b30126b4..5b52ae919 100644 --- a/src/main/java/com/rapidminer/tools/math/AnovaCalculator.java +++ b/src/main/java/com/rapidminer/tools/math/AnovaCalculator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/Averagable.java b/src/main/java/com/rapidminer/tools/math/Averagable.java index 056d8c39a..7a3c06241 100644 --- a/src/main/java/com/rapidminer/tools/math/Averagable.java +++ b/src/main/java/com/rapidminer/tools/math/Averagable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/AverageVector.java b/src/main/java/com/rapidminer/tools/math/AverageVector.java index 9f434c734..33d55a965 100644 --- a/src/main/java/com/rapidminer/tools/math/AverageVector.java +++ b/src/main/java/com/rapidminer/tools/math/AverageVector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/BinaryPeakFinder.java b/src/main/java/com/rapidminer/tools/math/BinaryPeakFinder.java index 46349240d..934b62be1 100644 --- a/src/main/java/com/rapidminer/tools/math/BinaryPeakFinder.java +++ b/src/main/java/com/rapidminer/tools/math/BinaryPeakFinder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/CombinationGenerator.java b/src/main/java/com/rapidminer/tools/math/CombinationGenerator.java index 541a4995d..d7649ea1c 100644 --- a/src/main/java/com/rapidminer/tools/math/CombinationGenerator.java +++ b/src/main/java/com/rapidminer/tools/math/CombinationGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/Complex.java b/src/main/java/com/rapidminer/tools/math/Complex.java index 6a919862a..0fb6fd18e 100644 --- a/src/main/java/com/rapidminer/tools/math/Complex.java +++ b/src/main/java/com/rapidminer/tools/math/Complex.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/ContingencyTableTools.java b/src/main/java/com/rapidminer/tools/math/ContingencyTableTools.java index feb7e9679..7ba768e2b 100644 --- a/src/main/java/com/rapidminer/tools/math/ContingencyTableTools.java +++ b/src/main/java/com/rapidminer/tools/math/ContingencyTableTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/FastFourierTransform.java b/src/main/java/com/rapidminer/tools/math/FastFourierTransform.java index 255886d66..7c9526ba0 100644 --- a/src/main/java/com/rapidminer/tools/math/FastFourierTransform.java +++ b/src/main/java/com/rapidminer/tools/math/FastFourierTransform.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/LiftDataGenerator.java b/src/main/java/com/rapidminer/tools/math/LiftDataGenerator.java index 0aad84668..668985cd1 100644 --- a/src/main/java/com/rapidminer/tools/math/LiftDataGenerator.java +++ b/src/main/java/com/rapidminer/tools/math/LiftDataGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/LinearRegression.java b/src/main/java/com/rapidminer/tools/math/LinearRegression.java index 7bc2862c6..11ba92471 100644 --- a/src/main/java/com/rapidminer/tools/math/LinearRegression.java +++ b/src/main/java/com/rapidminer/tools/math/LinearRegression.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/MathFunctions.java b/src/main/java/com/rapidminer/tools/math/MathFunctions.java index 441779a97..f95005b22 100644 --- a/src/main/java/com/rapidminer/tools/math/MathFunctions.java +++ b/src/main/java/com/rapidminer/tools/math/MathFunctions.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -19,6 +19,7 @@ package com.rapidminer.tools.math; import Jama.Matrix; + import com.rapidminer.example.Attribute; import com.rapidminer.example.Example; import com.rapidminer.example.ExampleSet; @@ -72,6 +73,13 @@ public class MathFunctions { 3.67983563856160859403E0, 1.37702099489081330271E0, 2.16236993594496635890E-1, 1.34204006088543189037E-2, 3.28014464682127739104E-4, 2.89247864745380683936E-6, 6.79019408009981274425E-9, }; + // constants for invertMatrix + private static final int INVERSE_ITERATIONS = 5; + private static final double MINIMUM_ADDITION = Double.MIN_VALUE * Math.pow(10, INVERSE_ITERATIONS); + private static final double MINIMUM_THRESHOLD = Double.MIN_VALUE * 100; + private static final double ADDITION_FACTOR = 1.01; + + /** * returns tangens hyperbolicus of x, i.e. y = tanh(x) = (e^x - e^-x) / (e^x + * e^-x). @@ -184,7 +192,7 @@ public static double variance(double v[], double a) { /** This method calculates the correlation between two (numerical) attributes of an example set. */ public static double correlation(ExampleSet exampleSet, Attribute firstAttribute, Attribute secondAttribute, - boolean squared) { + boolean squared) { double sumProd = 0.0d; double sumFirst = 0.0d; double sumSecond = 0.0d; @@ -330,6 +338,10 @@ public static int factorial(int k) { return result; } + /** + * @deprecated since 8.1; please use {@link #invertMatrix(Matrix, boolean)} instead. + */ + @Deprecated public static Matrix invertMatrix(Matrix m) { double startFactor = 0.1d; while (true) { @@ -346,4 +358,34 @@ public static Matrix invertMatrix(Matrix m) { } } } + + /** + * Tries to invert the given {@link Matrix}. If that is not possible and {@code approximate} is set to {@true}, an approximate inversion will be calculated. + * To do this, a small value is added to the diagonal of the matrix and then used for inversion. This procedure will be repeated only {@value #INVERSE_ITERATIONS} times. + * + * @param m + * the matrix to invert + * @param approximate + * if an approximation should be calculated + * @return the (approximated) inverted matrix or {@code null} if no inverse could be calculated + * @since 8.1 + */ + public static Matrix invertMatrix(Matrix m, boolean approximate) { + int dimension = Math.min(m.getRowDimension(), m.getColumnDimension()); + for (int i = 0; i < INVERSE_ITERATIONS; i++) { + try { + return m.inverse(); + } catch (Exception e) { + if (!approximate) { + return null; + } + for (int x = 0; x < dimension; x++) { + double value = m.get(x, x); + value = Math.abs(value) <= MINIMUM_THRESHOLD ? MINIMUM_ADDITION : value * ADDITION_FACTOR; + m.set(x, x, value); + } + } + } + return null; + } } diff --git a/src/main/java/com/rapidminer/tools/math/Peak.java b/src/main/java/com/rapidminer/tools/math/Peak.java index 9da42765b..dce3667de 100644 --- a/src/main/java/com/rapidminer/tools/math/Peak.java +++ b/src/main/java/com/rapidminer/tools/math/Peak.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/PeakFinder.java b/src/main/java/com/rapidminer/tools/math/PeakFinder.java index a0fb50d3c..1d63c4c78 100644 --- a/src/main/java/com/rapidminer/tools/math/PeakFinder.java +++ b/src/main/java/com/rapidminer/tools/math/PeakFinder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/ROCBias.java b/src/main/java/com/rapidminer/tools/math/ROCBias.java index 541a032ed..e2b032229 100644 --- a/src/main/java/com/rapidminer/tools/math/ROCBias.java +++ b/src/main/java/com/rapidminer/tools/math/ROCBias.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/ROCData.java b/src/main/java/com/rapidminer/tools/math/ROCData.java index dd122b7da..fbfd72275 100644 --- a/src/main/java/com/rapidminer/tools/math/ROCData.java +++ b/src/main/java/com/rapidminer/tools/math/ROCData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/ROCDataGenerator.java b/src/main/java/com/rapidminer/tools/math/ROCDataGenerator.java index 38c7a7dd9..504a08887 100644 --- a/src/main/java/com/rapidminer/tools/math/ROCDataGenerator.java +++ b/src/main/java/com/rapidminer/tools/math/ROCDataGenerator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/ROCPoint.java b/src/main/java/com/rapidminer/tools/math/ROCPoint.java index ef6a658a2..52e336ac4 100644 --- a/src/main/java/com/rapidminer/tools/math/ROCPoint.java +++ b/src/main/java/com/rapidminer/tools/math/ROCPoint.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/RunVector.java b/src/main/java/com/rapidminer/tools/math/RunVector.java index 22ebb81fd..0aab0222a 100644 --- a/src/main/java/com/rapidminer/tools/math/RunVector.java +++ b/src/main/java/com/rapidminer/tools/math/RunVector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/SignificanceCalculationException.java b/src/main/java/com/rapidminer/tools/math/SignificanceCalculationException.java index 49d423667..6165e0418 100644 --- a/src/main/java/com/rapidminer/tools/math/SignificanceCalculationException.java +++ b/src/main/java/com/rapidminer/tools/math/SignificanceCalculationException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/SignificanceTestResult.java b/src/main/java/com/rapidminer/tools/math/SignificanceTestResult.java index 69569256f..62c438a3a 100644 --- a/src/main/java/com/rapidminer/tools/math/SignificanceTestResult.java +++ b/src/main/java/com/rapidminer/tools/math/SignificanceTestResult.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/SimplePeakFinder.java b/src/main/java/com/rapidminer/tools/math/SimplePeakFinder.java index 006f264b1..fd2aff4e6 100644 --- a/src/main/java/com/rapidminer/tools/math/SimplePeakFinder.java +++ b/src/main/java/com/rapidminer/tools/math/SimplePeakFinder.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/SpectrumFilter.java b/src/main/java/com/rapidminer/tools/math/SpectrumFilter.java index c91ff2f61..3ef8936ad 100644 --- a/src/main/java/com/rapidminer/tools/math/SpectrumFilter.java +++ b/src/main/java/com/rapidminer/tools/math/SpectrumFilter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/StringToMatrixConverter.java b/src/main/java/com/rapidminer/tools/math/StringToMatrixConverter.java index a35835270..4a84f711a 100644 --- a/src/main/java/com/rapidminer/tools/math/StringToMatrixConverter.java +++ b/src/main/java/com/rapidminer/tools/math/StringToMatrixConverter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/TestGroup.java b/src/main/java/com/rapidminer/tools/math/TestGroup.java index ff7fc234a..06bb4832e 100644 --- a/src/main/java/com/rapidminer/tools/math/TestGroup.java +++ b/src/main/java/com/rapidminer/tools/math/TestGroup.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/VectorMath.java b/src/main/java/com/rapidminer/tools/math/VectorMath.java index aa9f68f6d..f4e757b4e 100644 --- a/src/main/java/com/rapidminer/tools/math/VectorMath.java +++ b/src/main/java/com/rapidminer/tools/math/VectorMath.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/WeightedConfidenceAndLabel.java b/src/main/java/com/rapidminer/tools/math/WeightedConfidenceAndLabel.java index 0d2683956..fb362d36f 100644 --- a/src/main/java/com/rapidminer/tools/math/WeightedConfidenceAndLabel.java +++ b/src/main/java/com/rapidminer/tools/math/WeightedConfidenceAndLabel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/WindowFunction.java b/src/main/java/com/rapidminer/tools/math/WindowFunction.java index 7ca18c52c..9373d4f11 100644 --- a/src/main/java/com/rapidminer/tools/math/WindowFunction.java +++ b/src/main/java/com/rapidminer/tools/math/WindowFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/container/BallTree.java b/src/main/java/com/rapidminer/tools/math/container/BallTree.java index d0a8f9f6a..ee06a5b7c 100644 --- a/src/main/java/com/rapidminer/tools/math/container/BallTree.java +++ b/src/main/java/com/rapidminer/tools/math/container/BallTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/container/BallTreeNode.java b/src/main/java/com/rapidminer/tools/math/container/BallTreeNode.java index 5a283b519..cd9813e47 100644 --- a/src/main/java/com/rapidminer/tools/math/container/BallTreeNode.java +++ b/src/main/java/com/rapidminer/tools/math/container/BallTreeNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/container/BoundedPriorityQueue.java b/src/main/java/com/rapidminer/tools/math/container/BoundedPriorityQueue.java index a931090bf..cf9f4fb2b 100644 --- a/src/main/java/com/rapidminer/tools/math/container/BoundedPriorityQueue.java +++ b/src/main/java/com/rapidminer/tools/math/container/BoundedPriorityQueue.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/container/GeometricDataCollection.java b/src/main/java/com/rapidminer/tools/math/container/GeometricDataCollection.java index 95842ec85..66126dcf4 100644 --- a/src/main/java/com/rapidminer/tools/math/container/GeometricDataCollection.java +++ b/src/main/java/com/rapidminer/tools/math/container/GeometricDataCollection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/container/KDTree.java b/src/main/java/com/rapidminer/tools/math/container/KDTree.java index 1c8fd454f..f8caaecca 100644 --- a/src/main/java/com/rapidminer/tools/math/container/KDTree.java +++ b/src/main/java/com/rapidminer/tools/math/container/KDTree.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/container/KDTreeNode.java b/src/main/java/com/rapidminer/tools/math/container/KDTreeNode.java index 2a6f4fc88..fff25cd7a 100644 --- a/src/main/java/com/rapidminer/tools/math/container/KDTreeNode.java +++ b/src/main/java/com/rapidminer/tools/math/container/KDTreeNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/container/LinearList.java b/src/main/java/com/rapidminer/tools/math/container/LinearList.java index b31a9a67a..db8dd3fe4 100644 --- a/src/main/java/com/rapidminer/tools/math/container/LinearList.java +++ b/src/main/java/com/rapidminer/tools/math/container/LinearList.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/container/Range.java b/src/main/java/com/rapidminer/tools/math/container/Range.java index 5a4f8709b..d4913f10a 100644 --- a/src/main/java/com/rapidminer/tools/math/container/Range.java +++ b/src/main/java/com/rapidminer/tools/math/container/Range.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/container/ReverseComparableComparator.java b/src/main/java/com/rapidminer/tools/math/container/ReverseComparableComparator.java index 9fb1d4373..31b730e38 100644 --- a/src/main/java/com/rapidminer/tools/math/container/ReverseComparableComparator.java +++ b/src/main/java/com/rapidminer/tools/math/container/ReverseComparableComparator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/container/ReverseComparator.java b/src/main/java/com/rapidminer/tools/math/container/ReverseComparator.java index 8ea4527d3..1b43fcbf7 100644 --- a/src/main/java/com/rapidminer/tools/math/container/ReverseComparator.java +++ b/src/main/java/com/rapidminer/tools/math/container/ReverseComparator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/distribution/ContinuousDistribution.java b/src/main/java/com/rapidminer/tools/math/distribution/ContinuousDistribution.java index 1f0e0e03c..a0f5fe322 100644 --- a/src/main/java/com/rapidminer/tools/math/distribution/ContinuousDistribution.java +++ b/src/main/java/com/rapidminer/tools/math/distribution/ContinuousDistribution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/distribution/DiscreteDistribution.java b/src/main/java/com/rapidminer/tools/math/distribution/DiscreteDistribution.java index 1a97c800e..55d28e46b 100644 --- a/src/main/java/com/rapidminer/tools/math/distribution/DiscreteDistribution.java +++ b/src/main/java/com/rapidminer/tools/math/distribution/DiscreteDistribution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/distribution/Distribution.java b/src/main/java/com/rapidminer/tools/math/distribution/Distribution.java index 6c02e634d..958620043 100644 --- a/src/main/java/com/rapidminer/tools/math/distribution/Distribution.java +++ b/src/main/java/com/rapidminer/tools/math/distribution/Distribution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/distribution/EmpiricalDistribution.java b/src/main/java/com/rapidminer/tools/math/distribution/EmpiricalDistribution.java index 910125ed6..34456f284 100644 --- a/src/main/java/com/rapidminer/tools/math/distribution/EmpiricalDistribution.java +++ b/src/main/java/com/rapidminer/tools/math/distribution/EmpiricalDistribution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/distribution/EmpiricalNormalDistribution.java b/src/main/java/com/rapidminer/tools/math/distribution/EmpiricalNormalDistribution.java index 6be7854c4..668da4b07 100644 --- a/src/main/java/com/rapidminer/tools/math/distribution/EmpiricalNormalDistribution.java +++ b/src/main/java/com/rapidminer/tools/math/distribution/EmpiricalNormalDistribution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/distribution/NormalDistribution.java b/src/main/java/com/rapidminer/tools/math/distribution/NormalDistribution.java index 0a44454cd..6904e17f9 100644 --- a/src/main/java/com/rapidminer/tools/math/distribution/NormalDistribution.java +++ b/src/main/java/com/rapidminer/tools/math/distribution/NormalDistribution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/distribution/kernel/FullKernelDistribution.java b/src/main/java/com/rapidminer/tools/math/distribution/kernel/FullKernelDistribution.java index 19d341d35..c85cdc783 100644 --- a/src/main/java/com/rapidminer/tools/math/distribution/kernel/FullKernelDistribution.java +++ b/src/main/java/com/rapidminer/tools/math/distribution/kernel/FullKernelDistribution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/distribution/kernel/GreedyKernelDistribution.java b/src/main/java/com/rapidminer/tools/math/distribution/kernel/GreedyKernelDistribution.java index 870dda9dd..9bdf12d5d 100644 --- a/src/main/java/com/rapidminer/tools/math/distribution/kernel/GreedyKernelDistribution.java +++ b/src/main/java/com/rapidminer/tools/math/distribution/kernel/GreedyKernelDistribution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/distribution/kernel/KernelDistribution.java b/src/main/java/com/rapidminer/tools/math/distribution/kernel/KernelDistribution.java index 6d6934931..8e7a4bc7e 100644 --- a/src/main/java/com/rapidminer/tools/math/distribution/kernel/KernelDistribution.java +++ b/src/main/java/com/rapidminer/tools/math/distribution/kernel/KernelDistribution.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/distribution/kernel/NormalKernel.java b/src/main/java/com/rapidminer/tools/math/distribution/kernel/NormalKernel.java index 39a7510b6..d252fab7a 100644 --- a/src/main/java/com/rapidminer/tools/math/distribution/kernel/NormalKernel.java +++ b/src/main/java/com/rapidminer/tools/math/distribution/kernel/NormalKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/AbstractAggregationFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/AbstractAggregationFunction.java index 4e77c66f4..6f42fb5c3 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/AbstractAggregationFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/AbstractAggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/AggregationFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/AggregationFunction.java index 799a67153..29193ae49 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/AggregationFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/AggregationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/AverageFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/AverageFunction.java index 5ea2ef52b..2608071f0 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/AverageFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/AverageFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/CountFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/CountFunction.java index 412c28478..ce83e9044 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/CountFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/CountFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/MaxFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/MaxFunction.java index ac16b12c1..73f2394a3 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/MaxFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/MaxFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/MedianFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/MedianFunction.java index ec8c1dbb2..11fa3b6b0 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/MedianFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/MedianFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/MinFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/MinFunction.java index 0731b3ae5..919b972c9 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/MinFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/MinFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/ModeFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/ModeFunction.java index e74d90bd4..aa05155cc 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/ModeFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/ModeFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/ProductFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/ProductFunction.java index 8e5a0cb27..e70689c26 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/ProductFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/ProductFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/StandardDeviationFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/StandardDeviationFunction.java index 4c314e5e7..b703d9690 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/StandardDeviationFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/StandardDeviationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/SumFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/SumFunction.java index c0a774e6d..d7086442b 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/SumFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/SumFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/aggregation/VarianceFunction.java b/src/main/java/com/rapidminer/tools/math/function/aggregation/VarianceFunction.java index 5f824c2f7..036012021 100644 --- a/src/main/java/com/rapidminer/tools/math/function/aggregation/VarianceFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/aggregation/VarianceFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/window/BartlettWindowFunction.java b/src/main/java/com/rapidminer/tools/math/function/window/BartlettWindowFunction.java index 79236065f..f917e8112 100644 --- a/src/main/java/com/rapidminer/tools/math/function/window/BartlettWindowFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/window/BartlettWindowFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/window/BlackmanHarrisWindowFunction.java b/src/main/java/com/rapidminer/tools/math/function/window/BlackmanHarrisWindowFunction.java index a1a1b3562..aed26ce5f 100644 --- a/src/main/java/com/rapidminer/tools/math/function/window/BlackmanHarrisWindowFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/window/BlackmanHarrisWindowFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/window/BlackmanWindowFunction.java b/src/main/java/com/rapidminer/tools/math/function/window/BlackmanWindowFunction.java index 3d0817142..4c75955a7 100644 --- a/src/main/java/com/rapidminer/tools/math/function/window/BlackmanWindowFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/window/BlackmanWindowFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/window/GaussianWindowFunction.java b/src/main/java/com/rapidminer/tools/math/function/window/GaussianWindowFunction.java index 5265b5cc0..5ea8700f6 100644 --- a/src/main/java/com/rapidminer/tools/math/function/window/GaussianWindowFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/window/GaussianWindowFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/window/HammingWindowFunction.java b/src/main/java/com/rapidminer/tools/math/function/window/HammingWindowFunction.java index f1c3938db..3683a7fd2 100644 --- a/src/main/java/com/rapidminer/tools/math/function/window/HammingWindowFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/window/HammingWindowFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/window/HannWindowFunction.java b/src/main/java/com/rapidminer/tools/math/function/window/HannWindowFunction.java index 4a01b90ea..61dfbb5ac 100644 --- a/src/main/java/com/rapidminer/tools/math/function/window/HannWindowFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/window/HannWindowFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/window/RectangularWindowFunction.java b/src/main/java/com/rapidminer/tools/math/function/window/RectangularWindowFunction.java index bd21544c2..19feddd0f 100644 --- a/src/main/java/com/rapidminer/tools/math/function/window/RectangularWindowFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/window/RectangularWindowFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/window/TriangularWindowFunction.java b/src/main/java/com/rapidminer/tools/math/function/window/TriangularWindowFunction.java index c0e5adb79..51cd3399a 100644 --- a/src/main/java/com/rapidminer/tools/math/function/window/TriangularWindowFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/window/TriangularWindowFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/function/window/WindowFunction.java b/src/main/java/com/rapidminer/tools/math/function/window/WindowFunction.java index 094b2cce0..4cae080e5 100644 --- a/src/main/java/com/rapidminer/tools/math/function/window/WindowFunction.java +++ b/src/main/java/com/rapidminer/tools/math/function/window/WindowFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/AnovaKernel.java b/src/main/java/com/rapidminer/tools/math/kernels/AnovaKernel.java index 481aed1d5..d8f440743 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/AnovaKernel.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/AnovaKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/DotKernel.java b/src/main/java/com/rapidminer/tools/math/kernels/DotKernel.java index 4b9315311..7dc7ecd6a 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/DotKernel.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/DotKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/EpanechnikovKernel.java b/src/main/java/com/rapidminer/tools/math/kernels/EpanechnikovKernel.java index af1372739..50b8816ad 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/EpanechnikovKernel.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/EpanechnikovKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/FullCache.java b/src/main/java/com/rapidminer/tools/math/kernels/FullCache.java index 8a608d9fb..385d75912 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/FullCache.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/FullCache.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/GaussianCombinationKernel.java b/src/main/java/com/rapidminer/tools/math/kernels/GaussianCombinationKernel.java index 03bdae8af..652c89071 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/GaussianCombinationKernel.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/GaussianCombinationKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/Kernel.java b/src/main/java/com/rapidminer/tools/math/kernels/Kernel.java index a74e95b80..daefd4bbd 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/Kernel.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/Kernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/KernelCache.java b/src/main/java/com/rapidminer/tools/math/kernels/KernelCache.java index 179ecd993..debf5c7a0 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/KernelCache.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/KernelCache.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/MapBasedCache.java b/src/main/java/com/rapidminer/tools/math/kernels/MapBasedCache.java index 7b00bd698..c1cf7a44e 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/MapBasedCache.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/MapBasedCache.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/MultiquadricKernel.java b/src/main/java/com/rapidminer/tools/math/kernels/MultiquadricKernel.java index 44dde9b66..6dd607b7a 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/MultiquadricKernel.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/MultiquadricKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/PolynomialKernel.java b/src/main/java/com/rapidminer/tools/math/kernels/PolynomialKernel.java index ff1440ab0..6e08b9faf 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/PolynomialKernel.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/PolynomialKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/RBFKernel.java b/src/main/java/com/rapidminer/tools/math/kernels/RBFKernel.java index 83e6ffe9f..300b37f37 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/RBFKernel.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/RBFKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/kernels/SigmoidKernel.java b/src/main/java/com/rapidminer/tools/math/kernels/SigmoidKernel.java index 7b47fb8cc..7e565790e 100644 --- a/src/main/java/com/rapidminer/tools/math/kernels/SigmoidKernel.java +++ b/src/main/java/com/rapidminer/tools/math/kernels/SigmoidKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/matrix/CovarianceMatrix.java b/src/main/java/com/rapidminer/tools/math/matrix/CovarianceMatrix.java index 704a873d8..a602d5c7a 100644 --- a/src/main/java/com/rapidminer/tools/math/matrix/CovarianceMatrix.java +++ b/src/main/java/com/rapidminer/tools/math/matrix/CovarianceMatrix.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/matrix/MatrixTools.java b/src/main/java/com/rapidminer/tools/math/matrix/MatrixTools.java index ee1f7a7d1..7373f30be 100644 --- a/src/main/java/com/rapidminer/tools/math/matrix/MatrixTools.java +++ b/src/main/java/com/rapidminer/tools/math/matrix/MatrixTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/Optimization.java b/src/main/java/com/rapidminer/tools/math/optimization/Optimization.java index c6594a7c4..6ed33ce0c 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/Optimization.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/Optimization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/BoltzmannSelection.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/BoltzmannSelection.java index f0bd7b133..923bc93da 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/BoltzmannSelection.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/BoltzmannSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Crossover.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Crossover.java index d0484fc70..3e3fc2cc2 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Crossover.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Crossover.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/CutSelection.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/CutSelection.java index 7b54069a7..b9fc05342 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/CutSelection.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/CutSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/ESOptimization.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/ESOptimization.java index 78aa72ccc..d6f69f721 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/ESOptimization.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/ESOptimization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/ElitistSelection.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/ElitistSelection.java index 46eb72c71..bf7426860 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/ElitistSelection.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/ElitistSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/GaussianMutation.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/GaussianMutation.java index 6642d365e..b161995ee 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/GaussianMutation.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/GaussianMutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Individual.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Individual.java index ead65f31f..df0a4977b 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Individual.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Individual.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Mutation.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Mutation.java index 93790e61a..477ea4121 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Mutation.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Mutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/NonDominatedSortingSelection.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/NonDominatedSortingSelection.java index 28bde6027..67c48b6bc 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/NonDominatedSortingSelection.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/NonDominatedSortingSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/OptimizationValueType.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/OptimizationValueType.java index ffdd2dd37..5f73e3380 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/OptimizationValueType.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/OptimizationValueType.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Population.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Population.java index a43078035..480c4b020 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Population.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/Population.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/PopulationOperator.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/PopulationOperator.java index 7240b8267..82d95bd08 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/PopulationOperator.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/PopulationOperator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/PopulationPlotter.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/PopulationPlotter.java index c5343c4c6..b5abcb485 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/PopulationPlotter.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/PopulationPlotter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/RankSelection.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/RankSelection.java index 454b73c2a..b887ce8e0 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/RankSelection.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/RankSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/RouletteWheel.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/RouletteWheel.java index 263973fa0..504a03256 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/RouletteWheel.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/RouletteWheel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/SparsityMutation.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/SparsityMutation.java index 1badccae2..d75667756 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/SparsityMutation.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/SparsityMutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/StochasticUniversalSampling.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/StochasticUniversalSampling.java index 8a79be765..402537073 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/StochasticUniversalSampling.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/StochasticUniversalSampling.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/SwitchingMutation.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/SwitchingMutation.java index 507d896c4..2447c3918 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/SwitchingMutation.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/SwitchingMutation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/TournamentSelection.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/TournamentSelection.java index f4babbd9b..bfcbb4813 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/TournamentSelection.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/TournamentSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/UniformSelection.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/UniformSelection.java index fdbf5ec06..f963183a8 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/UniformSelection.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/UniformSelection.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/VarianceAdaption.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/VarianceAdaption.java index afe98480e..90dd51a6e 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/es/VarianceAdaption.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/es/VarianceAdaption.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/pso/PSOOptimization.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/pso/PSOOptimization.java index f1ab92839..d33325f81 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/pso/PSOOptimization.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/pso/PSOOptimization.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/optimization/ec/pso/Population.java b/src/main/java/com/rapidminer/tools/math/optimization/ec/pso/Population.java index 129d2cad2..b9613c30a 100644 --- a/src/main/java/com/rapidminer/tools/math/optimization/ec/pso/Population.java +++ b/src/main/java/com/rapidminer/tools/math/optimization/ec/pso/Population.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/sampling/OrderedSamplingWithoutReplacement.java b/src/main/java/com/rapidminer/tools/math/sampling/OrderedSamplingWithoutReplacement.java index 429000772..06df924e2 100644 --- a/src/main/java/com/rapidminer/tools/math/sampling/OrderedSamplingWithoutReplacement.java +++ b/src/main/java/com/rapidminer/tools/math/sampling/OrderedSamplingWithoutReplacement.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/BregmanDivergence.java b/src/main/java/com/rapidminer/tools/math/similarity/BregmanDivergence.java index 6509f25fc..00d76b1e7 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/BregmanDivergence.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/BregmanDivergence.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasure.java b/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasure.java index a2fa70f5c..270e1c2b8 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasure.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasure.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasureHelper.java b/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasureHelper.java index 80b0501ac..b9f3cd3a1 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasureHelper.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasureHelper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasures.java b/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasures.java index e3563cbb1..a766a974b 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasures.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/DistanceMeasures.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/SimilarityMeasure.java b/src/main/java/com/rapidminer/tools/math/similarity/SimilarityMeasure.java index 06afe4d0b..2899d2f17 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/SimilarityMeasure.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/SimilarityMeasure.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/divergences/GeneralizedIDivergence.java b/src/main/java/com/rapidminer/tools/math/similarity/divergences/GeneralizedIDivergence.java index 1cabdc3eb..4e00f233d 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/divergences/GeneralizedIDivergence.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/divergences/GeneralizedIDivergence.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/divergences/ItakuraSaitoDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/divergences/ItakuraSaitoDistance.java index 6305b2098..aa1497a84 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/divergences/ItakuraSaitoDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/divergences/ItakuraSaitoDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/divergences/KLDivergence.java b/src/main/java/com/rapidminer/tools/math/similarity/divergences/KLDivergence.java index 2854d037e..22b7788ce 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/divergences/KLDivergence.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/divergences/KLDivergence.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/divergences/LogarithmicLoss.java b/src/main/java/com/rapidminer/tools/math/similarity/divergences/LogarithmicLoss.java index 175fda121..be46be2b1 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/divergences/LogarithmicLoss.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/divergences/LogarithmicLoss.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/divergences/LogisticLoss.java b/src/main/java/com/rapidminer/tools/math/similarity/divergences/LogisticLoss.java index 89bd86dc7..e017d2085 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/divergences/LogisticLoss.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/divergences/LogisticLoss.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/divergences/MahalanobisDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/divergences/MahalanobisDistance.java index ab05beb29..1d081c96a 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/divergences/MahalanobisDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/divergences/MahalanobisDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/divergences/SquaredEuclideanDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/divergences/SquaredEuclideanDistance.java index 2dcc48785..fbeb2acea 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/divergences/SquaredEuclideanDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/divergences/SquaredEuclideanDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/divergences/SquaredLoss.java b/src/main/java/com/rapidminer/tools/math/similarity/divergences/SquaredLoss.java index 90f5272c7..97d4d44c7 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/divergences/SquaredLoss.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/divergences/SquaredLoss.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/mixed/MixedEuclideanDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/mixed/MixedEuclideanDistance.java index f9c2e3b3d..e9ccbfa6e 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/mixed/MixedEuclideanDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/mixed/MixedEuclideanDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/nominal/AbstractNominalSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/nominal/AbstractNominalSimilarity.java index bf41b8a14..e9dd7cfe4 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/nominal/AbstractNominalSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/nominal/AbstractNominalSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/nominal/DiceNominalSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/nominal/DiceNominalSimilarity.java index a63aa017a..f10f12fb0 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/nominal/DiceNominalSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/nominal/DiceNominalSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/nominal/JaccardNominalSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/nominal/JaccardNominalSimilarity.java index ac53c3383..f3f9f3685 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/nominal/JaccardNominalSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/nominal/JaccardNominalSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/nominal/KulczynskiNominalSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/nominal/KulczynskiNominalSimilarity.java index 5dfe722bf..2a7cbf26a 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/nominal/KulczynskiNominalSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/nominal/KulczynskiNominalSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/nominal/LevenshteinDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/nominal/LevenshteinDistance.java index c6f3133a7..9bc6e1ef1 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/nominal/LevenshteinDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/nominal/LevenshteinDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/nominal/NominalDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/nominal/NominalDistance.java index d8665c5fb..8f79c445b 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/nominal/NominalDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/nominal/NominalDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/nominal/RogersTanimotoNominalSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/nominal/RogersTanimotoNominalSimilarity.java index fd87ce473..82afae0dc 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/nominal/RogersTanimotoNominalSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/nominal/RogersTanimotoNominalSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/nominal/RussellRaoNominalSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/nominal/RussellRaoNominalSimilarity.java index a01551b19..45007a9c4 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/nominal/RussellRaoNominalSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/nominal/RussellRaoNominalSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/nominal/SimpleMatchingNominalSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/nominal/SimpleMatchingNominalSimilarity.java index 1ceada6a1..b2b45ce1a 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/nominal/SimpleMatchingNominalSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/nominal/SimpleMatchingNominalSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/CamberraNumericalDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/CamberraNumericalDistance.java index e75aa8708..4558bc3ae 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/CamberraNumericalDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/CamberraNumericalDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/ChebychevNumericalDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/ChebychevNumericalDistance.java index 0d27a25fe..c203f6671 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/ChebychevNumericalDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/ChebychevNumericalDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/CorrelationSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/CorrelationSimilarity.java index 93ff29dd7..78c14f098 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/CorrelationSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/CorrelationSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/CosineSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/CosineSimilarity.java index 6bce11b9c..c8914da77 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/CosineSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/CosineSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/DTWDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/DTWDistance.java index 8456f2ffa..c66298d10 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/DTWDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/DTWDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/DiceNumericalSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/DiceNumericalSimilarity.java index 44d9b34f7..5144dbd9b 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/DiceNumericalSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/DiceNumericalSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/EuclideanDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/EuclideanDistance.java index c58279bcb..deda770b3 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/EuclideanDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/EuclideanDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/InnerProductSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/InnerProductSimilarity.java index 745fc254a..135000bc7 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/InnerProductSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/InnerProductSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/JaccardNumericalSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/JaccardNumericalSimilarity.java index f03e8489d..d16273045 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/JaccardNumericalSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/JaccardNumericalSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/KernelEuclideanDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/KernelEuclideanDistance.java index 1864d3125..0d5a15563 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/KernelEuclideanDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/KernelEuclideanDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/ManhattanDistance.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/ManhattanDistance.java index 4c81d522f..3c4972b34 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/ManhattanDistance.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/ManhattanDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/MaxProductSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/MaxProductSimilarity.java index 9aa2eea38..85eb543f7 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/MaxProductSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/MaxProductSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/similarity/numerical/OverlapNumericalSimilarity.java b/src/main/java/com/rapidminer/tools/math/similarity/numerical/OverlapNumericalSimilarity.java index 22ec87113..8e6ef9d91 100644 --- a/src/main/java/com/rapidminer/tools/math/similarity/numerical/OverlapNumericalSimilarity.java +++ b/src/main/java/com/rapidminer/tools/math/similarity/numerical/OverlapNumericalSimilarity.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/BisquareSmoothingKernel.java b/src/main/java/com/rapidminer/tools/math/smoothing/BisquareSmoothingKernel.java index 45dc3e59e..b8909002c 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/BisquareSmoothingKernel.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/BisquareSmoothingKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/EpanechnikovSmoothingKernel.java b/src/main/java/com/rapidminer/tools/math/smoothing/EpanechnikovSmoothingKernel.java index c39d9ca45..681f1bf16 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/EpanechnikovSmoothingKernel.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/EpanechnikovSmoothingKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/ExponentialSmoothingKernel.java b/src/main/java/com/rapidminer/tools/math/smoothing/ExponentialSmoothingKernel.java index b2cee2244..277d54363 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/ExponentialSmoothingKernel.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/ExponentialSmoothingKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/GaussianSmoothingKernel.java b/src/main/java/com/rapidminer/tools/math/smoothing/GaussianSmoothingKernel.java index a36a05e89..54539b931 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/GaussianSmoothingKernel.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/GaussianSmoothingKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/McLainSmoothingKernel.java b/src/main/java/com/rapidminer/tools/math/smoothing/McLainSmoothingKernel.java index e56555222..a212d9ea3 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/McLainSmoothingKernel.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/McLainSmoothingKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/RectangularSmoothingKernel.java b/src/main/java/com/rapidminer/tools/math/smoothing/RectangularSmoothingKernel.java index 8f87bdc0c..0819498ff 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/RectangularSmoothingKernel.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/RectangularSmoothingKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/SmoothingKernel.java b/src/main/java/com/rapidminer/tools/math/smoothing/SmoothingKernel.java index 18372f2cf..0abb4fa88 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/SmoothingKernel.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/SmoothingKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/SmoothingKernels.java b/src/main/java/com/rapidminer/tools/math/smoothing/SmoothingKernels.java index fb1c4639f..326cd67bd 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/SmoothingKernels.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/SmoothingKernels.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/TriangularSmoothingKernel.java b/src/main/java/com/rapidminer/tools/math/smoothing/TriangularSmoothingKernel.java index 0996f9357..f1c8558d3 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/TriangularSmoothingKernel.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/TriangularSmoothingKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/TricubeSmoothingKernel.java b/src/main/java/com/rapidminer/tools/math/smoothing/TricubeSmoothingKernel.java index 171373729..1d49b45fb 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/TricubeSmoothingKernel.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/TricubeSmoothingKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/smoothing/TriweightSmoothingKernel.java b/src/main/java/com/rapidminer/tools/math/smoothing/TriweightSmoothingKernel.java index f778744d0..fe3d10d42 100644 --- a/src/main/java/com/rapidminer/tools/math/smoothing/TriweightSmoothingKernel.java +++ b/src/main/java/com/rapidminer/tools/math/smoothing/TriweightSmoothingKernel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/som/AdaptationFunction.java b/src/main/java/com/rapidminer/tools/math/som/AdaptationFunction.java index eb9d4fec1..e5628b6c4 100644 --- a/src/main/java/com/rapidminer/tools/math/som/AdaptationFunction.java +++ b/src/main/java/com/rapidminer/tools/math/som/AdaptationFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/som/DistanceFunction.java b/src/main/java/com/rapidminer/tools/math/som/DistanceFunction.java index 229e8274f..4589a371b 100644 --- a/src/main/java/com/rapidminer/tools/math/som/DistanceFunction.java +++ b/src/main/java/com/rapidminer/tools/math/som/DistanceFunction.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/som/EuclideanDistance.java b/src/main/java/com/rapidminer/tools/math/som/EuclideanDistance.java index a68759fdd..6b5b38b77 100644 --- a/src/main/java/com/rapidminer/tools/math/som/EuclideanDistance.java +++ b/src/main/java/com/rapidminer/tools/math/som/EuclideanDistance.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/som/KohonenNet.java b/src/main/java/com/rapidminer/tools/math/som/KohonenNet.java index e7bb630f3..d840e64e9 100644 --- a/src/main/java/com/rapidminer/tools/math/som/KohonenNet.java +++ b/src/main/java/com/rapidminer/tools/math/som/KohonenNet.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/som/KohonenNode.java b/src/main/java/com/rapidminer/tools/math/som/KohonenNode.java index f5ddf5a68..e3b48b9be 100644 --- a/src/main/java/com/rapidminer/tools/math/som/KohonenNode.java +++ b/src/main/java/com/rapidminer/tools/math/som/KohonenNode.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/som/KohonenTrainingsData.java b/src/main/java/com/rapidminer/tools/math/som/KohonenTrainingsData.java index 4ea3a4ee2..73ce283fe 100644 --- a/src/main/java/com/rapidminer/tools/math/som/KohonenTrainingsData.java +++ b/src/main/java/com/rapidminer/tools/math/som/KohonenTrainingsData.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/som/ProgressListener.java b/src/main/java/com/rapidminer/tools/math/som/ProgressListener.java index f11d380e0..e22f06cca 100644 --- a/src/main/java/com/rapidminer/tools/math/som/ProgressListener.java +++ b/src/main/java/com/rapidminer/tools/math/som/ProgressListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/som/RandomDataContainer.java b/src/main/java/com/rapidminer/tools/math/som/RandomDataContainer.java index 9749b5d3a..51a58520b 100644 --- a/src/main/java/com/rapidminer/tools/math/som/RandomDataContainer.java +++ b/src/main/java/com/rapidminer/tools/math/som/RandomDataContainer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/math/som/RitterAdaptation.java b/src/main/java/com/rapidminer/tools/math/som/RitterAdaptation.java index b900d5d34..378e57724 100644 --- a/src/main/java/com/rapidminer/tools/math/som/RitterAdaptation.java +++ b/src/main/java/com/rapidminer/tools/math/som/RitterAdaptation.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/metadata/MetaDataTools.java b/src/main/java/com/rapidminer/tools/metadata/MetaDataTools.java index 56346a088..9ef63aa8f 100644 --- a/src/main/java/com/rapidminer/tools/metadata/MetaDataTools.java +++ b/src/main/java/com/rapidminer/tools/metadata/MetaDataTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/parameter/Parameter.java b/src/main/java/com/rapidminer/tools/parameter/Parameter.java index 10821649b..0fff6f2a9 100644 --- a/src/main/java/com/rapidminer/tools/parameter/Parameter.java +++ b/src/main/java/com/rapidminer/tools/parameter/Parameter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/parameter/ParameterChangeListener.java b/src/main/java/com/rapidminer/tools/parameter/ParameterChangeListener.java index 6c86ab33e..548862f96 100644 --- a/src/main/java/com/rapidminer/tools/parameter/ParameterChangeListener.java +++ b/src/main/java/com/rapidminer/tools/parameter/ParameterChangeListener.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/parameter/ParameterScope.java b/src/main/java/com/rapidminer/tools/parameter/ParameterScope.java index 3c620450e..767be0d20 100644 --- a/src/main/java/com/rapidminer/tools/parameter/ParameterScope.java +++ b/src/main/java/com/rapidminer/tools/parameter/ParameterScope.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/parameter/ParameterWriter.java b/src/main/java/com/rapidminer/tools/parameter/ParameterWriter.java index ca7f2fb13..7835d47bd 100644 --- a/src/main/java/com/rapidminer/tools/parameter/ParameterWriter.java +++ b/src/main/java/com/rapidminer/tools/parameter/ParameterWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/parameter/WindowsBatParameterWriter.java b/src/main/java/com/rapidminer/tools/parameter/WindowsBatParameterWriter.java index 995580088..edd5c0b31 100644 --- a/src/main/java/com/rapidminer/tools/parameter/WindowsBatParameterWriter.java +++ b/src/main/java/com/rapidminer/tools/parameter/WindowsBatParameterWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/parameter/WindowsExeParameterWriter.java b/src/main/java/com/rapidminer/tools/parameter/WindowsExeParameterWriter.java index ccd724c1f..ed3fd1645 100644 --- a/src/main/java/com/rapidminer/tools/parameter/WindowsExeParameterWriter.java +++ b/src/main/java/com/rapidminer/tools/parameter/WindowsExeParameterWriter.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/parameter/internal/DataManagementParameterHelper.java b/src/main/java/com/rapidminer/tools/parameter/internal/DataManagementParameterHelper.java index 001fa7c21..c3fb8e018 100644 --- a/src/main/java/com/rapidminer/tools/parameter/internal/DataManagementParameterHelper.java +++ b/src/main/java/com/rapidminer/tools/parameter/internal/DataManagementParameterHelper.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/patterns/Visitor.java b/src/main/java/com/rapidminer/tools/patterns/Visitor.java index 6e823638e..468a20040 100644 --- a/src/main/java/com/rapidminer/tools/patterns/Visitor.java +++ b/src/main/java/com/rapidminer/tools/patterns/Visitor.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/plugin/AllPluginsClassLoader.java b/src/main/java/com/rapidminer/tools/plugin/AllPluginsClassLoader.java index 57c0cecbe..350080bd0 100644 --- a/src/main/java/com/rapidminer/tools/plugin/AllPluginsClassLoader.java +++ b/src/main/java/com/rapidminer/tools/plugin/AllPluginsClassLoader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/plugin/Dependency.java b/src/main/java/com/rapidminer/tools/plugin/Dependency.java index b87411e90..11a9224bc 100644 --- a/src/main/java/com/rapidminer/tools/plugin/Dependency.java +++ b/src/main/java/com/rapidminer/tools/plugin/Dependency.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/plugin/ManagedExtension.java b/src/main/java/com/rapidminer/tools/plugin/ManagedExtension.java index a98838d87..9c8921216 100644 --- a/src/main/java/com/rapidminer/tools/plugin/ManagedExtension.java +++ b/src/main/java/com/rapidminer/tools/plugin/ManagedExtension.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -127,7 +127,7 @@ public String getName() { } private File findFile() { - return findFile(selectedVersion.getShortLongVersion()); + return findFile(getSelectedShortLongVersion()); } private File findFile(String version) { @@ -172,13 +172,17 @@ public static File getUserExtensionsDir() { return FileSystemService.getUserConfigFile("managed"); } + private String getSelectedShortLongVersion() { + return selectedVersion == null ? null : selectedVersion.getShortLongVersion(); + } + private Element toXML(Document doc) { Element result = doc.createElement("extension"); XMLTools.setTagContents(result, "id", packageID); XMLTools.setTagContents(result, "name", name); XMLTools.setTagContents(result, "active", "" + active); XMLTools.setTagContents(result, "license", license); - XMLTools.setTagContents(result, "selected-version", selectedVersion.getShortLongVersion()); + XMLTools.setTagContents(result, "selected-version", getSelectedShortLongVersion()); for (VersionNumber v : installedVersions) { Element elem = doc.createElement("installed-version"); result.appendChild(elem); diff --git a/src/main/java/com/rapidminer/tools/plugin/Plugin.java b/src/main/java/com/rapidminer/tools/plugin/Plugin.java index 1f6025335..952e9906b 100644 --- a/src/main/java/com/rapidminer/tools/plugin/Plugin.java +++ b/src/main/java/com/rapidminer/tools/plugin/Plugin.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -59,7 +59,6 @@ import java.util.jar.JarFile; import java.util.jar.Manifest; import java.util.logging.Level; - import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.xml.bind.DatatypeConverter; diff --git a/src/main/java/com/rapidminer/tools/plugin/PluginClassLoader.java b/src/main/java/com/rapidminer/tools/plugin/PluginClassLoader.java index 1459390d0..4d804529a 100644 --- a/src/main/java/com/rapidminer/tools/plugin/PluginClassLoader.java +++ b/src/main/java/com/rapidminer/tools/plugin/PluginClassLoader.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/plugin/PluginException.java b/src/main/java/com/rapidminer/tools/plugin/PluginException.java index 9dc1a1479..fe2a704b7 100644 --- a/src/main/java/com/rapidminer/tools/plugin/PluginException.java +++ b/src/main/java/com/rapidminer/tools/plugin/PluginException.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/update/internal/UpdateManager.java b/src/main/java/com/rapidminer/tools/update/internal/UpdateManager.java index 653b9a22a..8acf59939 100644 --- a/src/main/java/com/rapidminer/tools/update/internal/UpdateManager.java +++ b/src/main/java/com/rapidminer/tools/update/internal/UpdateManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/update/internal/UpdateManagerFactory.java b/src/main/java/com/rapidminer/tools/update/internal/UpdateManagerFactory.java index 78a2df070..0e5717c40 100644 --- a/src/main/java/com/rapidminer/tools/update/internal/UpdateManagerFactory.java +++ b/src/main/java/com/rapidminer/tools/update/internal/UpdateManagerFactory.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/update/internal/UpdateManagerRegistry.java b/src/main/java/com/rapidminer/tools/update/internal/UpdateManagerRegistry.java index 71ce53c1e..8965e11e0 100644 --- a/src/main/java/com/rapidminer/tools/update/internal/UpdateManagerRegistry.java +++ b/src/main/java/com/rapidminer/tools/update/internal/UpdateManagerRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/usagestats/ActionStatisticsCollector.java b/src/main/java/com/rapidminer/tools/usagestats/ActionStatisticsCollector.java index 57be7a35f..4d5d720bc 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/ActionStatisticsCollector.java +++ b/src/main/java/com/rapidminer/tools/usagestats/ActionStatisticsCollector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -37,12 +37,9 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; - import javax.swing.AbstractButton; import javax.swing.Action; -import javax.swing.JPasswordField; import javax.swing.JToggleButton; -import javax.swing.text.JTextComponent; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -55,6 +52,7 @@ import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceAction; import com.rapidminer.gui.tools.components.AbstractLinkButton; +import com.rapidminer.io.process.AutoModelProcessXMLFilter; import com.rapidminer.io.process.XMLTools; import com.rapidminer.operator.IOObject; import com.rapidminer.operator.Operator; @@ -63,6 +61,7 @@ import com.rapidminer.operator.ports.InputPort; import com.rapidminer.operator.ports.OutputPort; import com.rapidminer.operator.ports.Port; +import com.rapidminer.repository.search.RepositoryGlobalSearch; import com.rapidminer.tools.XMLException; import com.rapidminer.tools.container.Pair; @@ -200,7 +199,18 @@ public enum ActionStatisticsCollector { public static final String ARG_CTA_LIMIT_DECREASED_TIMEFRAME = "decreased_timeframe"; public static final String VALUE_MODE = "mode"; public static final String VALUE_CONSTANT_START = "start"; - + + /** introduced in 8.1 for the new Global Search */ + private static final String TYPE_GLOBAL_SEARCH = "global_search"; + public static final String VALUE_TIMEOUT = "timeout"; + public static final String VALUE_FOCUS_LOST = "focus_lost"; + public static final String VALUE_ACTION = "action"; + public static final String ARG_GLOBAL_SEARCH_SPACER = "|"; + public static final String ARG_GLOBAL_SEARCH_CATEGORY_ALL = "all"; + /** introduced in 8.1 */ + public static final String PREFIX_TYPE_AUTOMODEL_GENERATED = "am_gen_"; + public static final String PREFIX_TYPE_AUTOMODEL_EXPORTED = "am_exp_"; + /** conversion constant for bytes to megabytes */ private static final int BYTE_TO_MB = 1024 * 1024; @@ -210,6 +220,51 @@ public enum ActionStatisticsCollector { private static final boolean DISABLED = RapidMiner.getExecutionMode().isHeadless() && RapidMiner.getExecutionMode() != RapidMiner.ExecutionMode.COMMAND_LINE; + + /** + * Log usage of the global search. + * + * @param value + * one of timeout or focus_lost + * @param searchTerm + * the term that lead to this result + * @param categoryId + * the category that was searched + * @param numResults + * the potential amount of hits + * @since 8.1 + */ + public void logGlobalSearch(String value, String searchTerm, String categoryId, long numResults) { + StringBuilder arg = new StringBuilder(); + arg.append(searchTerm).append(ARG_GLOBAL_SEARCH_SPACER); + arg.append(categoryId).append(ARG_GLOBAL_SEARCH_SPACER); + arg.append(numResults); + log(TYPE_GLOBAL_SEARCH, value, arg.toString()); + } + + /** + * Log actions executed through global search. + * + * @param searchTerm + * the search executed to run the action + * @param categoryId + * the category that was searched + * @param chosenItemIdentifier + * name of the item the user picked + * @since 8.1 + */ + public void logGlobalSearchAction(String searchTerm, String categoryId, String chosenItemIdentifier) { + String myChosenItem = chosenItemIdentifier; + if (RepositoryGlobalSearch.CATEGORY_ID.equalsIgnoreCase(categoryId)) { + myChosenItem = ""; + } + StringBuilder arg = new StringBuilder(); + arg.append(searchTerm).append(ARG_GLOBAL_SEARCH_SPACER); + arg.append(categoryId).append(ARG_GLOBAL_SEARCH_SPACER); + arg.append(myChosenItem); + log(TYPE_GLOBAL_SEARCH, VALUE_ACTION, arg.toString()); + } + /** * A Key defines an identifier that is used to store some collected usage data associated with it. It has 3 levels, * TYPE, VALUE and ARG, where ARG may be null. @@ -279,7 +334,7 @@ private static Pair fromArgWithIndicators(String a } AggregationIndicator(String name, BiFunction dataCombiner, - Function dataTransformer) { + Function dataTransformer) { this.name = name; this.dataCombiner = dataCombiner; this.dataTransformer = dataTransformer; @@ -330,7 +385,7 @@ private static Pair, String> fromArgWithIndicators(String ar } else { Set labelIndicators = EnumSet.noneOf(LabelIndicator.class); LabelIndicator[] lis = LabelIndicator.values(); - for (int i = lis.length - 1; i >= 0; -- i) { + for (int i = lis.length - 1; i >= 0; --i) { if (argWithIndicators.endsWith(lis[i].toString())) { labelIndicators.add(lis[i]); argWithIndicators = argWithIndicators.substring(0, argWithIndicators.length() - lis[i].toString().length()); @@ -386,12 +441,12 @@ public Key(String type, String value, String arg, Set labelIndic } public Key(String type, String value, String arg, Set labelIndicators, - AggregationIndicator aggregationIndicator) { + AggregationIndicator aggregationIndicator) { this.type = type; this.value = value; this.arg = arg; this.labelIndicators = labelIndicators == null ? EnumSet.noneOf(LabelIndicator.class) : labelIndicators; - this.aggregationIndicator = aggregationIndicator == null ? AggregationIndicator.SUM: aggregationIndicator; + this.aggregationIndicator = aggregationIndicator == null ? AggregationIndicator.SUM : aggregationIndicator; argWithIndicators = computeArgWithIndicators(); } @@ -642,7 +697,7 @@ public void processFinishedOperator(Process process, Operator op) { } // log the memory volume used - logMemory(); + logMemory(process); } @Override @@ -691,38 +746,38 @@ protected void start() { RapidMinerGUI.getMainFrame().getDockingDesktop().addDockableStateChangeListener(e -> log(TYPE_DOCKABLE, e.getNewState().getDockable().getDockKey().getKey(), - e.getNewState().getLocation().toString()) + e.getNewState().getLocation().toString()) ); } /** * Logs an {@link ActionEvent} to statistics, with the detailed circumstances of the event. - * + * * @param action * @param actionEvent */ public void logAction(Action action, ActionEvent actionEvent) { - String actionCommand = actionEvent.getActionCommand(); - if (actionCommand != null) { - Object source = actionEvent.getSource(); - StringBuilder arg = new StringBuilder(source.getClass().getName()); - arg.append("|"); - arg.append(actionCommand); - if (source instanceof AbstractButton) { - arg.append("|"); - arg.append(((AbstractButton) source).getText()); - arg.append("|"); - arg.append(((AbstractButton) source).isSelected()); - } else if (source instanceof JTextComponent && !(source instanceof JPasswordField)) { - arg.append("|"); - arg.append(((JTextComponent) source).getText()); - } - if (action instanceof ResourceAction) { - log(TYPE_RESOURCE_ACTION, ((ResourceAction) action).getKey(), arg.toString()); - } else { - log(TYPE_SIMPLE_ACTION, (String) action.getValue(Action.NAME), arg.toString()); + StringBuilder arg = new StringBuilder(); + if (actionEvent != null) { + String actionCommand = actionEvent.getActionCommand(); + if (actionCommand != null) { + Object source = actionEvent.getSource(); + if (source != null) { + arg.append(source.getClass().getName()); + arg.append("|"); + arg.append(actionCommand); + if (source instanceof AbstractButton) { + arg.append("|"); + arg.append(((AbstractButton) source).isSelected()); + } + } } } + if (action instanceof ResourceAction) { + log(TYPE_RESOURCE_ACTION, ((ResourceAction) action).getKey(), arg.toString()); + } else if (action.getValue(Action.NAME) != null) { + log(TYPE_SIMPLE_ACTION, String.valueOf(action.getValue(Action.NAME)), arg.toString()); + } } private void logAction(Object component) { @@ -755,6 +810,25 @@ private void logAction(Object component) { } } + private static String prefixAutoModelUsage(Operator operator) { + if (operator == null) { + return ""; + } + + AutoModelProcessXMLFilter.AutoModelState autoModelState = AutoModelProcessXMLFilter.getAutoModelState(operator); + if (autoModelState == null) { + return ""; + } + switch (autoModelState) { + case GENERATED: + return PREFIX_TYPE_AUTOMODEL_GENERATED; + case EXPORTED: + return PREFIX_TYPE_AUTOMODEL_EXPORTED; + default: + return ""; + } + } + /** * Logs the operator execution event and adds the {@link ProcessListener} logging the operator * volumes. @@ -766,50 +840,62 @@ public void logExecution(Process process) { if (process == null) { return; } + + String autoModelPrefix = prefixAutoModelUsage(process.getRootOperator()); + // add listener for operator port volume logging process.getRootOperator().addProcessListener(operatorVolumeListener); List allInnerOperators = process.getRootOperator().getAllInnerOperators(); int size = 0; for (Operator op : allInnerOperators) { if (op.isEnabled()) { - log(TYPE_OPERATOR, op.getOperatorDescription().getKey(), OPERATOR_EVENT_EXECUTION); - ++ size; + log(op, OPERATOR_EVENT_EXECUTION); + ++size; } } - log(TYPE_PROCESS, VALUE_OPERATOR_COUNT, Integer.toString(size)); - startTimer(process, TYPE_PROCESS, VALUE_EXECUTION, ARG_RUNTIME); + log(autoModelPrefix + TYPE_PROCESS, VALUE_OPERATOR_COUNT, Integer.toString(size)); + startTimer(process, autoModelPrefix + TYPE_PROCESS, VALUE_EXECUTION, ARG_RUNTIME); } /** * Logs process execution success */ - public void logExecutionSuccess() { - log(TYPE_PROCESS, VALUE_EXECUTION, ARG_SUCCESS); + public void logExecutionSuccess(Process process) { + String autoModelPrefix = prefixAutoModelUsage(process.getRootOperator()); + + log(autoModelPrefix + TYPE_PROCESS, VALUE_EXECUTION, ARG_SUCCESS); } /** * Logs process execution start */ - public void logExecutionStarted() { - log(TYPE_PROCESS, VALUE_EXECUTION, ARG_STARTED); + public void logExecutionStarted(Process process) { + String autoModelPrefix = prefixAutoModelUsage(process.getRootOperator()); + + log(autoModelPrefix + TYPE_PROCESS, VALUE_EXECUTION, ARG_STARTED); } /** * Logs the details of the exception thrown during process execution. * The argument holds all information about the exception, i.e. related operator, * error name, stacktrace. - * + * * @param process * The process being executed when the exception was thrown. * @param e * The exception to be logged. */ public void logExecutionException(Process process, Exception e) { + String autoModelPrefix = prefixAutoModelUsage(process.getRootOperator()); + if (e instanceof ProcessStoppedException) { - log(TYPE_PROCESS, VALUE_EXECUTION, ARG_STOPPED); - } else { - log(TYPE_PROCESS, VALUE_EXECUTION, ARG_FAILED); - StringBuilder exception = new StringBuilder(process.getCurrentOperator().getOperatorDescription().getKey()); + log(autoModelPrefix + TYPE_PROCESS, VALUE_EXECUTION, ARG_STOPPED); + } else { + log(autoModelPrefix + TYPE_PROCESS, VALUE_EXECUTION, ARG_FAILED); + StringBuilder exception = new StringBuilder(); + if (process.getCurrentOperator() != null) { + exception.append(process.getCurrentOperator().getOperatorDescription().getKey()); + } if (e instanceof UserError) { UserError ue = (UserError) e; exception.append("|ue|"); @@ -819,11 +905,11 @@ public void logExecutionException(Process process, Exception e) { exception.append("|"); } else { exception.append("|ex|"); - exception.append(e.toString()); + exception.append(e.getClass()); exception.append("||"); } exception.append(getExceptionStackTraceAsString(e)); - log(TYPE_PROCESS, VALUE_EXCEPTION, exception.toString()); + log(autoModelPrefix + TYPE_PROCESS, VALUE_EXCEPTION, exception.toString()); } } @@ -889,7 +975,9 @@ public void logCtaRuleTriggered(String ruleID, String result) { * the columns of the example set at the port */ private void logInputVolume(Operator operator, InputPort port, int rows, int columns) { - logVolume(TYPE_INPUT_VOLUME, operator, port, rows, columns); + String autoModelPrefix = prefixAutoModelUsage(operator); + + logVolume(autoModelPrefix + TYPE_INPUT_VOLUME, operator, port, rows, columns); } /** @@ -906,14 +994,18 @@ private void logInputVolume(Operator operator, InputPort port, int rows, int col * the columns of the example set at the port */ private void logOutputVolume(Operator operator, OutputPort port, int rows, int columns) { - logVolume(TYPE_OUTPUT_VOLUME, operator, port, rows, columns); + String autoModelPrefix = prefixAutoModelUsage(operator); + + logVolume(autoModelPrefix + TYPE_OUTPUT_VOLUME, operator, port, rows, columns); } public void log(Operator op, String event) { if (op == null) { return; } - log(TYPE_OPERATOR, op.getOperatorDescription().getKey(), event); + String autoModelPrefix = prefixAutoModelUsage(op); + + log(autoModelPrefix + TYPE_OPERATOR, op.getOperatorDescription().getKey(), event); } /** Adds 1 to the aggregated value */ @@ -931,15 +1023,19 @@ public void log(String type, String value, String arg) { * the execution time (in milliseconds) to log */ private void logOperatorExecutionTime(Operator operator, long executionTime) { - logCountSumMinMax(TYPE_OPERATOR, operator.getOperatorDescription().getKey(), OPERATOR_RUNTIME, executionTime); + String autoModelPrefix = prefixAutoModelUsage(operator); + + logCountSumMinMax(autoModelPrefix + TYPE_OPERATOR, operator.getOperatorDescription().getKey(), OPERATOR_RUNTIME, executionTime); } /** * Logs sum, max and count of the total memory currently used. */ - private void logMemory() { + private void logMemory(Process process) { + String autoModelPrefix = prefixAutoModelUsage(process.getRootOperator()); + long totalSize = Runtime.getRuntime().totalMemory() / BYTE_TO_MB; - Key key = new Key(TYPE_MEMORY, MEMORY_USED, MEMORY_ARG); + Key key = new Key(autoModelPrefix + TYPE_MEMORY, MEMORY_USED, MEMORY_ARG); log(key, totalSize); logMax(key, totalSize); logCount(key, totalSize); diff --git a/src/main/java/com/rapidminer/tools/usagestats/ActionStatisticsTable.java b/src/main/java/com/rapidminer/tools/usagestats/ActionStatisticsTable.java index 95ecc568b..47190a8b9 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/ActionStatisticsTable.java +++ b/src/main/java/com/rapidminer/tools/usagestats/ActionStatisticsTable.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/usagestats/CallToActionScheduler.java b/src/main/java/com/rapidminer/tools/usagestats/CallToActionScheduler.java index bdbd554ff..0802f7b25 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/CallToActionScheduler.java +++ b/src/main/java/com/rapidminer/tools/usagestats/CallToActionScheduler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/usagestats/CtaDao.java b/src/main/java/com/rapidminer/tools/usagestats/CtaDao.java index 08f9f0c7c..3a6076416 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/CtaDao.java +++ b/src/main/java/com/rapidminer/tools/usagestats/CtaDao.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/usagestats/CtaDataSource.java b/src/main/java/com/rapidminer/tools/usagestats/CtaDataSource.java index d10d7c8ef..e8d5aa667 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/CtaDataSource.java +++ b/src/main/java/com/rapidminer/tools/usagestats/CtaDataSource.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/usagestats/CtaEventAggregator.java b/src/main/java/com/rapidminer/tools/usagestats/CtaEventAggregator.java index 3f3867d51..967624676 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/CtaEventAggregator.java +++ b/src/main/java/com/rapidminer/tools/usagestats/CtaEventAggregator.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -113,6 +113,10 @@ boolean matchesKey(Key key) { // the argument of logged exceptions are too long and irrelevant new BlackListItem(new Key(ActionStatisticsCollector.TYPE_PROCESS, ActionStatisticsCollector.VALUE_EXCEPTION, null), true, true, false), + new BlackListItem(new Key(ActionStatisticsCollector.PREFIX_TYPE_AUTOMODEL_GENERATED + ActionStatisticsCollector.TYPE_PROCESS, ActionStatisticsCollector.VALUE_EXCEPTION, + null), true, true, false), + new BlackListItem(new Key(ActionStatisticsCollector.PREFIX_TYPE_AUTOMODEL_EXPORTED + ActionStatisticsCollector.TYPE_PROCESS, ActionStatisticsCollector.VALUE_EXCEPTION, + null), true, true, false), // progress-thread typed logs are irrelevant new BlackListItem(new Key(ActionStatisticsCollector.TYPE_PROGRESS_THREAD, null, null), true, false, false), diff --git a/src/main/java/com/rapidminer/tools/usagestats/LocalRuleProvider.java b/src/main/java/com/rapidminer/tools/usagestats/LocalRuleProvider.java index 5615ea1c8..33e68b6a1 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/LocalRuleProvider.java +++ b/src/main/java/com/rapidminer/tools/usagestats/LocalRuleProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/usagestats/RemoteRuleProvider.java b/src/main/java/com/rapidminer/tools/usagestats/RemoteRuleProvider.java index 3db7f63fd..c234e6f3e 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/RemoteRuleProvider.java +++ b/src/main/java/com/rapidminer/tools/usagestats/RemoteRuleProvider.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/usagestats/Rule.java b/src/main/java/com/rapidminer/tools/usagestats/Rule.java index 0a752bd4f..603ad7534 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/Rule.java +++ b/src/main/java/com/rapidminer/tools/usagestats/Rule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/usagestats/RuleService.java b/src/main/java/com/rapidminer/tools/usagestats/RuleService.java index 71e3ca4b1..ca687fb75 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/RuleService.java +++ b/src/main/java/com/rapidminer/tools/usagestats/RuleService.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/usagestats/UsageStatistics.java b/src/main/java/com/rapidminer/tools/usagestats/UsageStatistics.java index ebc222c63..02cd0f5a0 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/UsageStatistics.java +++ b/src/main/java/com/rapidminer/tools/usagestats/UsageStatistics.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -34,7 +34,6 @@ import java.util.Date; import java.util.Random; import java.util.logging.Level; - import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -119,7 +118,7 @@ private void load() { try { LogService.getRoot().log(Level.CONFIG, "com.rapidminer.gui.tools.usagestats.UsageStatistics.loading_operator_statistics"); - Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file); + Document doc = XMLTools.createDocumentBuilder().parse(file); Element root = doc.getDocumentElement(); String lastResetString = root.getAttribute("last-reset"); Date lastReset = parseDate(lastResetString); diff --git a/src/main/java/com/rapidminer/tools/usagestats/UsageStatsScheduler.java b/src/main/java/com/rapidminer/tools/usagestats/UsageStatsScheduler.java index 4d7ad14ed..0e0075bf6 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/UsageStatsScheduler.java +++ b/src/main/java/com/rapidminer/tools/usagestats/UsageStatsScheduler.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -193,6 +193,7 @@ static void scheduleTransmission(UsageStatistics.Reason reason, boolean reschedu stopTimer(); timerDate = timeToFire; timer = new Timer("UsageStatTimer", true); + UsageStatistics.getInstance().setNextTransmission(timeToFire); timer.schedule(new TimerTask() { @Override @@ -201,7 +202,6 @@ public void run() { } }, timerDate); - UsageStatistics.getInstance().setNextTransmission(timeToFire); } } @@ -219,6 +219,9 @@ public static void transmitOnShutdown() { stopTimer(); if (shouldTransmitOnShutdown()) { + if (UsageStatistics.getInstance().getNextTransmission() == null) { + UsageStatistics.getInstance().setNextTransmission(getTransmissionDate(UsageStatistics.Reason.SHUTDOWN)); + } transmit(UsageStatistics.Reason.SHUTDOWN, true); UsageStatistics.getInstance().save(); } diff --git a/src/main/java/com/rapidminer/tools/usagestats/UsageStatsTransmissionDialog.java b/src/main/java/com/rapidminer/tools/usagestats/UsageStatsTransmissionDialog.java index c2f41c6e0..96001d8e5 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/UsageStatsTransmissionDialog.java +++ b/src/main/java/com/rapidminer/tools/usagestats/UsageStatsTransmissionDialog.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/usagestats/VerifiableRule.java b/src/main/java/com/rapidminer/tools/usagestats/VerifiableRule.java index 953895da5..1d7a56233 100644 --- a/src/main/java/com/rapidminer/tools/usagestats/VerifiableRule.java +++ b/src/main/java/com/rapidminer/tools/usagestats/VerifiableRule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/xml/MapBasedNamespaceContext.java b/src/main/java/com/rapidminer/tools/xml/MapBasedNamespaceContext.java index 3d6d3d294..eff6339bd 100644 --- a/src/main/java/com/rapidminer/tools/xml/MapBasedNamespaceContext.java +++ b/src/main/java/com/rapidminer/tools/xml/MapBasedNamespaceContext.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tools/xml/XHTMLEntityResolver.java b/src/main/java/com/rapidminer/tools/xml/XHTMLEntityResolver.java index a49b98c29..8df726be3 100644 --- a/src/main/java/com/rapidminer/tools/xml/XHTMLEntityResolver.java +++ b/src/main/java/com/rapidminer/tools/xml/XHTMLEntityResolver.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tutorial/Tutorial.java b/src/main/java/com/rapidminer/tutorial/Tutorial.java index 6a2012904..a600a2872 100644 --- a/src/main/java/com/rapidminer/tutorial/Tutorial.java +++ b/src/main/java/com/rapidminer/tutorial/Tutorial.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tutorial/TutorialGroup.java b/src/main/java/com/rapidminer/tutorial/TutorialGroup.java index 30431c981..ce1ee5c2e 100644 --- a/src/main/java/com/rapidminer/tutorial/TutorialGroup.java +++ b/src/main/java/com/rapidminer/tutorial/TutorialGroup.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tutorial/TutorialManager.java b/src/main/java/com/rapidminer/tutorial/TutorialManager.java index 5da31e778..849f9f946 100644 --- a/src/main/java/com/rapidminer/tutorial/TutorialManager.java +++ b/src/main/java/com/rapidminer/tutorial/TutorialManager.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tutorial/TutorialRegistry.java b/src/main/java/com/rapidminer/tutorial/TutorialRegistry.java index 4abafb03b..68ae54cbe 100644 --- a/src/main/java/com/rapidminer/tutorial/TutorialRegistry.java +++ b/src/main/java/com/rapidminer/tutorial/TutorialRegistry.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/com/rapidminer/tutorial/gui/TutorialBrowser.java b/src/main/java/com/rapidminer/tutorial/gui/TutorialBrowser.java index 1d2fc5d3e..24af712a5 100644 --- a/src/main/java/com/rapidminer/tutorial/gui/TutorialBrowser.java +++ b/src/main/java/com/rapidminer/tutorial/gui/TutorialBrowser.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -38,7 +38,6 @@ import java.util.ArrayList; import java.util.List; import java.util.logging.Level; - import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JEditorPane; @@ -52,7 +51,6 @@ import javax.swing.text.Document; import javax.swing.text.html.HTMLEditorKit; import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; @@ -67,6 +65,7 @@ import org.xml.sax.InputSource; import com.rapidminer.Process; +import com.rapidminer.gui.DockableMenu; import com.rapidminer.gui.MainFrame; import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.look.Colors; @@ -77,6 +76,7 @@ import com.rapidminer.gui.tools.ResourceDockKey; import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.gui.tools.components.LinkLocalButton; +import com.rapidminer.io.process.XMLTools; import com.rapidminer.repository.MalformedRepositoryLocationException; import com.rapidminer.studio.internal.NoStartupDialogRegistreredException; import com.rapidminer.studio.internal.StartupDialogProvider.ToolbarButton; @@ -111,6 +111,7 @@ public class TutorialBrowser extends JPanel implements Dockable { { DOCK_KEY.setDockGroup(MainFrame.DOCK_GROUP_ROOT); + DockableMenu.registerHideInDockableMenuPrefix(TUTORIAL_BROWSER_DOCK_KEY); } public static final RelativeDockablePosition POSITION = new RelativeDockablePosition(0, 1, 0.15, 1); @@ -399,8 +400,7 @@ public void run() { } final List steps = new ArrayList<>(); - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + DocumentBuilder dBuilder = XMLTools.createDocumentBuilder(); org.w3c.dom.Document doc = dBuilder.parse(new InputSource(stepFileStream)); doc.getDocumentElement().normalize(); diff --git a/src/main/java/com/rapidminer/tutorial/gui/TutorialSelector.java b/src/main/java/com/rapidminer/tutorial/gui/TutorialSelector.java index 235882e9e..7a379fffe 100644 --- a/src/main/java/com/rapidminer/tutorial/gui/TutorialSelector.java +++ b/src/main/java/com/rapidminer/tutorial/gui/TutorialSelector.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/de/dfki/madm/operator/ClusteringAlgorithms.java b/src/main/java/de/dfki/madm/operator/ClusteringAlgorithms.java index bd258ad8c..d7bbdc48b 100644 --- a/src/main/java/de/dfki/madm/operator/ClusteringAlgorithms.java +++ b/src/main/java/de/dfki/madm/operator/ClusteringAlgorithms.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/de/dfki/madm/operator/KMeanspp.java b/src/main/java/de/dfki/madm/operator/KMeanspp.java index 962d14cea..514eef0fc 100644 --- a/src/main/java/de/dfki/madm/operator/KMeanspp.java +++ b/src/main/java/de/dfki/madm/operator/KMeanspp.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/de/dfki/madm/operator/clustering/XMeansCore.java b/src/main/java/de/dfki/madm/operator/clustering/XMeansCore.java index 6c1591b19..08f77194b 100644 --- a/src/main/java/de/dfki/madm/operator/clustering/XMeansCore.java +++ b/src/main/java/de/dfki/madm/operator/clustering/XMeansCore.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/de/dfki/madm/paren/gui/renderer/models/AutoMLPImprovedNeuralNetModelRenderer.java b/src/main/java/de/dfki/madm/paren/gui/renderer/models/AutoMLPImprovedNeuralNetModelRenderer.java index 6aeae7de1..365090f14 100644 --- a/src/main/java/de/dfki/madm/paren/gui/renderer/models/AutoMLPImprovedNeuralNetModelRenderer.java +++ b/src/main/java/de/dfki/madm/paren/gui/renderer/models/AutoMLPImprovedNeuralNetModelRenderer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetLearner.java b/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetLearner.java index 82acd0055..d07ab4368 100644 --- a/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetLearner.java +++ b/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetLearner.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetModel.java b/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetModel.java index 203022fa2..79bad7a86 100644 --- a/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetModel.java +++ b/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetModel.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetVisualizer.java b/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetVisualizer.java index 80cd1d7b7..9dd4defcc 100644 --- a/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetVisualizer.java +++ b/src/main/java/de/dfki/madm/paren/operator/learner/functions/neuralnet/AutoMLPImprovedNeuralNetVisualizer.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/main/resources/com/rapidminer/resources/OperatorsCore.xml b/src/main/resources/com/rapidminer/resources/OperatorsCore.xml index 6f3efe37f..96add5634 100644 --- a/src/main/resources/com/rapidminer/resources/OperatorsCore.xml +++ b/src/main/resources/com/rapidminer/resources/OperatorsCore.xml @@ -1,2332 +1,2336 @@ - - - - - - process - com.rapidminer.operator.ProcessRootOperator - elements_selection.png - Process - - - - - dummy - com.rapidminer.operator.DummyOperator - - - - 5.0 - hierarchical_classification - com.rapidminer.operator.learner.meta.HierarchicalLearner - - - - 6.0 - read_aml - com.rapidminer.operator.io.ExampleSource - ExampleSource - - - 6.0 - write_aml - com.rapidminer.operator.io.ExampleSetWriter - ExampleSetWriter - - - 6.0 - clustermodel_2_exampleset - com.rapidminer.operator.clustering.ClusterModel2ExampleSet - - - - 6.2 - decision_tree - com.rapidminer.operator.learner.tree.DecisionTreeLearner - - - - 6.2 - random_forest - com.rapidminer.operator.learner.tree.RandomForestLearner - - - - 7.3 - x_prediction - com.rapidminer.operator.meta.XVPrediction - XVPrediction - - - 7.3 - x_validation - com.rapidminer.operator.validation.XValidation - XValidation - - - 7.3 - batch_x_validation - com.rapidminer.operator.validation.BatchXValidation - BatchXValidation - - - 8.0 - optimize_parameters_grid - com.rapidminer.operator.meta.GridSearchParameterOptimizationOperator - - GridParameterOptimization - - - 7.4 - loop - com.rapidminer.operator.meta.IteratingOperatorChain - IteratingOperatorChain - - - 7.4 - loop_files - com.rapidminer.operator.meta.FileIterator - DirectoryIterator - FileIterator - - - 7.4 - loop_attributes - com.rapidminer.operator.meta.FeatureIterator - FeatureIterator - - - 7.4 - loop_values - com.rapidminer.operator.meta.ValueIteration - ValueIterator - - - 8.0 - loop_parameters - com.rapidminer.operator.meta.ParameterIteration - ParameterIteration - - - 7.5 - create_learning_curve - com.rapidminer.operator.meta.LearningCurveOperator - LearningCurve - - - - - retrieve - com.rapidminer.operator.io.RepositorySource - arrow_out_mirrored.png - RepositorySource - - - store - com.rapidminer.operator.io.RepositoryStorer - arrow_into_mirrored.png - RepositoryStorer - - - rename_repository_entry - com.rapidminer.operator.repository.RepositoryEntryRenameOperator - - pencil.png - - - copy_repository_entry - com.rapidminer.operator.repository.RepositoryEntryCopyOperator - - copy.png - - - move_repository_entry - com.rapidminer.operator.repository.RepositoryEntryMoveOperator - - arrow_junction.png - - - delete_repository_entry - com.rapidminer.operator.repository.RepositoryEntryDeleteOperator - - delete.png - - - - inbox_into.png - - read_csv - com.rapidminer.operator.nio.CSVExampleSource - CSVExampleSource - - - read_excel - com.rapidminer.operator.nio.ExcelExampleSource - ExcelExampleSource - - - read_excel_format - com.rapidminer.operator.nio.ExcelFormatExampleSource - - - - read_url - com.rapidminer.operator.io.URLExampleSource - URLExampleSource - 5.0 - - - - inbox_out.png - - write_csv - com.rapidminer.operator.io.CSVExampleSetWriter - CSVExampleSetWriter - - - write_excel - com.rapidminer.operator.io.ExcelExampleSetWriter - ExcelExampleSetWriter - - - write_special - com.rapidminer.operator.io.SpecialFormatExampleSetWriter - - - - - - - - - - - - - - - - - table_selection_column_edit.png - - rename - com.rapidminer.operator.preprocessing.filter.ChangeAttributeName - - ChangeAttributeName - - - rename_by_replacing - com.rapidminer.operator.preprocessing.filter.ChangeAttributeNamesReplace - - ChangeAttributeNamesReplace - - - rename_by_generic_names - com.rapidminer.operator.preprocessing.filter.ChangeAttributeNames2Generic - - ChangeAttributeNames2Generic - - - rename_by_constructions - com.rapidminer.operator.preprocessing.filter.Construction2Names - - Construction2Names - - - rename_by_example_values - com.rapidminer.operator.preprocessing.UseRowAsAttributeNames - - UseRowAsAttributeNames - - - set_role - com.rapidminer.operator.preprocessing.filter.ChangeAttributeRole - - ChangeAttributeType - ChangeAttributeRole - - - exchange_roles - com.rapidminer.operator.preprocessing.filter.ExchangeAttributeRoles - - ExchangeAttributeRoles - - - - objects_transform.png - - numerical_to_binominal - com.rapidminer.operator.preprocessing.filter.NumericToBinominal - - Numeric2Binominal - Numeric2Binary - Numerical2Binominal - - - numerical_to_polynominal - com.rapidminer.operator.preprocessing.filter.NumericToPolynominal - - Numeric2Polynominal - Numerical2Polynominal - - - numerical_to_real - com.rapidminer.operator.preprocessing.filter.Numerical2Real - - Numerical2Real - - - numerical_to_date - com.rapidminer.operator.preprocessing.filter.Numerical2Date - - - - real_to_integer - com.rapidminer.operator.preprocessing.filter.Real2Integer - - Real2Integer - - - nominal_to_binominal - com.rapidminer.operator.preprocessing.filter.NominalToBinominal - - Nominal2Binary - Nominal2Binominal - - - nominal_to_text - com.rapidminer.operator.preprocessing.filter.Nominal2String - - Nominal2String - - - nominal_to_numerical - com.rapidminer.operator.preprocessing.filter.NominalToNumeric - - Nominal2Numeric - Attributes2RealValues - Nominal2Numerical - - - nominal_to_date - com.rapidminer.operator.preprocessing.filter.Nominal2Date - - Nominal2Date - - - text_to_nominal - com.rapidminer.operator.preprocessing.filter.String2Nominal - - String2Nominal - - - date_to_numerical - com.rapidminer.operator.preprocessing.filter.Date2Numerical - - Date2Numerical - - - date_to_nominal - com.rapidminer.operator.preprocessing.filter.Date2Nominal - - Date2Nominal - - - parse_numbers - com.rapidminer.operator.preprocessing.filter.NominalNumbers2Numerical - - NominalNumbers2Numerical - - - format_numbers - com.rapidminer.operator.preprocessing.filter.NumericToFormattedNominal - - Numerical2FormattedNominal - - - guess_types - com.rapidminer.operator.preprocessing.GuessValueTypes - - GuessValueTypes - - - - table_selection_column.png - - select_attributes - com.rapidminer.operator.preprocessing.filter.attributes.AttributeFilter - - AttributeFilter - - - select_by_weights - com.rapidminer.operator.features.selection.AttributeWeightSelection - - AttributeWeightSelection - - - select_by_random - com.rapidminer.operator.features.selection.RandomSelection - - RandomSelection - - - remove_attribute_range - com.rapidminer.operator.preprocessing.filter.FeatureRangeRemoval - - FeatureRangeRemoval - - - remove_useless_attributes - com.rapidminer.operator.features.selection.RemoveUselessFeatures - - RemoveUselessAttributes - - - remove_correlated_attributes - com.rapidminer.operator.features.selection.RemoveCorrelatedFeatures - - RemoveCorrelatedFeatures - - - work_on_subset - com.rapidminer.operator.preprocessing.AttributeSubsetPreprocessing - - AttributeSubsetPreprocessing - - - - table_selection_column_add.png - - generate_attributes - com.rapidminer.operator.features.construction.AttributeConstruction - - FeatureGeneration - AttributeConstruction - - - generate_id - com.rapidminer.operator.preprocessing.IdTagging - IdTagging - - - generate_empty_attribute - com.rapidminer.operator.preprocessing.filter.AttributeAdd - - AttributeAdd - - - generate_copy - com.rapidminer.operator.preprocessing.filter.AttributeCopy - - AttributeCopy - - - generate_concatenation - com.rapidminer.operator.preprocessing.filter.AttributeMerge - - AttributeMerge - - - generate_aggregation - com.rapidminer.operator.features.construction.AttributeAggregationOperator - - AttributeAggregation - - - generate_absolutes - com.rapidminer.operator.preprocessing.filter.AbsoluteValueFilter - - AbsoluteValues - - - generate_products - com.rapidminer.operator.features.construction.ProductGenerationOperator - - ProductAttributeGeneration - - - generate_gaussians - com.rapidminer.operator.features.construction.GaussFeatureConstructionOperator - - GaussAttributeGeneration - - - generate_function_set - com.rapidminer.operator.features.construction.CompleteFeatureGenerationOperator - - CompleteFeatureGeneration - - - generate_tfidf - com.rapidminer.operator.preprocessing.filter.TFIDFFilter - - TFIDFFilter - - - generate_item_set_indicators - com.rapidminer.operator.learner.associations.FrequentItemSetAttributeCreator - - FrequentItemSetAttributeCreator - - - generate_weight_stratification - com.rapidminer.operator.preprocessing.weighting.EqualLabelWeighting - - EqualLabelWeighting - - - generate_weight_lpr - com.rapidminer.operator.preprocessing.weighting.LocalPolynomialExampleWeightingOperator - - LocalPolynomialExampleWeighting - - - - order_attributes - table_selection_column.png - com.rapidminer.operator.preprocessing.filter.attributes.AttributeOrderingOperator - - - - - - funnel.png - - filter_examples - com.rapidminer.operator.preprocessing.filter.ExampleFilter - - ExampleFilter - - - filter_example_range - com.rapidminer.operator.preprocessing.filter.ExampleRangeFilter - - ExampleRangeFilter - - - - funnel.png - - sample - com.rapidminer.operator.preprocessing.sampling.SamplingOperator - - Sampling - - - sample_stratified - com.rapidminer.operator.preprocessing.sampling.StratifiedSamplingOperator - - StratifiedSampling - - - sample_bootstrapping - com.rapidminer.operator.preprocessing.sampling.BootstrappingOperator - - Bootstrapping - - - sample_kennard_stone - com.rapidminer.operator.preprocessing.sampling.KennardStoneSampling - - KennardStoneSampling - - - sample_model_based - com.rapidminer.operator.preprocessing.sampling.ModelBasedSampling - - ModelBasedSampling - - - split_data - com.rapidminer.operator.preprocessing.sampling.PartitionOperator - - Partition - - - - sort_az_descending.png - - sort - com.rapidminer.operator.preprocessing.filter.Sorting - - Sorting - - - sort_by_pareto_rank - com.rapidminer.operator.preprocessing.filter.NonDominatedSorting - - NonDominatedSorting - - - shuffle - com.rapidminer.operator.preprocessing.filter.PermutationOperator - - Permutation - - - - - - calculator.png - - aggregate - com.rapidminer.operator.preprocessing.transformation.aggregation.AggregationOperator - - Aggregation - - - - table_refresh.png - - pivot - com.rapidminer.operator.preprocessing.transformation.Example2AttributePivoting - - Example2AttributePivoting - - - de_pivot - com.rapidminer.operator.preprocessing.transformation.Attribute2ExamplePivoting - - Attribute2ExamplePivoting - - - transpose - com.rapidminer.operator.preprocessing.ExampleSetTranspose - - ExampleSetTranspose - - - - logic_and.png - - append - com.rapidminer.operator.preprocessing.join.ExampleSetMerge - - ExampleSetMerge - - - join - com.rapidminer.operator.preprocessing.join.ExampleSetJoin - - ExampleSetJoin - - - set_minus - com.rapidminer.operator.preprocessing.join.ExampleSetMinus - - ExampleSetMinus - - - intersect - com.rapidminer.operator.preprocessing.join.ExampleSetIntersect - - ExampleSetIntersect - - - union - com.rapidminer.operator.preprocessing.join.ExampleSetUnion - - ExampleSetUnion - - - superset - com.rapidminer.operator.preprocessing.join.ExampleSetSuperset - - ExampleSetSuperset - - - cartesian_product - com.rapidminer.operator.preprocessing.join.ExampleSetCartesian - - ExampleSetCartesian - - - - - table_selection_cell.png - - map - com.rapidminer.operator.preprocessing.filter.AttributeValueMapper - - AttributeValueMapper - Mapping - - - replace - com.rapidminer.operator.preprocessing.filter.AttributeValueReplace - - Replace - - - replace_dictionary - com.rapidminer.operator.preprocessing.filter.ExampleSetToDictionary - - Dictionary - - - split - com.rapidminer.operator.preprocessing.filter.AttributeValueSplit - - Split - - - cut - com.rapidminer.operator.preprocessing.filter.AttributeValueSubstring - - AttributeValueSubstring - Substring - - - trim - com.rapidminer.operator.preprocessing.filter.AttributeValueTrim - - Trim - - - merge - com.rapidminer.operator.preprocessing.filter.MergeNominalValues - - MergeNominalValues - MergeValues - - - add - com.rapidminer.operator.preprocessing.filter.AddNominalValue - - AddNominalValue - AddValue - - - remap_binominals - com.rapidminer.operator.preprocessing.filter.InternalBinominalRemapping - - InternalBinominalRemapping - - - set_data - com.rapidminer.operator.preprocessing.filter.SetData - SetData - - - adjust_date - com.rapidminer.operator.preprocessing.filter.DateAdjust - - DateAdjust - - - - - - table_selection_cell.png - - normalize - com.rapidminer.operator.preprocessing.normalization.Normalization - - Normalization - - - denormalize - com.rapidminer.operator.preprocessing.normalization.DenormalizationOperator - - - - scale_by_weights - com.rapidminer.operator.features.AttributeWeightsApplier - - AttributeWeightsApplier - - - - objects_transform.png - - discretize_by_size - com.rapidminer.operator.preprocessing.discretization.AbsoluteDiscretization - - AbsoluteDiscretization - - - discretize_by_bins - com.rapidminer.operator.preprocessing.discretization.BinDiscretization - - BinDiscretization - - - discretize_by_frequency - com.rapidminer.operator.preprocessing.discretization.FrequencyDiscretization - - FrequencyDiscretization - - - discretize_by_user_specification - com.rapidminer.operator.preprocessing.discretization.UserBasedDiscretization - - UserBasedDiscretization - - - discretize_by_entropy - com.rapidminer.operator.preprocessing.discretization.MinimalEntropyDiscretization - - MinimalEntropyPartitioning - - - - table_selection_cell_new.png - - replace_missing_values - com.rapidminer.operator.preprocessing.filter.MissingValueReplenishment - - MissingValueReplenishment - - - impute_missing_values - com.rapidminer.operator.preprocessing.filter.MissingValueImputation - - MissingValueImputation - - - declare_missing_value - com.rapidminer.operator.preprocessing.filter.DeclareMissingValueOperator - - - - replace_infinite_values - com.rapidminer.operator.preprocessing.filter.InfiniteValueReplenishment - - InfiniteValueReplenishment - - - remove_unused_values - com.rapidminer.operator.preprocessing.RemoveUnusedNominalValuesOperator - - - - fill_data_gaps - com.rapidminer.operator.preprocessing.filter.FillDataGaps - - FillDataGaps - - - - funnel.png - - remove_duplicates - com.rapidminer.operator.preprocessing.filter.RemoveDuplicates - - RemoveDuplicates - - - - table_selection_cell_new.png - - detect_outlier_distances - com.rapidminer.operator.preprocessing.outlier.DKNOutlierOperator - - DistanceBasedOutlierDetection - - - detect_outlier_densities - com.rapidminer.operator.preprocessing.outlier.DBOutlierOperator - - DensityBasedOutlierDetection - - - detect_outlier_lof - com.rapidminer.operator.preprocessing.outlier.LOFOutlierOperator - - LOFOutlierDetection - - - detect_outlier_cof - com.rapidminer.operator.preprocessing.outlier.EcodbOperator - - - - - table_selection_column_tool.png - - principal_component_analysis - com.rapidminer.operator.features.transformation.PCA - PrincipalComponentsGenerator - - - principal_component_analysis_kernel - com.rapidminer.operator.features.transformation.KernelPCA - - KernelPCA - - - independent_component_analysis - com.rapidminer.operator.features.transformation.FastICA - - FastICA - - - generalized_hebbian_algorithm - com.rapidminer.operator.features.transformation.GHA - GHA - - - singular_value_decomposition - com.rapidminer.operator.features.transformation.SVDReduction - - SVDReduction - - - self_organizing_map - com.rapidminer.operator.features.transformation.SOMDimensionalityReduction - - SOMDimensionalityReduction - - - fourier_transformation - com.rapidminer.operator.features.transformation.FourierTransform - - FourierTransform - - - - - lightbulb_off.png - - - - default_model - com.rapidminer.operator.learner.lazy.DefaultLearner - DefaultLearner - - - k_nn - com.rapidminer.operator.learner.lazy.KNNLearner - NearestNeighbors - - - - - naive_bayes - com.rapidminer.operator.learner.bayes.NaiveBayes - NaiveBayes - - - naive_bayes_kernel - com.rapidminer.operator.learner.bayes.KernelNaiveBayes - - KernelNaiveBayes - - - - - decision_tree_multiway - com.rapidminer.operator.learner.tree.MultiwayDecisionTree - - MultiwayDecisionTree - 30 - - - decision_tree_weight_based - com.rapidminer.operator.learner.tree.RelevanceTreeLearner - - RelevanceTree - 20 - - - id3 - com.rapidminer.operator.learner.tree.ID3Learner - ID3 - 50 - - - chaid - com.rapidminer.operator.learner.tree.CHAIDLearner - CHAID - 60 - - - decision_stump - com.rapidminer.operator.learner.tree.DecisionStumpLearner - - DecisionStump - 40 - - - random_tree - com.rapidminer.operator.learner.tree.RandomTreeLearner - - RandomTree - 10 - - - - - rule_induction - com.rapidminer.operator.learner.rules.RuleLearner - RuleLearner - - - single_rule_induction - com.rapidminer.operator.learner.rules.BestRuleInduction - - BestRuleInduction - - - single_rule_induction_single_attribute - com.rapidminer.operator.learner.rules.SingleRuleLearner - - OneR - - - subgroup_discovery - com.rapidminer.operator.learner.subgroups.SubgroupDiscovery - - ExhaustiveSubgroupDiscovery - - - tree_to_rules - com.rapidminer.operator.learner.meta.Tree2RuleConverter - - Tree2RuleConverter - - - - - neural_net - com.rapidminer.operator.learner.functions.neuralnet.ImprovedNeuralNetLearner - - NeuralNetImproved - - - auto_mlp - de.dfki.madm.paren.operator.learner.functions.neuralnet.AutoMLPImprovedNeuralNetLearner - - AutoMLP - - - perceptron - com.rapidminer.operator.learner.functions.Perceptron - - Perceptron - - - - - linear_regression - com.rapidminer.operator.learner.functions.linear.LinearRegression - - LinearRegression - - - polynomial_regression - com.rapidminer.operator.learner.functions.PolynomialRegression - - PolynomialRegression - - - vector_linear_regression - com.rapidminer.operator.learner.functions.VectorLinearRegression - - VectorLinearRegression - - - local_polynomial_regression - com.rapidminer.operator.learner.local.LocalPolynomialRegressionOperator - - LocalPolynomialRegression - - - seemingly_unrelated_regression - com.rapidminer.operator.learner.functions.SeeminglyUnrelatedRegressionOperator - - - - gaussian_process - com.rapidminer.operator.learner.functions.kernel.GPLearner - - GPLearner - - - relevance_vector_machine - com.rapidminer.operator.learner.functions.kernel.RVMLearner - - RVMLearner - - - - - logistic_regression - com.rapidminer.operator.learner.functions.kernel.MyKLRLearner - - MyKLRLearner - - - logistic_regression_evolutionary - com.rapidminer.operator.learner.functions.kernel.KernelLogisticRegression - - KernelLogisticRegression - - - - - support_vector_machine - com.rapidminer.operator.learner.functions.kernel.JMySVMLearner - - JMySVMLearner - - - support_vector_machine_libsvm - com.rapidminer.operator.learner.functions.kernel.LibSVMLearner - - LibSVMLearner - - - support_vector_machine_linear - com.rapidminer.operator.learner.functions.kernel.LinearMySVMLearner - - - - support_vector_machine_evolutionary - com.rapidminer.operator.learner.functions.kernel.evosvm.EvoSVM - - EvoSVM - - - support_vector_machine_pso - com.rapidminer.operator.learner.functions.kernel.evosvm.PSOSVM - - PsoSVM - - - fast_large_margin - com.rapidminer.operator.learner.functions.FastLargeMargin - - FastLargeMargin - - - hyper_hyper - com.rapidminer.operator.learner.functions.kernel.hyperhyper.HyperHyper - - HyperHyper - - - - - linear_discriminant_analysis - com.rapidminer.operator.learner.bayes.LinearDiscriminantAnalysis - - LinearDiscriminantAnalysis - - - quadratic_discriminant_analysis - com.rapidminer.operator.learner.bayes.QuadraticDiscriminantAnalysis - - QuadraticDiscriminantAnalysis - - - regularized_discriminant_analysis - com.rapidminer.operator.learner.bayes.RegularizedDiscriminantAnalysis - - RegularizedDiscriminantAnalysis - - - - - vote - com.rapidminer.operator.learner.meta.Vote - Vote - - - polynomial_by_binomial_classification - com.rapidminer.operator.learner.meta.Binary2MultiClassLearner - - Binary2MultiClassLearner - - - hierarchical_multi_class_classification - com.rapidminer.operator.learner.meta.HierarchicalMultiClassLearner - - - - classification_by_regression - com.rapidminer.operator.learner.meta.ClassificationByRegression - - ClassificationByRegression - - - additive_regression - com.rapidminer.operator.learner.meta.AdditiveRegression - - AdditiveRegression - - - relative_regression - com.rapidminer.operator.learner.meta.RelativeRegression - - RelativeRegression - - - transformed_regression - com.rapidminer.operator.learner.meta.TransformedRegression - - TransformedRegression - - - bayesian_boosting - com.rapidminer.operator.learner.meta.BayesianBoosting - - BayesianBoosting - - - subgroup_discovery_meta - com.rapidminer.operator.learner.meta.SDRulesetInduction - - SubgroupDiscovery - - - adaboost - com.rapidminer.operator.learner.meta.AdaBoost - AdaBoost - - - bagging - com.rapidminer.operator.learner.meta.Bagging - Bagging - - - stacking - com.rapidminer.operator.learner.meta.Stacking - Stacking - - - metacost - com.rapidminer.operator.learner.meta.MetaCost - MetaCost - - - find_threshold_meta - com.rapidminer.operator.learner.meta.CostBasedThresholdLearner - - CostBasedThresholdLearner - - - - update_model - com.rapidminer.operator.ModelUpdater - lightbulb_on.png - ModelUpdater - - - group_models - com.rapidminer.operator.ModelGrouper - link.png - ModelGrouper - - - ungroup_models - com.rapidminer.operator.ModelUngrouper - link_broken.png - ModelUngrouper - - - create_formula - com.rapidminer.operator.visualization.FormulaExtractor - - formula.png - FormulaExtractor - - - - chart_dot.png - - k_means - com.rapidminer.operator.clustering.clusterer.KMeans - KMeans - - - k_means_kernel - com.rapidminer.operator.clustering.clusterer.KernelKMeans - - KernelKMeans - - - fast_k_means - com.rapidminer.operator.clustering.clusterer.FastKMeans - - - - x_means - com.rapidminer.operator.clustering.clusterer.XMeans - - - k_medoids - com.rapidminer.operator.clustering.clusterer.KMedoids - - KMedoids - - - dbscan - com.rapidminer.operator.clustering.clusterer.DBScan - DBScanClustering - - - expectation_maximization_clustering - com.rapidminer.operator.clustering.clusterer.soft.EMClusterer - - EMClustering - - - support_vector_clustering - com.rapidminer.operator.clustering.clusterer.SVClustering - - SupportVectorClustering - - - random_clustering - com.rapidminer.operator.clustering.clusterer.RandomClustering - - RandomFlatClustering - - - agglomerative_clustering - com.rapidminer.operator.clustering.clusterer.AgglomerativeClustering - - AgglomerativeClustering - - - top_down_clustering - com.rapidminer.operator.clustering.clusterer.TopDownClustering - - TopDownClustering - - - flatten_clustering - com.rapidminer.operator.clustering.FlattenClusterModel - - FlattenClusterModel - - - extract_prototypes - com.rapidminer.operator.clustering.ExtractClusterPrototypes - - - - - shopping_cart.png - - fp_growth - com.rapidminer.operator.learner.associations.fpgrowth.FPGrowth - - FPGrowth - - - create_association_rules - com.rapidminer.operator.learner.associations.AssociationRuleGenerator - - AssociationRuleGenerator - - - apply_association_rules - com.rapidminer.operator.associations.AssociationRulesApplier - - - - generalized_sequential_patterns - com.rapidminer.operator.learner.associations.gsp.GSPOperator - - GeneralizedSequentialPattern - - - item_sets_to_data - com.rapidminer.operator.learner.associations.FrequentItemSetsToData - - - - unify_item_sets - com.rapidminer.operator.learner.associations.FrequentItemSetUnificator - - FrequentItemSetUnificator - - - - table_selection_range.png - - correlation_matrix - com.rapidminer.operator.visualization.dependencies.CorrelationMatrixOperator - - CorrelationMatrix - - - covariance_matrix - com.rapidminer.operator.visualization.dependencies.CovarianceMatrixOperator - - CovarianceMatrix - - - anova_matrix - com.rapidminer.operator.visualization.dependencies.ANOVAMatrixOperator - - ANOVAMatrix - - - grouped_anova - com.rapidminer.operator.preprocessing.transformation.GroupedANOVAOperator - - GroupedANOVA - - - transition_matrix - com.rapidminer.operator.visualization.dependencies.TransitionMatrixOperator - - TransitionMatrix - - - transition_graph - com.rapidminer.operator.visualization.dependencies.TransitionGraphOperator - - TransitionGraph - - - mututal_information_matrix - com.rapidminer.operator.visualization.dependencies.MutualInformationMatrixOperator - - MutualInformationMatrix - - - rainflow_matrix - com.rapidminer.operator.visualization.dependencies.RainflowMatrixOperator - - RainflowMatrix - - - - graph_connection_directed.png - - data_to_similarity - com.rapidminer.operator.similarity.ExampleSet2Similarity - - ExampleSet2Similarity - - - data_to_similarity_data - com.rapidminer.operator.similarity.ExampleSet2SimilarityExampleSet - - ExampleSet2SimilarityExampleSet - - - similarity_to_data - com.rapidminer.operator.similarity.Similarity2ExampleSet - - Similarity2ExampleSet - - - cross_distances - com.rapidminer.operator.similarity.CrossDistancesOperator - - - - - sort_descending.png - - weight_by_information_gain - com.rapidminer.operator.features.weighting.InfoGainWeighting - - InfoGainWeighting - - - weight_by_information_gain_ratio - com.rapidminer.operator.features.weighting.InfoGainRatioWeighting - - InfoGainRatioWeighting - - - weight_by_rule - com.rapidminer.operator.features.weighting.OneRErrorWeighting - - SingleRuleWeighting - - - weight_by_value_average - com.rapidminer.operator.features.weighting.CorpusBasedFeatureWeighting - - CorpusBasedWeighting - - - weight_by_deviation - com.rapidminer.operator.features.weighting.StandardDeviationWeighting - - StandardDeviationWeighting - - - weight_by_correlation - com.rapidminer.operator.features.weighting.CorrelationWeighting - - CorrelationBasedWeighting - - - weight_by_chi_squared_statistic - com.rapidminer.operator.features.weighting.ChiSquaredWeighting - - ChiSquaredWeighting - - - weight_by_gini_index - com.rapidminer.operator.features.weighting.GiniWeighting - - GiniIndexWeighting - - - weight_by_forest - com.rapidminer.operator.features.weighting.ForestBasedWeighting - - - - weight_by_uncertainty - com.rapidminer.operator.features.weighting.SymmetricalUncertaintyOperator - - SymmetricalUncertaintyWeighting - - - weight_by_relief - com.rapidminer.operator.features.weighting.ReliefWeighting - - Relief - - - weight_by_svm - com.rapidminer.operator.features.weighting.SVMWeighting - - SVMWeighting - - - weight_by_pca - com.rapidminer.operator.features.weighting.PCAWeighting - - PCAWeighting - - - weight_by_component_model - com.rapidminer.operator.features.weighting.ComponentWeights - - ComponentWeights - - - weight_by_user_specification - com.rapidminer.operator.features.weighting.NameBasedWeighting - - NameBasedWeighting - - - data_to_weights - com.rapidminer.operator.features.weighting.ExampleSet2AttributeWeights - - ExampleSet2AttributeWeights - - - weights_to_data - com.rapidminer.operator.features.weighting.AttributeWeights2ExampleSet - - AttributeWeights2ExampleSet - - - - - form.png - - optimize_parameters_quadratic - com.rapidminer.operator.meta.QuadraticParameterOptimizationOperator - - QuadraticParameterOptimization - - - optimize_parameters_evolutionary - com.rapidminer.operator.meta.EvolutionaryParameterOptimizationOperator - - EvolutionaryParameterOptimization - - - set_parameters - com.rapidminer.operator.meta.ParameterSetter - ParameterSetter - - - clone_parameters - com.rapidminer.operator.meta.ParameterCloner - ParameterCloner - - - - table_selection_column.png - - optimize_selection_forward - com.rapidminer.operator.features.selection.ForwardAttributeSelectionOperator - - AdvancedForwardSelection - - - optimize_selection_backward - com.rapidminer.operator.features.selection.BackwardAttributeEliminationOperator - - AdvancedBackwardElimination - - - optimize_selection - com.rapidminer.operator.features.selection.FeatureSelectionOperator - - FeatureSelection - - - optimize_selection_brute_force - com.rapidminer.operator.features.selection.BruteForceSelection - - BruteForce - - - optimize_selection_weight_guided - com.rapidminer.operator.features.selection.WeightGuidedSelectionOperator - - WeightGuidedFeatureSelection - - - optimize_selection_evolutionary - com.rapidminer.operator.features.selection.GeneticAlgorithm - - GeneticAlgorithm - - - - table_selection_column_add.png - - optimize_by_generation_evolutionary_aggregation - com.rapidminer.operator.features.aggregation.EvolutionaryFeatureAggregation - - EvolutionaryAttributeAggregation - - - optimize_by_generation_gga - com.rapidminer.operator.features.construction.GeneratingGeneticAlgorithm - - GeneratingGeneticAlgorithm - - - optimize_by_generation_aga - com.rapidminer.operator.features.construction.AGA - AGA - - - optimize_by_generation_yagga - com.rapidminer.operator.features.construction.YAGGA - - YAGGA - - - optimize_by_generation_yagga2 - com.rapidminer.operator.features.construction.YAGGA2 - - YAGGA2 - - - - sort_descending.png - - optimize_weights_forward - com.rapidminer.operator.features.weighting.ForwardWeighting - - ForwardWeighting - - - optimize_weights_backward - com.rapidminer.operator.features.weighting.BackwardWeighting - - BackwardWeighting - - - optimize_weights_evolutionary - com.rapidminer.operator.features.weighting.EvolutionaryWeighting - - EvolutionaryWeighting - - - optimize_weights_pso - com.rapidminer.operator.features.weighting.PSOWeighting - - PSOWeighting - - - - - - lightbulb_on.png - - - rescale_confidences - com.rapidminer.operator.postprocessing.PlattScaling - PlattScaling - - - drop_uncertain_predictions - com.rapidminer.operator.postprocessing.SimpleUncertainPredictionsTransformation - - UncertainPredictionsTransformation - - - generate_prediction - com.rapidminer.operator.postprocessing.GeneratePredictionOperator - - - - generate_prediction_ranking - com.rapidminer.operator.postprocessing.GeneratePredictionRankingOperator - - - - find_threshold - com.rapidminer.operator.postprocessing.ThresholdFinder - - ThresholdFinder - - - create_threshold - com.rapidminer.operator.postprocessing.ThresholdCreator - - ThresholdCreator - - - apply_threshold - com.rapidminer.operator.postprocessing.ThresholdApplier - - ThresholdApplier - - - select_recall - com.rapidminer.operator.postprocessing.RecallChooser - - - - - apply_model - com.rapidminer.operator.ModelApplier - lightbulb_on.png - ModelApplier - - - - symbol_percent.png - - - - performance_classification - com.rapidminer.operator.performance.PolynominalClassificationPerformanceEvaluator - - ClassificationPerformance - - - performance_binominal_classification - com.rapidminer.operator.performance.BinominalClassificationPerformanceEvaluator - - BinominalClassificationPerformance - - - performance_regression - com.rapidminer.operator.performance.RegressionPerformanceEvaluator - - RegressionPerformance - - - performance_costs - com.rapidminer.operator.performance.cost.CostEvaluator - - CostEvaluator - - - performance_ranking - com.rapidminer.operator.performance.cost.RankingEvaluator - - - - performance_support_vector_count - com.rapidminer.operator.performance.SupportVectorCounter - - SupportVectorCounter - - - performance_attribute_count - com.rapidminer.operator.performance.AttributeCounter - - AttributeCounter - - - - - cluster_count_performance - com.rapidminer.operator.validation.clustering.ClusterNumberEvaluator - - ClusterNumberEvaluator - - - cluster_distance_performance - com.rapidminer.operator.validation.clustering.CentroidBasedEvaluator - - ClusterCentroidEvaluator - - - cluster_density_performance - com.rapidminer.operator.validation.clustering.ClusterDensityEvaluator - - ClusterDensityEvaluator - - - item_distribution_performance - com.rapidminer.operator.validation.clustering.exampledistribution.ExampleDistributionEvaluator - - ItemDistributionEvaluator - - - map_clustering_on_labels - com.rapidminer.operator.clustering.ClusterToPrediction - - Cluster2Prediction - - - - - t_test - com.rapidminer.operator.validation.significance.TTestSignificanceTestOperator - - T-Test - - - anova - com.rapidminer.operator.validation.significance.AnovaSignificanceTestOperator - - Anova - - - - performance - com.rapidminer.operator.performance.SimplePerformanceEvaluator - - Performance - - - extract_performance - com.rapidminer.operator.performance.Data2Performance - Data2Performance - - - combine_performances - com.rapidminer.operator.performance.WeightedPerformanceCreator - - WeightedPerformanceCreator - - - performance_user_based - com.rapidminer.operator.performance.UserBasedPerformanceEvaluator - - UserBasedPerformance - - - performance_min_max - com.rapidminer.operator.performance.MinMaxWrapper - MinMaxWrapper - - - performance_to_data - com.rapidminer.operator.performance.PerformanceVectorToExampleSet - - - - - - create_lift_chart - com.rapidminer.operator.visualization.LiftParetoChartGenerator - - LiftParetoChart - - - compare_rocs - com.rapidminer.operator.visualization.ROCBasedComparisonOperator - - ROCComparator - - - visualize_model_by_som - com.rapidminer.operator.visualization.SOMModelVisualization - - ModelVisualizer - - - - split_validation - com.rapidminer.operator.validation.SplitValidationOperator - - SimpleValidation - - - bootstrapping_validation - com.rapidminer.operator.validation.BootstrappingValidation - - BootstrappingValidation - - - wrapper_split_validation - com.rapidminer.operator.validation.RandomSplitWrapperValidationChain - - SimpleWrapperValidation - - - wrapper_x_validation - com.rapidminer.operator.validation.WrapperXValidation - - WrapperXValidation - - - - - console.png - - execute_script - com.rapidminer.operator.ScriptingOperator - Script - - - - - arrow_circle.png - - - loop_attribute_subsets - com.rapidminer.operator.meta.FeatureSubsetIteration - FeatureSubsetIteration - - - loop_examples - com.rapidminer.operator.meta.ExampleIterator - ExampleIterator - - - loop_labels - com.rapidminer.operator.meta.MultipleLabelIterator - MultipleLabelIterator - - - loop_clusters - com.rapidminer.operator.meta.ClusterIterator - ClusterIteration - - - loop_batches - com.rapidminer.operator.meta.BatchProcessing - BatchProcessing - - - loop_data_sets - com.rapidminer.operator.meta.ExampleSetIterator - ExampleSetIterator - - - loop_data_fractions - com.rapidminer.operator.meta.PartialExampleSetLearner - - PartialExampleSetLearner - - - loop_and_average - com.rapidminer.operator.validation.IteratingPerformanceAverage - - IteratingPerformanceAverage - - - loop_and_deliver_best - com.rapidminer.operator.meta.RandomOptimizationChain - - RandomOptimizer - - - loop_until - com.rapidminer.operator.meta.RepeatUntilOperatorChain - - RepeatUntilOperatorChain - - - loop_collection - com.rapidminer.operator.collections.CollectionIterationOperator - - CollectionIterator - -1 - - - - loop_repository - com.rapidminer.operator.meta.RepositoryIterator - -1 - - - loop_zipfile_entries - com.rapidminer.operator.meta.ZippedFileIterator - -1 - - - - elements_branch.png - - branch - com.rapidminer.operator.meta.branch.ProcessBranch - ProcessBranch - - - select_subprocess - com.rapidminer.operator.meta.OperatorSelector - OperatorSelector - - - - memory.png - - collect - com.rapidminer.operator.collections.CollectionOperator - - Collector - - - select - com.rapidminer.operator.collections.SelectionOperator - - Selector - - - average - com.rapidminer.operator.meta.AverageBuilder - AverageBuilder - - - flatten_collection - com.rapidminer.operator.collections.UnfoldOperator - Unfold - - - - - handle_exception - com.rapidminer.operator.meta.ExceptionHandling - band_aid.png - ErrorNeglector - ExceptionHandling - - - throw_exception - com.rapidminer.operator.meta.ThrowExceptionOperator - error.png - - - - remember - com.rapidminer.operator.IOStorageOperator - arrow_to.png - IOStorer - - - recall - com.rapidminer.operator.IORetrievalOperator - arrow_from.png - IORetriever - - - publish_to_app - com.rapidminer.operator.IOPublishToAppOperator - arrow_to.png - - - recall_from_app - com.rapidminer.operator.IORecallfromAppOperator - arrow_from.png - - - - keyboard_key_a.png - - set_macro - com.rapidminer.operator.SingleMacroDefinitionOperator - - SingleMacroDefinition - - - set_macros - com.rapidminer.operator.MacroDefinitionOperator - MacroDefinition - - - generate_macro - com.rapidminer.operator.MacroConstructionOperator - MacroConstruction - - - extract_macro - com.rapidminer.operator.DataMacroDefinitionOperator - DataMacroDefinition - - - unset_macro - com.rapidminer.operator.macros.UnsetMacroOperator - - - - floppy_disk.png - - open_file - com.rapidminer.operator.nio.file.LoadFileOperator - arrow_out.png - - - write_file - com.rapidminer.operator.nio.file.WriteFileOperator - arrow_into.png - - - write_message - com.rapidminer.operator.FileEchoOperator - FileEcho - arrow_into.png - - - write_as_text - com.rapidminer.operator.io.ResultWriter - ResultWriter - arrow_into.png - - - rename_file - com.rapidminer.operator.filesystem.RenameFileOperator - - pencil.png - - - copy_file - com.rapidminer.operator.filesystem.CopyFileOperator - copy.png - - - move_file - com.rapidminer.operator.filesystem.MoveFileOperator - arrow_junction.png - - - delete_file - com.rapidminer.operator.filesystem.DeleteFileOperator - - delete.png - - - create_directory - com.rapidminer.operator.filesystem.CreateDirectoryOperator - - folder_new.png - - - create_archive_file - box_open_new.png - com.rapidminer.operator.nio.file.compression.CreateArchiveFileOperator - - - - add_entry_to_archive_file - box_into.png - com.rapidminer.operator.nio.file.compression.AddEntryToArchiveFile - - - - - bookmark.png - - annotate - com.rapidminer.operator.util.annotations.AnnotateOperator - - notebook.png - - - annotations_to_data - com.rapidminer.operator.util.annotations.AnnotationsToData - - notebook_data.png - - - data_to_annotations - com.rapidminer.operator.util.annotations.DataToAnnotations - - notebook_new.png - - - extract_macro_from_annotation - com.rapidminer.operator.util.annotations.ExtractAnnotation - - keyboard_key_a.png - - - - data_scroll.png - - log - com.rapidminer.operator.visualization.ProcessLogOperator - - ProcessLog - - - clear_log - com.rapidminer.operator.visualization.ClearProcessLog - - ClearProcessLog - - - extract_log_value - com.rapidminer.operator.visualization.Data2Log - Data2Log - - - provide_macro_as_log_value - com.rapidminer.operator.visualization.Macro2Log - Macro2Log - - - log_to_weights - com.rapidminer.operator.features.weighting.ProcessLog2AttributeWeights - - ProcessLog2AttributeWeights - - - log_to_data - com.rapidminer.operator.visualization.ProcessLog2ExampleSet - - ProcessLog2ExampleSet - - - print_to_console - com.rapidminer.operator.tools.ConsolePrintOperator - - - - - - data_new.png - - generate_data - com.rapidminer.operator.generator.ExampleSetGenerator - - ExampleSetGenerator - - - generate_data_user_specification - com.rapidminer.operator.generator.UserSpecificationDataGenerator - - - - generate_nominal_data - com.rapidminer.operator.generator.NominalExampleSetGenerator - - NominalExampleSetGenerator - - - generate_multi_label_data - com.rapidminer.operator.generator.MultipleLabelGenerator - - MultipleLabelGenerator - - - generate_massive_data - com.rapidminer.operator.generator.MassiveDataGenerator - - MassiveDataGenerator - - - generate_direct_mailing_data - com.rapidminer.operator.generator.DirectMailingExampleSetGenerator - - DirectMailingExampleSetGenerator - - - generate_churn_data - com.rapidminer.operator.generator.ChurnReductionExampleSetGenerator - - ChurnReductionExampleSetGenerator - - - generate_up_selling_data - com.rapidminer.operator.generator.UpSellingExampleSetGenerator - - UpSellingExampleSetGenerator - - - generate_sales_data - com.rapidminer.operator.generator.SalesExampleSetGenerator - - SalesExampleSetGenerator - - - generate_team_profit_data - com.rapidminer.operator.generator.TeamProfitExampleSetGenerator - - TeamProfitExampleSetGenerator - - - generate_transfer_data - com.rapidminer.operator.generator.TransfersExampleSetGenerator - - TransfersExampleSetGenerator - - - generate_transaction_data - com.rapidminer.operator.generator.TransactionClustersExampleSetGenerator - - - - add_noise - com.rapidminer.operator.preprocessing.NoiseOperator - NoiseGenerator - - - - wrench.png - - send_mail - com.rapidminer.operator.tools.SendMailOperator - mail.png - - - delay - com.rapidminer.operator.tools.DelayOperator - hourglass.png - - - materialize_data - com.rapidminer.operator.preprocessing.MaterializeDataInMemory - - MaterializeDataInMemory - - - free_memory - com.rapidminer.operator.MemoryCleanUp - MemoryCleanUp - - - join_paths - com.rapidminer.operator.IOMerger - wrench.png - IOMerger - - - - multiply - com.rapidminer.operator.IOMultiplier - data_copy.png - IOMultiplier2 - - - subprocess - com.rapidminer.operator.SimpleOperatorChain - elements_tree.png - OperatorChain - - - + + + + + + process + com.rapidminer.operator.ProcessRootOperator + elements_selection.png + Process + + + + + dummy + com.rapidminer.operator.DummyOperator + + + + 5.0 + hierarchical_classification + com.rapidminer.operator.learner.meta.HierarchicalLearner + + + + 6.0 + read_aml + com.rapidminer.operator.io.ExampleSource + ExampleSource + + + 6.0 + write_aml + com.rapidminer.operator.io.ExampleSetWriter + ExampleSetWriter + + + 6.0 + clustermodel_2_exampleset + com.rapidminer.operator.clustering.ClusterModel2ExampleSet + + + + 6.2 + decision_tree + com.rapidminer.operator.learner.tree.DecisionTreeLearner + + + + 6.2 + random_forest + com.rapidminer.operator.learner.tree.RandomForestLearner + + + + 7.3 + x_prediction + com.rapidminer.operator.meta.XVPrediction + XVPrediction + + + 7.3 + x_validation + com.rapidminer.operator.validation.XValidation + XValidation + + + 7.3 + batch_x_validation + com.rapidminer.operator.validation.BatchXValidation + BatchXValidation + + + 8.0 + optimize_parameters_grid + com.rapidminer.operator.meta.GridSearchParameterOptimizationOperator + + GridParameterOptimization + + + 7.4 + loop + com.rapidminer.operator.meta.IteratingOperatorChain + IteratingOperatorChain + + + 7.4 + loop_files + com.rapidminer.operator.meta.FileIterator + DirectoryIterator + FileIterator + + + 7.4 + loop_attributes + com.rapidminer.operator.meta.FeatureIterator + FeatureIterator + + + 7.4 + loop_values + com.rapidminer.operator.meta.ValueIteration + ValueIterator + + + 8.0 + loop_parameters + com.rapidminer.operator.meta.ParameterIteration + ParameterIteration + + + 7.5 + create_learning_curve + com.rapidminer.operator.meta.LearningCurveOperator + LearningCurve + + + 8.1 + join + com.rapidminer.operator.preprocessing.join.ExampleSetJoin + + ExampleSetJoin + + + 8.1 + correlation_matrix + com.rapidminer.operator.visualization.dependencies.CorrelationMatrixOperator + + CorrelationMatrix + + + 8.1 + k_means + com.rapidminer.operator.clustering.clusterer.KMeans + KMeans + + + + + retrieve + com.rapidminer.operator.io.RepositorySource + arrow_out_mirrored.png + RepositorySource + + + store + com.rapidminer.operator.io.RepositoryStorer + arrow_into_mirrored.png + RepositoryStorer + + + rename_repository_entry + com.rapidminer.operator.repository.RepositoryEntryRenameOperator + + pencil.png + + + copy_repository_entry + com.rapidminer.operator.repository.RepositoryEntryCopyOperator + + copy.png + + + move_repository_entry + com.rapidminer.operator.repository.RepositoryEntryMoveOperator + + arrow_junction.png + + + delete_repository_entry + com.rapidminer.operator.repository.RepositoryEntryDeleteOperator + + delete.png + + + + inbox_into.png + + read_csv + com.rapidminer.operator.nio.CSVExampleSource + CSVExampleSource + + + read_excel + com.rapidminer.operator.nio.ExcelExampleSource + ExcelExampleSource + + + read_excel_format + com.rapidminer.operator.nio.ExcelFormatExampleSource + + + + read_url + com.rapidminer.operator.io.URLExampleSource + URLExampleSource + 5.0 + + + + inbox_out.png + + write_csv + com.rapidminer.operator.io.CSVExampleSetWriter + CSVExampleSetWriter + + + write_excel + com.rapidminer.operator.io.ExcelExampleSetWriter + ExcelExampleSetWriter + + + write_special + com.rapidminer.operator.io.SpecialFormatExampleSetWriter + + + + + + + + + + + + + + + + + table_selection_column_edit.png + + rename + com.rapidminer.operator.preprocessing.filter.ChangeAttributeName + + ChangeAttributeName + + + rename_by_replacing + com.rapidminer.operator.preprocessing.filter.ChangeAttributeNamesReplace + + ChangeAttributeNamesReplace + + + rename_by_generic_names + com.rapidminer.operator.preprocessing.filter.ChangeAttributeNames2Generic + + ChangeAttributeNames2Generic + + + rename_by_constructions + com.rapidminer.operator.preprocessing.filter.Construction2Names + + Construction2Names + + + rename_by_example_values + com.rapidminer.operator.preprocessing.UseRowAsAttributeNames + + UseRowAsAttributeNames + + + set_role + com.rapidminer.operator.preprocessing.filter.ChangeAttributeRole + + ChangeAttributeType + ChangeAttributeRole + + + exchange_roles + com.rapidminer.operator.preprocessing.filter.ExchangeAttributeRoles + + ExchangeAttributeRoles + + + + objects_transform.png + + numerical_to_binominal + com.rapidminer.operator.preprocessing.filter.NumericToBinominal + + Numeric2Binominal + Numeric2Binary + Numerical2Binominal + + + numerical_to_polynominal + com.rapidminer.operator.preprocessing.filter.NumericToPolynominal + + Numeric2Polynominal + Numerical2Polynominal + + + numerical_to_real + com.rapidminer.operator.preprocessing.filter.Numerical2Real + + Numerical2Real + + + numerical_to_date + com.rapidminer.operator.preprocessing.filter.Numerical2Date + + + + real_to_integer + com.rapidminer.operator.preprocessing.filter.Real2Integer + + Real2Integer + + + nominal_to_binominal + com.rapidminer.operator.preprocessing.filter.NominalToBinominal + + Nominal2Binary + Nominal2Binominal + + + nominal_to_text + com.rapidminer.operator.preprocessing.filter.Nominal2String + + Nominal2String + + + nominal_to_numerical + com.rapidminer.operator.preprocessing.filter.NominalToNumeric + + Nominal2Numeric + Attributes2RealValues + Nominal2Numerical + + + nominal_to_date + com.rapidminer.operator.preprocessing.filter.Nominal2Date + + Nominal2Date + + + text_to_nominal + com.rapidminer.operator.preprocessing.filter.String2Nominal + + String2Nominal + + + date_to_numerical + com.rapidminer.operator.preprocessing.filter.Date2Numerical + + Date2Numerical + + + date_to_nominal + com.rapidminer.operator.preprocessing.filter.Date2Nominal + + Date2Nominal + + + parse_numbers + com.rapidminer.operator.preprocessing.filter.NominalNumbers2Numerical + + NominalNumbers2Numerical + + + format_numbers + com.rapidminer.operator.preprocessing.filter.NumericToFormattedNominal + + Numerical2FormattedNominal + + + guess_types + com.rapidminer.operator.preprocessing.GuessValueTypes + + GuessValueTypes + + + + table_selection_column.png + + select_attributes + com.rapidminer.operator.preprocessing.filter.attributes.AttributeFilter + + AttributeFilter + + + select_by_weights + com.rapidminer.operator.features.selection.AttributeWeightSelection + + AttributeWeightSelection + + + select_by_random + com.rapidminer.operator.features.selection.RandomSelection + + RandomSelection + + + remove_attribute_range + com.rapidminer.operator.preprocessing.filter.FeatureRangeRemoval + + FeatureRangeRemoval + + + remove_useless_attributes + com.rapidminer.operator.features.selection.RemoveUselessFeatures + + RemoveUselessAttributes + + + remove_correlated_attributes + com.rapidminer.operator.features.selection.RemoveCorrelatedFeatures + + RemoveCorrelatedFeatures + + + work_on_subset + com.rapidminer.operator.preprocessing.AttributeSubsetPreprocessing + + AttributeSubsetPreprocessing + + + + table_selection_column_add.png + + generate_attributes + com.rapidminer.operator.features.construction.AttributeConstruction + + FeatureGeneration + AttributeConstruction + + + generate_id + com.rapidminer.operator.preprocessing.IdTagging + IdTagging + + + generate_empty_attribute + com.rapidminer.operator.preprocessing.filter.AttributeAdd + + AttributeAdd + + + generate_copy + com.rapidminer.operator.preprocessing.filter.AttributeCopy + + AttributeCopy + + + generate_concatenation + com.rapidminer.operator.preprocessing.filter.AttributeMerge + + AttributeMerge + + + generate_aggregation + com.rapidminer.operator.features.construction.AttributeAggregationOperator + + AttributeAggregation + + + generate_absolutes + com.rapidminer.operator.preprocessing.filter.AbsoluteValueFilter + + AbsoluteValues + + + generate_products + com.rapidminer.operator.features.construction.ProductGenerationOperator + + ProductAttributeGeneration + + + generate_gaussians + com.rapidminer.operator.features.construction.GaussFeatureConstructionOperator + + GaussAttributeGeneration + + + generate_function_set + com.rapidminer.operator.features.construction.CompleteFeatureGenerationOperator + + CompleteFeatureGeneration + + + generate_tfidf + com.rapidminer.operator.preprocessing.filter.TFIDFFilter + + TFIDFFilter + + + generate_item_set_indicators + com.rapidminer.operator.learner.associations.FrequentItemSetAttributeCreator + + FrequentItemSetAttributeCreator + + + generate_weight_stratification + com.rapidminer.operator.preprocessing.weighting.EqualLabelWeighting + + EqualLabelWeighting + + + generate_weight_lpr + com.rapidminer.operator.preprocessing.weighting.LocalPolynomialExampleWeightingOperator + + LocalPolynomialExampleWeighting + + + + order_attributes + table_selection_column.png + com.rapidminer.operator.preprocessing.filter.attributes.AttributeOrderingOperator + + + + + + funnel.png + + filter_examples + com.rapidminer.operator.preprocessing.filter.ExampleFilter + + ExampleFilter + + + filter_example_range + com.rapidminer.operator.preprocessing.filter.ExampleRangeFilter + + ExampleRangeFilter + + + + funnel.png + + sample + com.rapidminer.operator.preprocessing.sampling.SamplingOperator + + Sampling + + + sample_stratified + com.rapidminer.operator.preprocessing.sampling.StratifiedSamplingOperator + + StratifiedSampling + + + sample_bootstrapping + com.rapidminer.operator.preprocessing.sampling.BootstrappingOperator + + Bootstrapping + + + sample_kennard_stone + com.rapidminer.operator.preprocessing.sampling.KennardStoneSampling + + KennardStoneSampling + + + sample_model_based + com.rapidminer.operator.preprocessing.sampling.ModelBasedSampling + + ModelBasedSampling + + + split_data + com.rapidminer.operator.preprocessing.sampling.PartitionOperator + + Partition + + + + sort_az_descending.png + + sort + com.rapidminer.operator.preprocessing.filter.Sorting + + Sorting + + + sort_by_pareto_rank + com.rapidminer.operator.preprocessing.filter.NonDominatedSorting + + NonDominatedSorting + + + shuffle + com.rapidminer.operator.preprocessing.filter.PermutationOperator + + Permutation + + + + + + calculator.png + + aggregate + com.rapidminer.operator.preprocessing.transformation.aggregation.AggregationOperator + + Aggregation + + + + table_refresh.png + + pivot + com.rapidminer.operator.preprocessing.transformation.Example2AttributePivoting + + Example2AttributePivoting + + + de_pivot + com.rapidminer.operator.preprocessing.transformation.Attribute2ExamplePivoting + + Attribute2ExamplePivoting + + + transpose + com.rapidminer.operator.preprocessing.ExampleSetTranspose + + ExampleSetTranspose + + + + logic_and.png + + append + com.rapidminer.operator.preprocessing.join.ExampleSetMerge + + ExampleSetMerge + 100 + + + set_minus + com.rapidminer.operator.preprocessing.join.ExampleSetMinus + + ExampleSetMinus + + + intersect + com.rapidminer.operator.preprocessing.join.ExampleSetIntersect + + ExampleSetIntersect + + + union + com.rapidminer.operator.preprocessing.join.ExampleSetUnion + + ExampleSetUnion + + + superset + com.rapidminer.operator.preprocessing.join.ExampleSetSuperset + + ExampleSetSuperset + + + cartesian_product + com.rapidminer.operator.preprocessing.join.ExampleSetCartesian + + ExampleSetCartesian + + + + + table_selection_cell.png + + map + com.rapidminer.operator.preprocessing.filter.AttributeValueMapper + + AttributeValueMapper + Mapping + + + replace + com.rapidminer.operator.preprocessing.filter.AttributeValueReplace + + Replace + + + replace_dictionary + com.rapidminer.operator.preprocessing.filter.ExampleSetToDictionary + + Dictionary + + + split + com.rapidminer.operator.preprocessing.filter.AttributeValueSplit + + Split + + + cut + com.rapidminer.operator.preprocessing.filter.AttributeValueSubstring + + AttributeValueSubstring + Substring + + + trim + com.rapidminer.operator.preprocessing.filter.AttributeValueTrim + + Trim + + + merge + com.rapidminer.operator.preprocessing.filter.MergeNominalValues + + MergeNominalValues + MergeValues + + + add + com.rapidminer.operator.preprocessing.filter.AddNominalValue + + AddNominalValue + AddValue + + + remap_binominals + com.rapidminer.operator.preprocessing.filter.InternalBinominalRemapping + + InternalBinominalRemapping + + + set_data + com.rapidminer.operator.preprocessing.filter.SetData + SetData + + + adjust_date + com.rapidminer.operator.preprocessing.filter.DateAdjust + + DateAdjust + + + + + + table_selection_cell.png + + normalize + com.rapidminer.operator.preprocessing.normalization.Normalization + + Normalization + + + denormalize + com.rapidminer.operator.preprocessing.normalization.DenormalizationOperator + + + + scale_by_weights + com.rapidminer.operator.features.AttributeWeightsApplier + + AttributeWeightsApplier + + + + objects_transform.png + + discretize_by_size + com.rapidminer.operator.preprocessing.discretization.AbsoluteDiscretization + + AbsoluteDiscretization + + + discretize_by_bins + com.rapidminer.operator.preprocessing.discretization.BinDiscretization + + BinDiscretization + + + discretize_by_frequency + com.rapidminer.operator.preprocessing.discretization.FrequencyDiscretization + + FrequencyDiscretization + + + discretize_by_user_specification + com.rapidminer.operator.preprocessing.discretization.UserBasedDiscretization + + UserBasedDiscretization + + + discretize_by_entropy + com.rapidminer.operator.preprocessing.discretization.MinimalEntropyDiscretization + + MinimalEntropyPartitioning + + + + table_selection_cell_new.png + + replace_missing_values + com.rapidminer.operator.preprocessing.filter.MissingValueReplenishment + + MissingValueReplenishment + + + impute_missing_values + com.rapidminer.operator.preprocessing.filter.MissingValueImputation + + MissingValueImputation + + + declare_missing_value + com.rapidminer.operator.preprocessing.filter.DeclareMissingValueOperator + + + + replace_infinite_values + com.rapidminer.operator.preprocessing.filter.InfiniteValueReplenishment + + InfiniteValueReplenishment + + + remove_unused_values + com.rapidminer.operator.preprocessing.RemoveUnusedNominalValuesOperator + + + + fill_data_gaps + com.rapidminer.operator.preprocessing.filter.FillDataGaps + + FillDataGaps + + + + funnel.png + + remove_duplicates + com.rapidminer.operator.preprocessing.filter.RemoveDuplicates + + RemoveDuplicates + + + + table_selection_cell_new.png + + detect_outlier_distances + com.rapidminer.operator.preprocessing.outlier.DKNOutlierOperator + + DistanceBasedOutlierDetection + + + detect_outlier_densities + com.rapidminer.operator.preprocessing.outlier.DBOutlierOperator + + DensityBasedOutlierDetection + + + detect_outlier_lof + com.rapidminer.operator.preprocessing.outlier.LOFOutlierOperator + + LOFOutlierDetection + + + detect_outlier_cof + com.rapidminer.operator.preprocessing.outlier.EcodbOperator + + + + + table_selection_column_tool.png + + principal_component_analysis + com.rapidminer.operator.features.transformation.PCA + PrincipalComponentsGenerator + + + principal_component_analysis_kernel + com.rapidminer.operator.features.transformation.KernelPCA + + KernelPCA + + + independent_component_analysis + com.rapidminer.operator.features.transformation.FastICA + + FastICA + + + generalized_hebbian_algorithm + com.rapidminer.operator.features.transformation.GHA + GHA + + + singular_value_decomposition + com.rapidminer.operator.features.transformation.SVDReduction + + SVDReduction + + + self_organizing_map + com.rapidminer.operator.features.transformation.SOMDimensionalityReduction + + SOMDimensionalityReduction + + + fourier_transformation + com.rapidminer.operator.features.transformation.FourierTransform + + FourierTransform + + + + + lightbulb_off.png + + + + default_model + com.rapidminer.operator.learner.lazy.DefaultLearner + DefaultLearner + + + k_nn + com.rapidminer.operator.learner.lazy.KNNLearner + NearestNeighbors + + + + + naive_bayes + com.rapidminer.operator.learner.bayes.NaiveBayes + NaiveBayes + + + naive_bayes_kernel + com.rapidminer.operator.learner.bayes.KernelNaiveBayes + + KernelNaiveBayes + + + + + decision_tree_multiway + com.rapidminer.operator.learner.tree.MultiwayDecisionTree + + MultiwayDecisionTree + 30 + + + decision_tree_weight_based + com.rapidminer.operator.learner.tree.RelevanceTreeLearner + + RelevanceTree + 20 + + + id3 + com.rapidminer.operator.learner.tree.ID3Learner + ID3 + 50 + + + chaid + com.rapidminer.operator.learner.tree.CHAIDLearner + CHAID + 60 + + + decision_stump + com.rapidminer.operator.learner.tree.DecisionStumpLearner + + DecisionStump + 40 + + + random_tree + com.rapidminer.operator.learner.tree.RandomTreeLearner + + RandomTree + 10 + + + + + rule_induction + com.rapidminer.operator.learner.rules.RuleLearner + RuleLearner + + + single_rule_induction + com.rapidminer.operator.learner.rules.BestRuleInduction + + BestRuleInduction + + + single_rule_induction_single_attribute + com.rapidminer.operator.learner.rules.SingleRuleLearner + + OneR + + + subgroup_discovery + com.rapidminer.operator.learner.subgroups.SubgroupDiscovery + + ExhaustiveSubgroupDiscovery + + + tree_to_rules + com.rapidminer.operator.learner.meta.Tree2RuleConverter + + Tree2RuleConverter + + + + + neural_net + com.rapidminer.operator.learner.functions.neuralnet.ImprovedNeuralNetLearner + + NeuralNetImproved + + + auto_mlp + de.dfki.madm.paren.operator.learner.functions.neuralnet.AutoMLPImprovedNeuralNetLearner + + AutoMLP + + + perceptron + com.rapidminer.operator.learner.functions.Perceptron + + Perceptron + + + + + linear_regression + com.rapidminer.operator.learner.functions.linear.LinearRegression + + LinearRegression + + + polynomial_regression + com.rapidminer.operator.learner.functions.PolynomialRegression + + PolynomialRegression + + + vector_linear_regression + com.rapidminer.operator.learner.functions.VectorLinearRegression + + VectorLinearRegression + + + local_polynomial_regression + com.rapidminer.operator.learner.local.LocalPolynomialRegressionOperator + + LocalPolynomialRegression + + + seemingly_unrelated_regression + com.rapidminer.operator.learner.functions.SeeminglyUnrelatedRegressionOperator + + + + gaussian_process + com.rapidminer.operator.learner.functions.kernel.GPLearner + + GPLearner + + + relevance_vector_machine + com.rapidminer.operator.learner.functions.kernel.RVMLearner + + RVMLearner + + + + + logistic_regression + com.rapidminer.operator.learner.functions.kernel.MyKLRLearner + + MyKLRLearner + + + logistic_regression_evolutionary + com.rapidminer.operator.learner.functions.kernel.KernelLogisticRegression + + KernelLogisticRegression + + + + + support_vector_machine + com.rapidminer.operator.learner.functions.kernel.JMySVMLearner + + JMySVMLearner + + + support_vector_machine_libsvm + com.rapidminer.operator.learner.functions.kernel.LibSVMLearner + + LibSVMLearner + + + support_vector_machine_linear + com.rapidminer.operator.learner.functions.kernel.LinearMySVMLearner + + + + support_vector_machine_evolutionary + com.rapidminer.operator.learner.functions.kernel.evosvm.EvoSVM + + EvoSVM + + + support_vector_machine_pso + com.rapidminer.operator.learner.functions.kernel.evosvm.PSOSVM + + PsoSVM + + + fast_large_margin + com.rapidminer.operator.learner.functions.FastLargeMargin + + FastLargeMargin + + + hyper_hyper + com.rapidminer.operator.learner.functions.kernel.hyperhyper.HyperHyper + + HyperHyper + + + + + linear_discriminant_analysis + com.rapidminer.operator.learner.bayes.LinearDiscriminantAnalysis + + LinearDiscriminantAnalysis + + + quadratic_discriminant_analysis + com.rapidminer.operator.learner.bayes.QuadraticDiscriminantAnalysis + + QuadraticDiscriminantAnalysis + + + regularized_discriminant_analysis + com.rapidminer.operator.learner.bayes.RegularizedDiscriminantAnalysis + + RegularizedDiscriminantAnalysis + + + + + vote + com.rapidminer.operator.learner.meta.Vote + Vote + + + polynomial_by_binomial_classification + com.rapidminer.operator.learner.meta.Binary2MultiClassLearner + + Binary2MultiClassLearner + + + hierarchical_multi_class_classification + com.rapidminer.operator.learner.meta.HierarchicalMultiClassLearner + + + + classification_by_regression + com.rapidminer.operator.learner.meta.ClassificationByRegression + + ClassificationByRegression + + + additive_regression + com.rapidminer.operator.learner.meta.AdditiveRegression + + AdditiveRegression + + + relative_regression + com.rapidminer.operator.learner.meta.RelativeRegression + + RelativeRegression + + + transformed_regression + com.rapidminer.operator.learner.meta.TransformedRegression + + TransformedRegression + + + bayesian_boosting + com.rapidminer.operator.learner.meta.BayesianBoosting + + BayesianBoosting + + + subgroup_discovery_meta + com.rapidminer.operator.learner.meta.SDRulesetInduction + + SubgroupDiscovery + + + adaboost + com.rapidminer.operator.learner.meta.AdaBoost + AdaBoost + + + bagging + com.rapidminer.operator.learner.meta.Bagging + Bagging + + + stacking + com.rapidminer.operator.learner.meta.Stacking + Stacking + + + metacost + com.rapidminer.operator.learner.meta.MetaCost + MetaCost + + + find_threshold_meta + com.rapidminer.operator.learner.meta.CostBasedThresholdLearner + + CostBasedThresholdLearner + + + + update_model + com.rapidminer.operator.ModelUpdater + lightbulb_on.png + ModelUpdater + + + group_models + com.rapidminer.operator.ModelGrouper + link.png + ModelGrouper + + + ungroup_models + com.rapidminer.operator.ModelUngrouper + link_broken.png + ModelUngrouper + + + create_formula + com.rapidminer.operator.visualization.FormulaExtractor + + formula.png + FormulaExtractor + + + + chart_dot.png + + k_means_kernel + com.rapidminer.operator.clustering.clusterer.KernelKMeans + + KernelKMeans + + + fast_k_means + com.rapidminer.operator.clustering.clusterer.FastKMeans + + + + x_means + com.rapidminer.operator.clustering.clusterer.XMeans + + + k_medoids + com.rapidminer.operator.clustering.clusterer.KMedoids + + KMedoids + + + dbscan + com.rapidminer.operator.clustering.clusterer.DBScan + DBScanClustering + + + expectation_maximization_clustering + com.rapidminer.operator.clustering.clusterer.soft.EMClusterer + + EMClustering + + + support_vector_clustering + com.rapidminer.operator.clustering.clusterer.SVClustering + + SupportVectorClustering + + + random_clustering + com.rapidminer.operator.clustering.clusterer.RandomClustering + + RandomFlatClustering + + + agglomerative_clustering + com.rapidminer.operator.clustering.clusterer.AgglomerativeClustering + + AgglomerativeClustering + + + top_down_clustering + com.rapidminer.operator.clustering.clusterer.TopDownClustering + + TopDownClustering + + + flatten_clustering + com.rapidminer.operator.clustering.FlattenClusterModel + + FlattenClusterModel + + + extract_prototypes + com.rapidminer.operator.clustering.ExtractClusterPrototypes + + + + + shopping_cart.png + + fp_growth + com.rapidminer.operator.learner.associations.fpgrowth.FPGrowth + + FPGrowth + + + create_association_rules + com.rapidminer.operator.learner.associations.AssociationRuleGenerator + + AssociationRuleGenerator + + + apply_association_rules + com.rapidminer.operator.associations.AssociationRulesApplier + + + + generalized_sequential_patterns + com.rapidminer.operator.learner.associations.gsp.GSPOperator + + GeneralizedSequentialPattern + + + item_sets_to_data + com.rapidminer.operator.learner.associations.FrequentItemSetsToData + + + + unify_item_sets + com.rapidminer.operator.learner.associations.FrequentItemSetUnificator + + FrequentItemSetUnificator + + + + table_selection_range.png + + covariance_matrix + com.rapidminer.operator.visualization.dependencies.CovarianceMatrixOperator + + CovarianceMatrix + + + anova_matrix + com.rapidminer.operator.visualization.dependencies.ANOVAMatrixOperator + + ANOVAMatrix + + + grouped_anova + com.rapidminer.operator.preprocessing.transformation.GroupedANOVAOperator + + GroupedANOVA + + + transition_matrix + com.rapidminer.operator.visualization.dependencies.TransitionMatrixOperator + + TransitionMatrix + + + transition_graph + com.rapidminer.operator.visualization.dependencies.TransitionGraphOperator + + TransitionGraph + + + mututal_information_matrix + com.rapidminer.operator.visualization.dependencies.MutualInformationMatrixOperator + + MutualInformationMatrix + + + rainflow_matrix + com.rapidminer.operator.visualization.dependencies.RainflowMatrixOperator + + RainflowMatrix + + + + graph_connection_directed.png + + data_to_similarity + com.rapidminer.operator.similarity.ExampleSet2Similarity + + ExampleSet2Similarity + + + data_to_similarity_data + com.rapidminer.operator.similarity.ExampleSet2SimilarityExampleSet + + ExampleSet2SimilarityExampleSet + + + similarity_to_data + com.rapidminer.operator.similarity.Similarity2ExampleSet + + Similarity2ExampleSet + + + cross_distances + com.rapidminer.operator.similarity.CrossDistancesOperator + + + + + sort_descending.png + + weight_by_information_gain + com.rapidminer.operator.features.weighting.InfoGainWeighting + + InfoGainWeighting + + + weight_by_information_gain_ratio + com.rapidminer.operator.features.weighting.InfoGainRatioWeighting + + InfoGainRatioWeighting + + + weight_by_rule + com.rapidminer.operator.features.weighting.OneRErrorWeighting + + SingleRuleWeighting + + + weight_by_value_average + com.rapidminer.operator.features.weighting.CorpusBasedFeatureWeighting + + CorpusBasedWeighting + + + weight_by_deviation + com.rapidminer.operator.features.weighting.StandardDeviationWeighting + + StandardDeviationWeighting + + + weight_by_correlation + com.rapidminer.operator.features.weighting.CorrelationWeighting + + CorrelationBasedWeighting + + + weight_by_chi_squared_statistic + com.rapidminer.operator.features.weighting.ChiSquaredWeighting + + ChiSquaredWeighting + + + weight_by_gini_index + com.rapidminer.operator.features.weighting.GiniWeighting + + GiniIndexWeighting + + + weight_by_forest + com.rapidminer.operator.features.weighting.ForestBasedWeighting + + + + weight_by_uncertainty + com.rapidminer.operator.features.weighting.SymmetricalUncertaintyOperator + + SymmetricalUncertaintyWeighting + + + weight_by_relief + com.rapidminer.operator.features.weighting.ReliefWeighting + + Relief + + + weight_by_svm + com.rapidminer.operator.features.weighting.SVMWeighting + + SVMWeighting + + + weight_by_pca + com.rapidminer.operator.features.weighting.PCAWeighting + + PCAWeighting + + + weight_by_component_model + com.rapidminer.operator.features.weighting.ComponentWeights + + ComponentWeights + + + weight_by_user_specification + com.rapidminer.operator.features.weighting.NameBasedWeighting + + NameBasedWeighting + + + data_to_weights + com.rapidminer.operator.features.weighting.ExampleSet2AttributeWeights + + ExampleSet2AttributeWeights + + + weights_to_data + com.rapidminer.operator.features.weighting.AttributeWeights2ExampleSet + + AttributeWeights2ExampleSet + + + + + form.png + + optimize_parameters_quadratic + com.rapidminer.operator.meta.QuadraticParameterOptimizationOperator + + QuadraticParameterOptimization + + + optimize_parameters_evolutionary + com.rapidminer.operator.meta.EvolutionaryParameterOptimizationOperator + + EvolutionaryParameterOptimization + + + set_parameters + com.rapidminer.operator.meta.ParameterSetter + ParameterSetter + + + clone_parameters + com.rapidminer.operator.meta.ParameterCloner + ParameterCloner + + + + table_selection_column.png + + optimize_selection_forward + com.rapidminer.operator.features.selection.ForwardAttributeSelectionOperator + + AdvancedForwardSelection + + + optimize_selection_backward + com.rapidminer.operator.features.selection.BackwardAttributeEliminationOperator + + AdvancedBackwardElimination + + + optimize_selection + com.rapidminer.operator.features.selection.FeatureSelectionOperator + + FeatureSelection + + + optimize_selection_brute_force + com.rapidminer.operator.features.selection.BruteForceSelection + + BruteForce + + + optimize_selection_weight_guided + com.rapidminer.operator.features.selection.WeightGuidedSelectionOperator + + WeightGuidedFeatureSelection + + + optimize_selection_evolutionary + com.rapidminer.operator.features.selection.GeneticAlgorithm + + GeneticAlgorithm + + + + table_selection_column_add.png + + optimize_by_generation_evolutionary_aggregation + com.rapidminer.operator.features.aggregation.EvolutionaryFeatureAggregation + + EvolutionaryAttributeAggregation + + + optimize_by_generation_gga + com.rapidminer.operator.features.construction.GeneratingGeneticAlgorithm + + GeneratingGeneticAlgorithm + + + optimize_by_generation_aga + com.rapidminer.operator.features.construction.AGA + AGA + + + optimize_by_generation_yagga + com.rapidminer.operator.features.construction.YAGGA + + YAGGA + + + optimize_by_generation_yagga2 + com.rapidminer.operator.features.construction.YAGGA2 + + YAGGA2 + + + + sort_descending.png + + optimize_weights_forward + com.rapidminer.operator.features.weighting.ForwardWeighting + + ForwardWeighting + + + optimize_weights_backward + com.rapidminer.operator.features.weighting.BackwardWeighting + + BackwardWeighting + + + optimize_weights_evolutionary + com.rapidminer.operator.features.weighting.EvolutionaryWeighting + + EvolutionaryWeighting + + + optimize_weights_pso + com.rapidminer.operator.features.weighting.PSOWeighting + + PSOWeighting + + + + + + lightbulb_on.png + + + rescale_confidences + com.rapidminer.operator.postprocessing.PlattScaling + PlattScaling + + + drop_uncertain_predictions + com.rapidminer.operator.postprocessing.SimpleUncertainPredictionsTransformation + + UncertainPredictionsTransformation + + + generate_prediction + com.rapidminer.operator.postprocessing.GeneratePredictionOperator + + + + generate_prediction_ranking + com.rapidminer.operator.postprocessing.GeneratePredictionRankingOperator + + + + find_threshold + com.rapidminer.operator.postprocessing.ThresholdFinder + + ThresholdFinder + + + create_threshold + com.rapidminer.operator.postprocessing.ThresholdCreator + + ThresholdCreator + + + apply_threshold + com.rapidminer.operator.postprocessing.ThresholdApplier + + ThresholdApplier + + + select_recall + com.rapidminer.operator.postprocessing.RecallChooser + + + + + apply_model + com.rapidminer.operator.ModelApplier + lightbulb_on.png + ModelApplier + + + + symbol_percent.png + + + + performance_classification + com.rapidminer.operator.performance.PolynominalClassificationPerformanceEvaluator + + ClassificationPerformance + + + performance_binominal_classification + com.rapidminer.operator.performance.BinominalClassificationPerformanceEvaluator + + BinominalClassificationPerformance + + + performance_regression + com.rapidminer.operator.performance.RegressionPerformanceEvaluator + + RegressionPerformance + + + performance_costs + com.rapidminer.operator.performance.cost.CostEvaluator + + CostEvaluator + + + performance_ranking + com.rapidminer.operator.performance.cost.RankingEvaluator + + + + performance_support_vector_count + com.rapidminer.operator.performance.SupportVectorCounter + + SupportVectorCounter + + + performance_attribute_count + com.rapidminer.operator.performance.AttributeCounter + + AttributeCounter + + + + + cluster_count_performance + com.rapidminer.operator.validation.clustering.ClusterNumberEvaluator + + ClusterNumberEvaluator + + + cluster_distance_performance + com.rapidminer.operator.validation.clustering.CentroidBasedEvaluator + + ClusterCentroidEvaluator + + + cluster_density_performance + com.rapidminer.operator.validation.clustering.ClusterDensityEvaluator + + ClusterDensityEvaluator + + + item_distribution_performance + com.rapidminer.operator.validation.clustering.exampledistribution.ExampleDistributionEvaluator + + ItemDistributionEvaluator + + + map_clustering_on_labels + com.rapidminer.operator.clustering.ClusterToPrediction + + Cluster2Prediction + + + + + t_test + com.rapidminer.operator.validation.significance.TTestSignificanceTestOperator + + T-Test + + + anova + com.rapidminer.operator.validation.significance.AnovaSignificanceTestOperator + + Anova + + + + performance + com.rapidminer.operator.performance.SimplePerformanceEvaluator + + Performance + + + extract_performance + com.rapidminer.operator.performance.Data2Performance + Data2Performance + + + combine_performances + com.rapidminer.operator.performance.WeightedPerformanceCreator + + WeightedPerformanceCreator + + + performance_user_based + com.rapidminer.operator.performance.UserBasedPerformanceEvaluator + + UserBasedPerformance + + + performance_min_max + com.rapidminer.operator.performance.MinMaxWrapper + MinMaxWrapper + + + performance_to_data + com.rapidminer.operator.performance.PerformanceVectorToExampleSet + + + + + + create_lift_chart + com.rapidminer.operator.visualization.LiftParetoChartGenerator + + LiftParetoChart + + + compare_rocs + com.rapidminer.operator.visualization.ROCBasedComparisonOperator + + ROCComparator + + + visualize_model_by_som + com.rapidminer.operator.visualization.SOMModelVisualization + + ModelVisualizer + + + + split_validation + com.rapidminer.operator.validation.SplitValidationOperator + + SimpleValidation + + + bootstrapping_validation + com.rapidminer.operator.validation.BootstrappingValidation + + BootstrappingValidation + + + wrapper_split_validation + com.rapidminer.operator.validation.RandomSplitWrapperValidationChain + + SimpleWrapperValidation + + + wrapper_x_validation + com.rapidminer.operator.validation.WrapperXValidation + + WrapperXValidation + + + + + console.png + + execute_script + com.rapidminer.operator.ScriptingOperator + Script + + + + + arrow_circle.png + + + loop_attribute_subsets + com.rapidminer.operator.meta.FeatureSubsetIteration + FeatureSubsetIteration + + + loop_examples + com.rapidminer.operator.meta.ExampleIterator + ExampleIterator + + + loop_labels + com.rapidminer.operator.meta.MultipleLabelIterator + MultipleLabelIterator + + + loop_clusters + com.rapidminer.operator.meta.ClusterIterator + ClusterIteration + + + loop_batches + com.rapidminer.operator.meta.BatchProcessing + BatchProcessing + + + loop_data_sets + com.rapidminer.operator.meta.ExampleSetIterator + ExampleSetIterator + + + loop_data_fractions + com.rapidminer.operator.meta.PartialExampleSetLearner + + PartialExampleSetLearner + + + loop_and_average + com.rapidminer.operator.validation.IteratingPerformanceAverage + + IteratingPerformanceAverage + + + loop_and_deliver_best + com.rapidminer.operator.meta.RandomOptimizationChain + + RandomOptimizer + + + loop_until + com.rapidminer.operator.meta.RepeatUntilOperatorChain + + RepeatUntilOperatorChain + + + loop_collection + com.rapidminer.operator.collections.CollectionIterationOperator + + CollectionIterator + -1 + + + + loop_repository + com.rapidminer.operator.meta.RepositoryIterator + -1 + + + loop_zipfile_entries + com.rapidminer.operator.meta.ZippedFileIterator + -1 + + + + elements_branch.png + + branch + com.rapidminer.operator.meta.branch.ProcessBranch + ProcessBranch + + + select_subprocess + com.rapidminer.operator.meta.OperatorSelector + OperatorSelector + + + + memory.png + + collect + com.rapidminer.operator.collections.CollectionOperator + + Collector + + + select + com.rapidminer.operator.collections.SelectionOperator + + Selector + + + average + com.rapidminer.operator.meta.AverageBuilder + AverageBuilder + + + flatten_collection + com.rapidminer.operator.collections.UnfoldOperator + Unfold + + + + + handle_exception + com.rapidminer.operator.meta.ExceptionHandling + band_aid.png + ErrorNeglector + ExceptionHandling + + + throw_exception + com.rapidminer.operator.meta.ThrowExceptionOperator + error.png + + + + remember + com.rapidminer.operator.IOStorageOperator + arrow_to.png + IOStorer + + + recall + com.rapidminer.operator.IORetrievalOperator + arrow_from.png + IORetriever + + + publish_to_app + com.rapidminer.operator.IOPublishToAppOperator + arrow_to.png + + + recall_from_app + com.rapidminer.operator.IORecallfromAppOperator + arrow_from.png + + + + keyboard_key_a.png + + set_macro + com.rapidminer.operator.SingleMacroDefinitionOperator + + SingleMacroDefinition + + + set_macros + com.rapidminer.operator.MacroDefinitionOperator + MacroDefinition + + + generate_macro + com.rapidminer.operator.MacroConstructionOperator + MacroConstruction + + + extract_macro + com.rapidminer.operator.DataMacroDefinitionOperator + DataMacroDefinition + + + unset_macro + com.rapidminer.operator.macros.UnsetMacroOperator + + + + floppy_disk.png + + open_file + com.rapidminer.operator.nio.file.LoadFileOperator + arrow_out.png + + + write_file + com.rapidminer.operator.nio.file.WriteFileOperator + arrow_into.png + + + write_message + com.rapidminer.operator.FileEchoOperator + FileEcho + arrow_into.png + + + write_as_text + com.rapidminer.operator.io.ResultWriter + ResultWriter + arrow_into.png + + + rename_file + com.rapidminer.operator.filesystem.RenameFileOperator + + pencil.png + + + copy_file + com.rapidminer.operator.filesystem.CopyFileOperator + copy.png + + + move_file + com.rapidminer.operator.filesystem.MoveFileOperator + arrow_junction.png + + + delete_file + com.rapidminer.operator.filesystem.DeleteFileOperator + + delete.png + + + create_directory + com.rapidminer.operator.filesystem.CreateDirectoryOperator + + folder_new.png + + + create_archive_file + box_open_new.png + com.rapidminer.operator.nio.file.compression.CreateArchiveFileOperator + + + + add_entry_to_archive_file + box_into.png + com.rapidminer.operator.nio.file.compression.AddEntryToArchiveFile + + + + + bookmark.png + + annotate + com.rapidminer.operator.util.annotations.AnnotateOperator + + notebook.png + + + annotations_to_data + com.rapidminer.operator.util.annotations.AnnotationsToData + + notebook_data.png + + + data_to_annotations + com.rapidminer.operator.util.annotations.DataToAnnotations + + notebook_new.png + + + extract_macro_from_annotation + com.rapidminer.operator.util.annotations.ExtractAnnotation + + keyboard_key_a.png + + + + data_scroll.png + + log + com.rapidminer.operator.visualization.ProcessLogOperator + + ProcessLog + + + clear_log + com.rapidminer.operator.visualization.ClearProcessLog + + ClearProcessLog + + + extract_log_value + com.rapidminer.operator.visualization.Data2Log + Data2Log + + + provide_macro_as_log_value + com.rapidminer.operator.visualization.Macro2Log + Macro2Log + + + log_to_weights + com.rapidminer.operator.features.weighting.ProcessLog2AttributeWeights + + ProcessLog2AttributeWeights + + + log_to_data + com.rapidminer.operator.visualization.ProcessLog2ExampleSet + + ProcessLog2ExampleSet + + + print_to_console + com.rapidminer.operator.tools.ConsolePrintOperator + + + + + + data_new.png + + generate_data + com.rapidminer.operator.generator.ExampleSetGenerator + + ExampleSetGenerator + + + generate_data_user_specification + com.rapidminer.operator.generator.UserSpecificationDataGenerator + + + + generate_nominal_data + com.rapidminer.operator.generator.NominalExampleSetGenerator + + NominalExampleSetGenerator + + + generate_multi_label_data + com.rapidminer.operator.generator.MultipleLabelGenerator + + MultipleLabelGenerator + + + generate_massive_data + com.rapidminer.operator.generator.MassiveDataGenerator + + MassiveDataGenerator + + + generate_direct_mailing_data + com.rapidminer.operator.generator.DirectMailingExampleSetGenerator + + DirectMailingExampleSetGenerator + + + generate_churn_data + com.rapidminer.operator.generator.ChurnReductionExampleSetGenerator + + ChurnReductionExampleSetGenerator + + + generate_up_selling_data + com.rapidminer.operator.generator.UpSellingExampleSetGenerator + + UpSellingExampleSetGenerator + + + generate_sales_data + com.rapidminer.operator.generator.SalesExampleSetGenerator + + SalesExampleSetGenerator + + + generate_team_profit_data + com.rapidminer.operator.generator.TeamProfitExampleSetGenerator + + TeamProfitExampleSetGenerator + + + generate_transfer_data + com.rapidminer.operator.generator.TransfersExampleSetGenerator + + TransfersExampleSetGenerator + + + generate_transaction_data + com.rapidminer.operator.generator.TransactionClustersExampleSetGenerator + + + + add_noise + com.rapidminer.operator.preprocessing.NoiseOperator + NoiseGenerator + + + + wrench.png + + send_mail + com.rapidminer.operator.tools.SendMailOperator + mail.png + + + delay + com.rapidminer.operator.tools.DelayOperator + hourglass.png + + + materialize_data + com.rapidminer.operator.preprocessing.MaterializeDataInMemory + + MaterializeDataInMemory + + + free_memory + com.rapidminer.operator.MemoryCleanUp + MemoryCleanUp + + + join_paths + com.rapidminer.operator.IOMerger + wrench.png + IOMerger + + + + multiply + com.rapidminer.operator.IOMultiplier + data_copy.png + IOMultiplier2 + + + subprocess + com.rapidminer.operator.SimpleOperatorChain + elements_tree.png + OperatorChain + + + \ No newline at end of file diff --git a/src/main/resources/com/rapidminer/resources/about_infos.properties b/src/main/resources/com/rapidminer/resources/about_infos.properties index 6be202039..f95a53aeb 100644 --- a/src/main/resources/com/rapidminer/resources/about_infos.properties +++ b/src/main/resources/com/rapidminer/resources/about_infos.properties @@ -1,2 +1,2 @@ -copyright = Copyright (C) 2001 - 2017 RapidMiner GmbH +copyright = Copyright (C) 2001 - 2018 RapidMiner GmbH more = More information at http://www.rapidminer.com \ No newline at end of file diff --git a/src/main/resources/com/rapidminer/resources/i18n/Errors.properties b/src/main/resources/com/rapidminer/resources/i18n/Errors.properties index 47cb14f43..4a9319907 100644 --- a/src/main/resources/com/rapidminer/resources/i18n/Errors.properties +++ b/src/main/resources/com/rapidminer/resources/i18n/Errors.properties @@ -182,6 +182,7 @@ process.error.no_smtp_mail_port_set = No SMTP port set. Sending mails may not be process.error.no_send_mail_command = No command for sendmail set. Sending mails may not be possible without a sendmail command. process.error.attributes_type_mismatch = The attribute ''{0}'' from input port {1} must be of the same type as ''{2}'' from input port {3}. +process.error.parameter.required_missing = The required parameter ''{0}'' is not set. repository.illegal_entry_name = Entry ''{0}'' at location ''{1}'' contains characters which cannot be stored on some filesystems and are therefore illegal. repository.repository_folder_already_exists = Repository folder ''{0}'' already exists. diff --git a/src/main/resources/com/rapidminer/resources/i18n/GUI.properties b/src/main/resources/com/rapidminer/resources/i18n/GUI.properties index 41ae427d0..dc4d39e58 100644 --- a/src/main/resources/com/rapidminer/resources/i18n/GUI.properties +++ b/src/main/resources/com/rapidminer/resources/i18n/GUI.properties @@ -1,3 +1,4 @@ + ############### ## Icons ############### @@ -42,7 +43,7 @@ gui.dockkey.log_viewer.short = View recorded events. gui.dockkey.log_viewer.icon = document_text.png gui.dockkey.log_viewer.tip = Show the console with log messages. -gui.dockkey.process_panel.name = Process +gui.dockkey.process_panel.name = Process gui.dockkey.process_panel.short = Create and design your process here. gui.dockkey.process_panel.icon = elements4.png gui.dockkey.process_panel.tip = Edit the process in graph layout. @@ -53,58 +54,58 @@ gui.dockkey.xml_editor.icon = code.png gui.dockkey.xml_editor.tip = Shows the XML definition of the current process setup. gui.dockkey.property_editor.name = Parameters -gui.dockkey.property_editor.short = Configure the inner workings of operators in your process. +gui.dockkey.property_editor.short = Configure operator behavior in your process. gui.dockkey.property_editor.icon = form_edit.png gui.dockkey.property_editor.tip = Shows the parameters of the currently selected operator. gui.dockkey.result.name = Result History -gui.dockkey.result.short = A history of all process results of the current session. +gui.dockkey.result.short = A history of all process results this session. gui.dockkey.result.icon = presentation_chart.png gui.dockkey.result.tip = Display a list of results of this session's processes. gui.dockkey.new_operator.name = Operators -gui.dockkey.new_operator.short = A list of operators available to add to your process. +gui.dockkey.new_operator.short = All operators available to add to your process. gui.dockkey.new_operator.icon = elements3.png -gui.dockkey.new_operator.tip = Shows a view of all available operators for dragging them into processes. +gui.dockkey.new_operator.tip = Shows a view of all available operators for dragging them into processes. gui.dockkey.operator_help.name = Help -gui.dockkey.operator_help.short = Documentation for the currently selected operator. +gui.dockkey.operator_help.short = Documentation for the selected operator. gui.dockkey.operator_help.icon = question.png -gui.dockkey.operator_help.tip = Displays a help text for the current operator. +gui.dockkey.operator_help.tip = Displays a help text for the current operator. gui.dockkey.operator_documentation_browser.name = Help gui.dockkey.operator_documentation_browser.short = Documentation for the currently selected operator. gui.dockkey.operator_documentation_browser.icon = question.png -gui.dockkey.operator_documentation_browser.tip = Displays a help text for the current operator. +gui.dockkey.operator_documentation_browser.tip = Displays a help text for the current operator. gui.dockkey.macro_viewer.name = Macros gui.dockkey.macro_viewer.short = Live overview of defined macros. gui.dockkey.macro_viewer.icon = keyboard_key_a.png -gui.dockkey.macro_viewer.tip = Displays the current content of the defined macros and allows to edit their values. +gui.dockkey.macro_viewer.tip = Displays the current content of the defined macros and allows to edit their values. -gui.dialog.error.operator_documentation_error.message =

Error

Failed to load operator documentation\:
{0} +gui.dialog.error.operator_documentation_error.message =

Error

Failed to load operator documentation\:
{0} gui.dockkey.system_monitor.name = Resource Monitor -gui.dockkey.system_monitor.short = Displays the hardware resources currently used. +gui.dockkey.system_monitor.short = Displays the RAM currently used. gui.dockkey.system_monitor.icon = window_oscillograph.png -gui.dockkey.system_monitor.tip = Shows information about the current memory usage. +gui.dockkey.system_monitor.tip = Shows information about the current memory usage. gui.dockkey.process_context.name = Context -gui.dockkey.process_context.short = Configure advanced settings for your process. +gui.dockkey.process_context.short = Advanced process settings and macros. gui.dockkey.process_context.icon = environment.png -gui.dockkey.process_context.tip = Edit process context settings. +gui.dockkey.process_context.tip = Edit process context settings. gui.dockkey.templates.name = Accelerator gui.dockkey.templates.icon = gearwheels.png gui.dockkey.templates.tip = Create data mining applications in three simple steps. gui.dockkey.history.name = History -gui.dockkey.history.short = Version control for processes stored on RapidMiner Server. +gui.dockkey.history.short = Version control for processes on RM Server. gui.dockkey.history.icon = history.png gui.dockkey.history.tip = Displays the history of a process which is managed by RapidMiner Server. gui.dockkey.ioobject_cache_viewer.name = App Objects -gui.dockkey.ioobject_cache_viewer.short = Simulate a RapidMiner Server app environment. +gui.dockkey.ioobject_cache_viewer.short = Simulate an RM Server App environment. gui.dockkey.ioobject_cache_viewer.icon = data_scroll.png gui.dockkey.ioobject_cache_viewer.tip = View and manage RapidMiner Server App objects in a simulated app. @@ -134,7 +135,7 @@ gui.toolbar.perspectives.tip = Views # Workspace actions gui.action.workspace_design.label = Design -gui.action.workspace_design.tip = Switch to Design view. +gui.action.workspace_design.tip = Switch to process Design view. gui.action.workspace_design.icon = elements_branch.png gui.action.workspace_design.acc = F8 gui.action.workspace_result.label = Results @@ -157,22 +158,27 @@ gui.action.toolbar_resources.tip = See your available support and help resources gui.action.toolbar_resources.tutorials.label = Tutorials gui.action.toolbar_resources.tutorials.mne = T gui.action.toolbar_resources.tutorials.icon = blackboard.png -gui.action.toolbar_resources.tutorials.tip = Open the Tutorials +gui.action.toolbar_resources.tutorials.tip = Need Help? Open the Tutorials -gui.action.toolbar_resources.documentation.label = Documentation +gui.action.toolbar_resources.documentation.label = Documentation (Web) gui.action.toolbar_resources.documentation.mne = D gui.action.toolbar_resources.documentation.icon = folder2.png -gui.action.toolbar_resources.documentation.tip = Browse the Documentation +gui.action.toolbar_resources.documentation.tip = Need Help? Browse the online Documentation + +gui.action.toolbar_resources.help_videos.label = Training Videos (Web) +gui.action.toolbar_resources.help_videos.mne = V +gui.action.toolbar_resources.help_videos.icon = movie_camera.png +gui.action.toolbar_resources.help_videos.tip = Need Help? Browse the online training videos. -gui.action.toolbar_resources.help_forum.label = Community Forum +gui.action.toolbar_resources.help_forum.label = Community Forum (Web) gui.action.toolbar_resources.help_forum.mne = F gui.action.toolbar_resources.help_forum.icon = question_and_answer.png -gui.action.toolbar_resources.help_forum.tip = Visit the RapidMiner community forum for questions and discussions regarding RapidMiner Studio and data mining in general. +gui.action.toolbar_resources.help_forum.tip = Need Help? Visit the RapidMiner community forum for questions and discussions regarding RapidMiner Studio and data mining in general. -gui.action.toolbar_resources.support.label = Support +gui.action.toolbar_resources.support.label = Support (Web) gui.action.toolbar_resources.support.mne = S gui.action.toolbar_resources.support.icon = user_headset.png -gui.action.toolbar_resources.support.tip = Browse the Support Page +gui.action.toolbar_resources.support.tip = Need Help? Browse the Support Page gui.dialog.error.tutorials_not_available.title = No Tutorials gui.dialog.error.tutorials_not_available.message = The tutorials are not available in this RapidMiner version. @@ -1099,7 +1105,7 @@ gui.action.install_license.tip = Installs a purchased license. gui.action.add_data.label = Add Data gui.action.add_data.icon = add.png -gui.action.add_data.tip = Import data into an existing repository. +gui.action.add_data.tip = Import data into a repository. gui.action.further_repository_actions.label = gui.action.further_repository_actions.icon = bars.png @@ -1261,7 +1267,7 @@ gui.action.validate_automatically.icon = checkbox.png gui.action.run.label = Run Process Locally gui.action.run.icon = media_play.png -gui.action.run.tip = Run or resume the current process +gui.action.run.tip = Start the execution of the current process or resume from breakpoint gui.action.run.mne = R gui.action.run.acc = F11 @@ -1370,10 +1376,10 @@ gui.action.menu.perspectives.label = Views gui.action.menu.perspectives.icon = windows.png gui.action.menu.perspectives.tip = Select the view. -gui.action.new_perspective.label = New View... +gui.action.new_perspective.label = New custom View... gui.action.new_perspective.icon = windows_new.png gui.action.new_perspective.mne = N -gui.action.new_perspective.tip = Create a new view. +gui.action.new_perspective.tip = Create a new custom view based on the current view. gui.action.restore_predefined_perspective_default.label = Restore Default View gui.action.restore_predefined_perspective_default.mne = R @@ -1456,7 +1462,7 @@ gui.action.tour.tip = Starts the interactive RapidMiner Studio tour. gui.action.about.label = About RapidMiner Studio... gui.action.about.mne = A gui.action.about.icon = information.png -gui.action.about.tip = Display information about RapidMiner Studio +gui.action.about.tip = Display information about this RapidMiner Studio version #gui.action.gui_manual.label = RapidMiner GUI Manual... #gui.action.gui_manual.mne = G @@ -2087,7 +2093,7 @@ gui.repository.not_accessible.message = NOT ACCESSIBLE gui.action.add_repository.label = Create repository gui.action.add_repository.mne = A gui.action.add_repository.icon = plus.png -gui.action.add_repository.tip = Create a new local repository or connect to a RapidMiner Server repository. +gui.action.add_repository.tip = Add a new local repository or connect to a RapidMiner Server repository. gui.action.configure_repository.label = Configure Repository gui.action.configure_repository.mne = C @@ -4354,10 +4360,9 @@ gui.dialog.error.rapid_doc_bot_importer_error.title = Failed to show helptext # The Password Manager ######################################## gui.dialog.password_manager.label = Manage Passwords -gui.dialog.password_manager.title = Password Manager to manage your Passwords +gui.dialog.password_manager.title = Password Manager gui.dialog.password_manager.message = In this window you can see your cached user credentials. \ - Passwords are hidden by default. To make them visible, click "Show Passwords". You can delete \ - entries by marking them in the table and pressing "Remove Row" and change your username and \ + You can delete entries by marking them in the table and pressing "Remove Row" and change your username and \ password by changing the data in the table. gui.dialog.password_manager.tip = A password manager for all your saved passwords. gui.dialog.password_manager.icon = key_tool.png @@ -4365,15 +4370,6 @@ gui.dialog.password_manager.icon = key_tool.png gui.action.password_manager.label = Manage Passwords gui.action.password_manager.icon = key_tool.png -gui.action.password_manager_showpasswords.label = Show Passwords -gui.action.password_manager_showpasswords.tip = Click here to make your passwords visible. -gui.action.password_manager_showpasswords.icon = magnifying_glass.png -gui.action.password_manager_remove_row.mne = D - -gui.action.password_manager_hidepasswords.label = Hide passwords -gui.action.password_manager_hidepasswords.tip = Click here to hide your passwords. -gui.action.password_manager_hidepasswords.icon = magnifying_glass.png - gui.action.password_manager_remove_row.label = Delete Row gui.action.password_manager_remove_row.icon = table_selection_row_delete.png gui.action.password_manager_remove_row.tip = Delete the selected row. @@ -4977,6 +4973,9 @@ gui.progress.configurable_action.label = Executing action gui.dialog.configurable_dialog.error.missing_value.label = Value for ''{0}'' missing! +gui.dialog.confirm.configurable_confirm_refresh.title = Refresh Connections +gui.dialog.confirm.configurable_confirm_refresh.icon = data_network_delete.png +gui.dialog.confirm.configurable_confirm_refresh.message = All unsaved changes will be lost. Continue? ## Progress Dialog gui.action.stop_progress.label = Stop @@ -5956,4 +5955,54 @@ gui.label.extension.json.version = rmversion #### CTA #### gui.label.cta.json.local = cta-test-rules.json -gui.label.cta.json.remote = https://redirects.rapidminer.com/app/studio/7/cta \ No newline at end of file +gui.label.cta.json.remote = https://redirects.rapidminer.com/app/studio/7/cta + +#### Global Search ##### +gui.dialog.global_search.title = Global Search +gui.dialog.global_search.icon = magnifying_glass.png +gui.dialog.global_search.no_results.label = No results found! +gui.dialog.global_search.no_categories.label = Something went terribly wrong. No search categories found! Please check the Studio log file for errors. + +gui.action.global_search.label = Search everywhere +gui.action.global_search.tip = Search everything, e.g. Operators, Repositories, etc. +gui.action.global_search.load_more.label = {0} more results. Click to load more. +gui.action.global_search.load_more.tip = There are {0} more results than currently displayed. Click to load more. +gui.action.global_search.search_all_instead.label = Try searching everywhere instead +gui.action.global_search.search_all_instead.tip = You did not find any results for the category you searched in. Click here to try searching in all of Studio instead. +gui.field.global_search.prompt = Find data, operators...etc + +gui.action.global_search.action.perspective.name = Switch to View: {0} +gui.action.global_search.action.dockable.name = Display Panel: {0} +gui.action.global_search.action.dockable.tip = If the panel is not yet part of this view it will be added, otherwise it will be brought to the foreground. + +gui.component.global_search.operators.category.title = Operators +gui.component.global_search.repository.category.title = Repository +gui.component.global_search.action.category.title = Actions +gui.component.global_search.marketplace.category.title = Marketplace + +gui.progress.global_search.remote_repo.search_index.label = Creating fast search index for {0} +gui.progress.global_search.remote_repo.search_index_full.label = Creating full search index for {0} +gui.progress.global_search.repo.search_index_fast.label = Creating fast search index for {0} +gui.progress.global_search.repo.search_index_full.label = Creating full search index for {0} + +gui.progress.global_search.manager.init_index.operator.label = Indexing operators +gui.progress.global_search.manager.init_index.repository.label = Indexing repositories +gui.progress.global_search.manager.init_index.action.label = Indexing actions +gui.progress.global_search.manager.init_index.marketplace.label = Indexing Marketplace content + +gui.action.global_search.toolbar.label = Filter +gui.action.global_search.toolbar.tip = Select the category you want to search in. + +gui.label.global_search.filter_all.label = All Studio +gui.label.global_search.run_search.label = Search +gui.label.global_search.run_search.tip = Search for anything (operators, data, connections, ...) +gui.label.global_search.category_pending.label = Searching... + +gui.label.global_search.marketplace.vendor.label = Vendor +gui.label.global_search.marketplace.vendor_supported.label = SUPPORTED +gui.label.global_search.marketplace.vendor_supported.tip = Click to learn about our Customer Support & Maintenance Policy for extensions. +gui.label.global_search.marketplace.vendor_supported.url = http://redirects.rapidminer.com/marketplace/support-policy +gui.progress.global_search.marketplace.update_index.label = Re-indexing Marketplace content + +gui.dialog.error.global_search.cannot_open.title = Cannot open entry +gui.dialog.error.global_search.cannot_open.message = Failed to open the entry: {0} diff --git a/src/main/resources/com/rapidminer/resources/i18n/LogMessages.properties b/src/main/resources/com/rapidminer/resources/i18n/LogMessages.properties index 7dd91e72b..3066db27c 100644 --- a/src/main/resources/com/rapidminer/resources/i18n/LogMessages.properties +++ b/src/main/resources/com/rapidminer/resources/i18n/LogMessages.properties @@ -324,10 +324,11 @@ com.rapidminer.tools.ParentResolvingMap.group_properties_resource_not_found=Grou com.rapidminer.gui.OperatorDocEditor.inserting_link_error=Error inserting link: {0} com.rapidminer.gui.security.Wallet.reading_secrets_file=Reading secrets file. com.rapidminer.gui.security.Wallet.reading_secrets_file_error=Failed to read secrets file: {0} -com.rapidminer.gui.security.Wallet.reading_entry_in_secrets_file_error=Failed to read entry in secrets file: {0} +com.rapidminer.gui.security.Wallet.reading_entry_in_secrets_file_error=Failed to read entry {0} in secrets file: {1} com.rapidminer.gui.security.Wallet.saving_secrets_file=Saving secrets file. com.rapidminer.gui.security.Wallet.creating_xml_document_error=Failed to create XML document: {0} com.rapidminer.gui.security.Wallet.saving_secrets_file_error=Failed to save secrets file: {0} +com.rapidminer.gui.security.Wallet.store_entry_failed=Error storing entry for key {0}: {1} com.rapidminer.operator.nio.model.WizardState.reading_example_set=Reading example set... com.rapidminer.repository.RepositoryManager.adding_home_repository=Adding home repository {0}. com.rapidminer.repository.RepositoryManager.illegal_repository_url=Illegal repository URL {0}: {1} @@ -695,9 +696,9 @@ com.rapidminer.operator.preprocessing.filter.NominalToNumericModel.unexpected_va com.rapidminer.tools.ProxyService.migrate=Migrating existing proxy settings -com.rapidminer.gui.local.search.ExtensionService.extensions_load_failed=Failed to load extension cache. Reason: {0} -com.rapidminer.gui.local.search.ExtensionService.extensions_load_failed.empty_result=Failed to load extension cache. Reason: Empty response with status code {0} -com.rapidminer.gui.local.search.ExtensionService.extensions_load_failed.server_error=Failed to load extension cache. Reason: HTTP status code {0} +com.rapidminer.search.ExtensionService.extensions_load_failed=Failed to load extension cache. Reason: {0} +com.rapidminer.search.ExtensionService.extensions_load_failed.empty_result=Failed to load extension cache. Reason: Empty response with status code {0} +com.rapidminer.search.ExtensionService.extensions_load_failed.server_error=Failed to load extension cache. Reason: HTTP status code {0} com.rapidminer.operator.GroupedModel.couldnt_create_operator=An error occurred while trying to calculate the progress of the application of GroupedModel. com.rapidminer.operator.learner.meta.StackingModel.couldnt_create_operator=An error occurred while trying to calculate the progress of the application of StackingModel. @@ -737,6 +738,59 @@ com.rapidminer.tools.usagestats.RuleService.load.empty = No CTA rules found via com.rapidminer.gui.tools.BrowserPopup.dispose.failed = Disposal of cta message failed, recovering... com.rapidminer.gui.tools.BrowserPopup.result.interupted = Interrupted while waiting for the user reaction. +com.rapidminer.global_search.searchindexer.setup_failed = Failed to set up Global Search. Search disabled! +com.rapidminer.global_search.searchindexer.setup_self_fix_start = Cannot prepare Global Search index directory. Trying to fix the problem. +com.rapidminer.global_search.searchindexer.setup_self_fix_success = Successfully fixed Global Search index directory. Search enabled! +com.rapidminer.global_search.searchindexer.setup_self_fix_failed = Failed to fix index folder for Global Search. +com.rapidminer.global_search.searchindexer.add_failed = Failed to add search documents for category {0}: {1}! +com.rapidminer.global_search.searchindexer.update_failed = Failed to update search documents for category {0}: {1}! +com.rapidminer.global_search.searchindexer.remove_failed = Failed to remove search documents for category {0}: {1}! +com.rapidminer.global_search.searchindexer.discarded_document_missing_field = Discarded document for search category {0} from indexing due to missing {1} field! + +com.rapidminer.global_search.searchhandler.search_failed = Cannot search, failed to access Global Search index! + +com.rapidminer.gui.search.globalsearchdialog.no_gui_component = No GUI component provided for Global Search category {0}, cannot display results! +com.rapidminer.gui.search.globalsearchdialog.gui_component_too_high = GUI component provided for Global Search category {0} exceeds height limit, cannot display results! +com.rapidminer.gui.search.globalsearchdialog.gui_component_opaque = GUI component provided for Global Search category {0} is opaque, cannot display results! +com.rapidminer.gui.search.globalsearchdialog.missing_drag_support = The GUI component provided for Global Search category {0} claims to support drag&drop, but did not provide the drag support object! +com.rapidminer.gui.search.globalsearchdialog.no_gui_provider = No SearchableGUIProvider registered for Global Search category {0}, cannot display results! + +com.rapidminer.search.GlobalSearchRegistry.category_added = Global Search category {0} registered. +com.rapidminer.search.GlobalSearchRegistry.category_removed = Global Search category {0} unregistered. + +com.rapidminer.gui.search.GlobalSearchGUIRegistry.provider_added = Global Search GUI provider added for category {0}. +com.rapidminer.gui.search.GlobalSearchGUIRegistry.provider_removed = Global Search GUI provider removed for category {0}. + +com.rapidminer.repository.global_search.RepositorySearchManager.error.no_key = Cannot open repository entry, key was null! +com.rapidminer.repository.global_search.RepositorySearchManager.error.open_location = Cannot open repository entry! +com.rapidminer.repository.global_search.RepositorySearchManager.error.browse_location = Cannot browse repository entry: {0}! +com.rapidminer.repository.global_search.RepositorySearchManager.error.lazy_loading = Failed to asynchronously load Global Search repository result! +com.rapidminer.repository.global_search.RepositorySearchManager.error.initial_index_error_folder = Failed to fast index repository folder {0} for Global Search! +com.rapidminer.repository.global_search.RepositorySearchManager.error.initial_index_full_error_folder = Failed to fully index repository folder {0} for Global Search! +com.rapidminer.repository.global_search.RepositorySearchManager.error.delete_index_error_folder = Failed to remove repository folder from Global Search! +com.rapidminer.repository.global_search.RepositorySearchManager.error.initial_index_error_remote_folder = Failed to index remote repository folder {0} for Global Search: {1}! +com.rapidminer.repository.global_search.RepositorySearchManager.error.initial_index_error_md_reading = Failed to read meta data of repository entry for Global Search! + +com.rapidminer.gui.processeditor.global_search.OperatorSearchManager.error.no_key = Cannot insert operator, key was null! +com.rapidminer.gui.processeditor.global_search.OperatorSearchManager.error.operator_browse_error = Cannot preview operator, creation failed: {0}! +com.rapidminer.gui.processeditor.global_search.OperatorSearchManager.error.operator_creation_error = Cannot insert operator, creation failed: {0}! + +com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.index_action.name_null = Failed to index action {0}, name was null! +com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.index_action.serialization_failed = Failed to index action {0}, storing action failed! +com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.deserialize_action = Cannot restore action! +com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.delete_views_error = Failed to remove view actions from Global Search! +com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.find_action_error = Cannot figure out if action is registered to Global Search! +com.rapidminer.gui.actions.search.ActionsGlobalSearchManager.error.delete_dockables_error = Failed to remove panel actions from Global Search! + +com.rapidminer.gui.globalsearch.MarketplaceGlobalSearchGUIProvider.error.lazy_loading = Failed to load extension icon. Using fallback. +com.rapidminer.gui.globalsearch.MarketplaceGlobalSearchGUIProvider.error.lazy_loading_code = Failed to load {0} extension icon. Status code was {1}. Using fallback. + +com.rapidminer.repository.global_search.MarketplaceGlobalSearchManager.error.delete_all_documents = Failed to remove outdated marketplace content from Global Search! + +com.rapidminer.search.AbstractGlobalSearchManager.error.init = Failed to initialize Global Search category. Category not available! + +com.rapidminer.gui.tools.ResourceAction.error.update_global_search = Failed to update action for Global Search! + com.rapidminer.deployment.update.client.listmodels.UpdatePackageListModel.malformed_version=Bad VersionNumber when updating package list for {0} [{1}]: {2} com.rapidminer.deployment.update.client.UpdateDialog.malformed_version=Bad VersionNumber in UpdateDialog for {0} [{1}]: {2} com.rapidminer.deployment.update.client.UpdateListCellRenderer.malformed_version=Bad VersionNumber updating list cell for {0} [{1}]: {2} diff --git a/src/main/resources/com/rapidminer/resources/i18n/OperatorsCoreDocumentation.xml b/src/main/resources/com/rapidminer/resources/i18n/OperatorsCoreDocumentation.xml index 1d289e601..35e824383 100644 --- a/src/main/resources/com/rapidminer/resources/i18n/OperatorsCoreDocumentation.xml +++ b/src/main/resources/com/rapidminer/resources/i18n/OperatorsCoreDocumentation.xml @@ -2168,7 +2168,7 @@ Performance
- k-Means + k-Means (Deprecated) Clustering with k-means This operator represents an implementation of k-means. This operator will create a cluster attribute if not present yet. @@ -2759,7 +2759,7 @@ featurevaluetypefilter - Join + Join (Deprecated) Build the join of two example sets using the id attributes of the sets in order to identify the same examples. <p> Build the join of two example sets using the id @@ -5846,7 +5846,7 @@ examplevisualizer - Correlation Matrix + Correlation Matrix (Deprecated) Determines the correlation between all attributes and can produce a weight vector based on correlations. <p>This operator calculates the correlation matrix between diff --git a/src/main/resources/com/rapidminer/resources/i18n/Settings.properties b/src/main/resources/com/rapidminer/resources/i18n/Settings.properties index ba641993e..7a12e22b5 100644 --- a/src/main/resources/com/rapidminer/resources/i18n/Settings.properties +++ b/src/main/resources/com/rapidminer/resources/i18n/Settings.properties @@ -34,6 +34,10 @@ proxy.title = Proxy proxy.description = #Proxy Settings +search.title = Search +search.description = +#Search Settings + ############### ## Sub-Groups ############### @@ -56,6 +60,8 @@ rapidminer.preferences.subgroup.gui.beep.title = Feedback sounds rapidminer.preferences.subgroup.gui.limits.title = Limits rapidminer.preferences.subgroup.gui.modelling.title = Process editor +rapidminer.preferences.subgroup.search.repository.title = Repository Search Settings + ############################## ## Properties General ############################## @@ -367,3 +373,10 @@ rapidminer.update.purchased.not_installed.check.description = Check for recently rapidminer.update.beta_features.title = Enable beta mode (experimental features) rapidminer.update.beta_features.description = This activates a preview of experimental features that are not safe for production use. Use this at your own risk. + +############################## +## Properties Search +############################## + +rapidminer.search.repository.enable_full_indexing.title = Enable detailed repository search indexing +rapidminer.search.repository.enable_full_indexing.description = This activates a detailed scan of each repository on start-up to add more search capabilities, e.g. finding data and models by their contained attribute names. This can take a lot of time for very large repositories. Requires a restart to take effect. \ No newline at end of file diff --git a/src/main/resources/com/rapidminer/resources/i18n/UserErrorMessages.properties b/src/main/resources/com/rapidminer/resources/i18n/UserErrorMessages.properties index d73abe8dc..404447bee 100644 --- a/src/main/resources/com/rapidminer/resources/i18n/UserErrorMessages.properties +++ b/src/main/resources/com/rapidminer/resources/i18n/UserErrorMessages.properties @@ -1090,8 +1090,8 @@ error.xlsx_file_missing_entry.short= The selected XLSX file seems to be malforme error.xlsx_file_missing_entry.long = Try to repair it by opening it in Excel and saving it again. error.xlsx_content_malformed.name = XLSX file content is malformed -error.xlsx_content_malformed.name = The selected XLSX file seems to be malformed as it's content is in an invalid state. -error.xlsx_content_malformed.name = Try to repair it by opening it in Excel and saving it again. +error.xlsx_content_malformed.short = The selected XLSX file seems to be malformed as it's content is in an invalid state. +error.xlsx_content_malformed.long = Try to repair it by opening it in Excel and saving it again. error.expression_evaluation_failed.name = Expression evaluation error error.expression_evaluation_failed.short = Error evaluating expression: {0} @@ -1140,3 +1140,7 @@ error.seemingly_unrelated_regression.too_few_inputs.long = This operator needs error.seemingly_unrelated_regression.singular_matrix_found.name = Similar inputs error.seemingly_unrelated_regression.singular_matrix_found.short = Similar inputs are connected to unrelated ports. error.seemingly_unrelated_regression.singular_matrix_found.long = This operator cannot work when similar inputs are connected to unrelated ports. Did you connect the same ExampleSet to 2 ports? + +error.regularized_discriminant_analysis.singular_covariance_matrix.name = Covariance matrix not invertible +error.regularized_discriminant_analysis.singular_covariance_matrix.short = The covariance matrix could not inverted. +error.regularized_discriminant_analysis.singular_covariance_matrix.long = Check the "approximate_covariance_inverse" parameter and/or make sure that the data provided is sufficient. diff --git a/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/15_ExampleSetJoin.rmp b/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/15_ExampleSetJoin.rmp index 84e4858c2..126115a9d 100644 --- a/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/15_ExampleSetJoin.rmp +++ b/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/15_ExampleSetJoin.rmp @@ -58,7 +58,7 @@ - + diff --git a/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/21_CreateAndNameOutlierCluster.rmp b/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/21_CreateAndNameOutlierCluster.rmp index 06a884c44..baf7b9636 100644 --- a/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/21_CreateAndNameOutlierCluster.rmp +++ b/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/21_CreateAndNameOutlierCluster.rmp @@ -171,7 +171,7 @@ - + diff --git a/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/22_CreateAndNameOutlierCluster.rmp b/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/22_CreateAndNameOutlierCluster.rmp index b10aab468..d91900243 100644 --- a/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/22_CreateAndNameOutlierCluster.rmp +++ b/src/main/resources/com/rapidminer/resources/samples/processes/02_Preprocessing/22_CreateAndNameOutlierCluster.rmp @@ -171,7 +171,7 @@ - + diff --git a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/01_KMeans.rmp b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/01_KMeans.rmp index f98ac30b4..42ac84b51 100644 --- a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/01_KMeans.rmp +++ b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/01_KMeans.rmp @@ -15,7 +15,7 @@ - + diff --git a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/02_RestartsKMeans.rmp b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/02_RestartsKMeans.rmp index ec535c0e8..8ded835cc 100644 --- a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/02_RestartsKMeans.rmp +++ b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/02_RestartsKMeans.rmp @@ -29,7 +29,7 @@ - + diff --git a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/06_ClusterClassificationWithEvaluation.rmp b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/06_ClusterClassificationWithEvaluation.rmp index 10a98e77c..5891770ca 100644 --- a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/06_ClusterClassificationWithEvaluation.rmp +++ b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/06_ClusterClassificationWithEvaluation.rmp @@ -15,7 +15,7 @@ - + diff --git a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/07_ClusterClassification.rmp b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/07_ClusterClassification.rmp index cfbea1066..5b4890f8c 100644 --- a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/07_ClusterClassification.rmp +++ b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/07_ClusterClassification.rmp @@ -15,7 +15,7 @@ - + diff --git a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/08_KMeansWithEvaluation.rmp b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/08_KMeansWithEvaluation.rmp index fd7c7a6dc..bb36ca593 100644 --- a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/08_KMeansWithEvaluation.rmp +++ b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/08_KMeansWithEvaluation.rmp @@ -15,7 +15,7 @@ - + diff --git a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/09_KMeansWithPlot.rmp b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/09_KMeansWithPlot.rmp index 633980852..2639a0cf6 100644 --- a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/09_KMeansWithPlot.rmp +++ b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/09_KMeansWithPlot.rmp @@ -22,7 +22,7 @@ - + diff --git a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/11_TopDownClustering.rmp b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/11_TopDownClustering.rmp index 11fb90e40..054c90192 100644 --- a/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/11_TopDownClustering.rmp +++ b/src/main/resources/com/rapidminer/resources/samples/processes/07_Clustering/11_TopDownClustering.rmp @@ -20,7 +20,7 @@ - + diff --git a/src/main/resources/com/rapidminer/resources/settings.xml b/src/main/resources/com/rapidminer/resources/settings.xml index 2b2f01da9..5f83b2119 100644 --- a/src/main/resources/com/rapidminer/resources/settings.xml +++ b/src/main/resources/com/rapidminer/resources/settings.xml @@ -140,4 +140,9 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/com/rapidminer/resources/splash_infos.properties b/src/main/resources/com/rapidminer/resources/splash_infos.properties index 6be202039..f95a53aeb 100644 --- a/src/main/resources/com/rapidminer/resources/splash_infos.properties +++ b/src/main/resources/com/rapidminer/resources/splash_infos.properties @@ -1,2 +1,2 @@ -copyright = Copyright (C) 2001 - 2017 RapidMiner GmbH +copyright = Copyright (C) 2001 - 2018 RapidMiner GmbH more = More information at http://www.rapidminer.com \ No newline at end of file diff --git a/src/main/resources/com/rapidminer/resources/template/credit_risk_modeling.template b/src/main/resources/com/rapidminer/resources/template/credit_risk_modeling.template index cdd82d192a2bf348d04d5200d47bf86b9b66ea62..2e2dfd87d52bdc6b013b85666e19aa49595287b5 100644 GIT binary patch literal 70520 zcmV(zK<2+tO9KQH0000809cD|OJUlX$!7Eb03!kc02%-Q07GweZggdGaA9(Ec_310 zb88?(VRT_GX>V_ow+B=dU9{)hzR`=?vuKzi^_Bplp?|lYi{$Om&jgPnmbxpzA&-SGsm8iTbo!InH%WX>6zOaV9#;?^ETWEme_9` z><3T7!1_NgUXi!7Fk(?QuzJCA539F$j@7bQ8nUQaTABUxQ$p{hiOqiu`_F-IW$=HT z;-BN}|4+j5*x;3|iIu?%1B?F(^#3MjmNa-~gVkCav)nVcv}cj9v@@{MGcsU#tY>3l z`7Z{bl{e9QW@2t)(52LE~t23ZRm11ke-oBw{6ssBmWBP&Zo6B`x@amA109w*GI+&OA1-v9+>bv9w^3wXnm6YoPz%*pF2IOZ~4m1JgYd2ka#Ok;i{B z`yUzpx2ZX=WNc|=^Z#8MB|UQk>wi50qm;u-0}E?|f0U06>p|8?R2b~8>A2Jv}O8Z>FSB1Jzyl zw^v@+iozV@Y*yMLEz}M@+e|PFg{d1?DU?r3!N7^5!qAKp!gr9zXFSUXlTlonoRW#q zU3I0uO1%K7&S{gzN*N&6q}3H+{4oq{$q*fUbcsZY7mJ1C7WxqGEs@0tHdCl^4$%Jn zn?5JPb6B=0g0h2yV? zCG!VhN^oVNl9B{U*M&MN)9)g@uW3bk{Fl(#i>~#aS2v;iW|*mLa|is^{lr(uK97WF zl&cSBXVIHLT7s7KVGI(k<0;WDkw?sjj++&pHn6bER@XmE2%}8MdE#puY#hi-T`-h{ z?8XCk@y0epaG@I2d%D2dO1YfApe?jr6Sxy(Y6Nvz;yo3jEHG1mZ=_7D2-)TuSKOpR zprrUDyjOh^{-)^v8Ss-pbaiGQ#1A}SQIt&M17Q)257#hfCr2Q4>fm6${xIZBPhJvk z`wW8^u0CTZ+2caI69S|kL~>!f{}T}w8#pSCvq>JuzCU8JUef?4k;pG za37jZRYjD}21)623kbjI4wqWjK8(!FCWn+eAl?85t7q0UNG0IX8J>X>3}P=9ODisH zM|6o>gCiW1kl{dXIiH^j#e#BUv3K4<;-r?Y?z#cQml}=lkk%o(McHp*cb1@=k^Joj z4g*wh?OSJ(--H5f*Xld*`_S_+Y{$Eh04iU~wrr|cLXPy?F2CL{30hvQv_aK_tP^eKdJ*kw#p;m21xv7{bjl=e>0kvT8m* zy;c_mrN6ioGCFY}n{MxM<@pUby6G$}mBk0!*KI=?TSZ{D{AcwC;Df~2@dS<36d1~W z#J%Jk49REfr#w_opw;Wmf#anv*j!Gp=%6P=6sNr1zVOq)=>Eei>6KQ{BHma~A^RS2 ziTPY4uj5C?g5zehxK}Z7-09Sj?K^{{Bs`faEGpsH%b&SX$^*hp8boxOCSmLjK0w-BhFf~Vs*@}pU`p8!LSTY|-5EC$sXnzQ`e?sK?Z(oDvUZ3M| z6Kb$|71y1R!~h#NM?Zg)d5Ng57Fpbl=7HKHhUQh-S1_t{+AQ|eCnPR=_WK}PBYKs_ zBNE{!jzM_)EC!clijiP%KC4i^JHk2pAcu#~2)rI8R`x4Z!vM>YyuJHt2;3dkx_Gk% zQA!c&SDHP8k-$CHtk?}0AD{iXyJ8Ms-#WXntt>z$!GobM4Y}}(N_bzr;{)WZcCF<~ zbi$uRmOXO(PcS}M#-X@+4yqX}O+{U2U<4B(x;3wb1Q>SAxtt2oEB#AZkmQ3wr}H=_ zPdi*ea<8mz&5GnA>IdZ$f4x1R!t%?Oi;DwvJDV;CN;iS)-$;J5v@v)aQF?4-tPQhf zOoU>y`!L&hlc$3`FtWq4Lw%bQG6SAB zH0(w~F@BH(gYhpIaF?77d0z(&@27@_)m5QGX30$T?l^2Yk_S`PnIUrFTJtftdFU+F zNqV8q4N=!oBW=tglJlheKy_LkJsTYHFSL}wAgXflZ3D4NbdS5F@$L^(L{9u((NWR> zl1Oi;kJ5xg`((~Q+?W=$3Gef<|7nE3?;>WFxOg0CT4{Uz; zQ@n!y*w`b!j9R22>)(15X^TN;W&1{`Gk+i?WRE)u=A${%)I? zbDj(~nWXWil~-VXs=^g_-2!^O%5g5~XF-N7-_@WmCQwaMqQZGC0g5aXW&d8UgUYR9 z6HvW`sBi+c?hdvgJSvTFI-GRq7QoqOl%bv;8WgTVH*Zg)*4K-O>sIkkerpb7(d7D_KI~RD{e(mV)^8E~`?0q%-R#OyuAB(a-F-K4ysNHrn+6>#c%qv-#2AJo$ElKnAI&5uP zLB>ov#9pX;>lk4SrIi)osoozUZsyK;E>1i6BqscBa)S`ogOm%sEmB~ZV2_bX=^oTI zHZI;sx(aO#KLz7%#i46mqFraPbfKEM#}sm{2LpRSOSNwbQjp-rWyeV-VMKu2vV1pj z3`%Qeth~vmVOqMyu{CoLnl$_GP`~AZ{>c|&>QqsXt^8GBc{~QzPxM9ROU^)qQUedM zJ^_qm#2OuKkV8iTuIn{UYN!-+Ea1*@f+L*_;jPO$(3KrN!OI#CUFW5*2=o@h=pL6O z1A`_yx4^1@*Y6X0b&tD{BQXqHU`1L%x?RhSf(tP?S8DmNkf6Ru2fKL?Z_ zevAs{+=c284fHi38DZk*y!<%N!&>nazX~6=W!VQ@d`Be&anZQyf)yuFBfzd(WcvfE zC8GxD?h}Kl8WF~IMir4(H~z}P;f7^RMW%Kl9mp+g?AjtsfsRlg=1jU9h>&*5A&pNC z*=J`p>U$zA_Ke?b=Q$gNWJ(c@Sp5vF`)Qj>1gAob?;mO>ZU-2aR#klOcNY2_#^39F zCWSQ?ORw7mPhng6#>BPf)Ck9rFW*EYAAaac+|IYPf^G#dkB7ho^;H`AjNxaX?%p$P z&k}&C7hR88MCM@U@&G$hzYa||8%bK9fhG^EfMudi15U=MJ+i^i322t3Y zM^FDegJnx1Tj^0rggFz4_jxN0ng%-Am!0oG?}nmyn+PM+O^Pf~W7MHqQ%8`1>K+_r zGsXV+s*UiRe0oI)4B!Xhc3@ED9AuVXKDs3I9)_tGx0(qGpzv7d%_U`S*!@lPyLKr9 z;bo;ixLctFLk|jsE^fHNaMIjhFh?-r{x11O%b_2s3{IPn@#Jb8r+%XJKJV z0nvC?dak|~VA>HU^n%VX)Q`+Ba5cNaYUrz2x_xVy(9w#iuYhzseBJ_GE&~eYFAk4EaF_#MupkT0Q>s37uG;B%93!B}BS)ql( ze!eoqcETg8=q-*6dfeq$eePnHa=z=+)167g$l0_ZtMVRZ^M4C}(aV9hQ*z8jIOpJN zY~q=SW?x7oyTQ7q;RU^$?y9oL0ven_t)gj=LYL@ura=HLH1rR!G0_`wCOd60#Y8-=s> z9JB~uoxhDerV1vv-PbWke$Rop9 zl_$jRNfI%;){|01<}5YbuUZcM=hQf_+wNlNMazBqjR6w=ocGZ6`*o!Ieajw09fd)- zxI7P>^?T97xq`wVw*f>(pV%fIt_44GWV%fTY1^wPf5=mgF;2b61QTimq3x|C zaD3ijCTvd#njU2x)tUK%p~LMjqf6JJ=hp+;KMlChE-SDp9YF-)X9)j192$egvP#np z$uVdy$>eoC5{EI#8zsTX1h5vaM_@ZZk8bUzv|MobitIg1Emm4CVPKo6B&qO>AG&cw zoRP458OGcRn|y-BKsQb7&&FMLNVFPyKXmX5(m!#tFIC)y{fyJ?GWPSZ;o^P3uIdj< zx%e(Ne54TdAVzzgLK9lgUvhAlABOJ4w-_#qIw-BLQ#Pd5Mbu{#-uHE-z%<`ejfcZD zFdR+zU`|I2svm2K`N?jfdk;ukbg6D5EAqZ^dX+Q`?0OoQMGA)?K9<~;4we~&$4z+n z(53|9`HsJGm)?QkH=F)ZL>PFN;z4`bJP%RD_WIUxV#zi7hkudiOW60lcKpPE6Mh1B zJYqi&9obSB?5%j9iSE?PhXTS-p&oMKM(!Lej*w^k{5pcjEw?1R#B(6eIi>C5??Y(% z)A7ZohzN_^9DyH8@sI&`Tcz{|d8`@fq58VeZ-O4Z(`x^f{|XK&DJD;k2}8{lOkZd9 zBy@Adh?AMcLTTj_T>jL zsR-)WheYR|7Q?&6pahQRm2kkUl0I8vf(S1;OVwPy0(0+cZr1lLz~V~{XPL{y=;{_e z#kKJsq+|4=T-NzM1~H8uoVK~}2&tiJX2VcnSZb=8oSJz7NlOgexxUw6oFhD)K3N#D zr^&Tit}r7K)+{$#^FNTap8NH2T{rw5w!f&fW(Qxc+>G1b(}K#9#n;QUo6x9geVG5w z3^FbX2RhL3L%%9%a(Hv{lQnSum)Hl>H&{ld5G*U4!<}?2!DHs zII}NF!oZvMVFkNfn9|K@T7S(2>b%TNxbKr;AmKeFkxK%MN32bCRMJ56 z3q3R;%V;GdL>Dz+eolbq|V~&hDTasa*vx;5@?2 z4HMYp5;bhr*&Ntx_tbF;Ne7xii8?O^S5!R@| z&uqAt@}nIJ0+jM@b}vJpVccxm6={f7lDDFGYz#YY{MRP)zM8Z2C>K-&o^#LlOTtR1lo|HxrHryr_pT~&n=n4$am z>o;jy*q)gx;Zs3D3nL+nq~u#S5JemN!fb~LB9YJf`SjCE=>J@`!81n;1BEfyH^_6) z?O*~joRVs!a&U2Qez6(@!+MTw_wCz}d=Q=Vt%gxpQL*oS5qS%8W7-Lc`lg|Bv(^9Y z-$#%zI@-v(EP`#u%E5Zv^3aK!X_`cM1|c zVaGM)#PI7cL_Wa2es&`tW^R=W-f|p*-_yU=3G40PP=qDdi@FlIdB5z*WgW&6tb#C8 z?#u@yOxGP@Q+W^J|Gs<}r+XFB!wPtp&bdR^)u?)5t7OQ3{`GzQP7%Vbt95Mt@f+4} z+MaHwTY*jGfU7zR_n|<5EuQg$666G~&R<=73WcQ{zE{=dAgk2o1C6{03~j04=yP9% z`8hvxv1Ml{lzS%h^`^g z8ewQ|_IJ+wS7?0wa=Rg!7^-VkGVDsL=8Rv*LsIw6{a<^xL@oKKM z8S(S58LxX~`)C5aljKYbRlb0w3zdg8R?AF?HTSkI{Z}f-ZOw#X!EOuzn znrTgmd;(RHS@gp^w_qzqYrT$@16E}GzPJwR!>H)tjr3EC5PoHL>nm8n5T0lA2Yv~t zeDOp779%zw4jyOxRejh?t+ZlT>V_0yni;lcM<@(^7ZCoq5cJhco$1by!Qa$gNBM`< z==qU6W$XPY44i07|6rEfM=IfGoBNKHVZGKwwhX@$lClUtOpWhCB}LF5CDH}(2|w)p zbaoVBgv2qIO&XwgEGr$qe-94ARVUvjhl0I^k(jtO4&?U)M!1g0LBzL9v9r%bAWv_n zbz`szjytS#!b@HuVtmhCQi==kE2!}-cftvDa4IIw8IB+k^H^v4M+fMA&8g=^w^cBR zOz5xR!14tIDnHVieo4c|ld`it4K>iowViVP`X>B}j|%no!G#JMuGy=OX$a?;i|0z@ z0ZgM>gKexMpK+~LZZFb|zkCBL(`YKfIdj!tW>yvU7oP3=31`Aa z*kG_H4KW1cM^?^}_&}ADhtVfFG3co0aa6eC3axj@X4*b&!BS{s5To-jBI zBmO;~%s<}(TNS*x-25`c{MO)^rZFdaRSRWn0ocHZbtJU}9|gdAXKBw0e22d9Kb@b4 z=i%pIpvkRKI{0SUOFOb=3t1&cr(1fBU|REYui>p9uob&gY0=IM!`;jS4fP?Aurs!= zwpRm999$=Is*KREG;*Cv`8GuBe4cj+3Pi-;okx~hv6%DOZz<{9YZ%&gdwgd09Hdq6 zK5W3TLt?4TpV)P)(F?QfmzPwq<>Hhu8-oWAKYAEsBL`v{u;$L}_e22?>XU`|xHZV( zmv9uDpmzo|3zxZVlYNJ+xPe+tGfJ50YP1gcgrI7-tX$jN1U%`V9M+t_1C6)hcD^(y zz~_(aE1!$EAv5)E4;2M1BKG19nQFXCMm>UBfrFh~O$%sYA;=M+RfRb3wW7}it&r}M zWH|b`2ga2Pm(xyYVdHelhb=(~7&#&MD9e5mQjT1fTec^mdB-JHMEDiFyD;@pYpMY{ zf*dD>3&N_Aa?G@;V;bxch>VoWt!|PvY(jcEFY*s3)42kvXGQAXgkEHw5KQ4eH z22no>AvaK)L_E7BUS>aNVN&hj))VVeXvXtf&tlwz&WN*kpWXJrTfEf$fyzsSr@j2> zoTVjfiq!v}7GZ!v{U@dTjaVB-!BnE7?Fu>O#D%XsL?LUHG;cRU7g7hcYQpq5VD;L0 zwMCLVgv&iC_Z4pu8fux}O#BFiKgza>E6&a`A>w@IUeSxkkbjUU!Z1h$8 z)o8{V>7n6`EeWXm^Wx3&-%KRz`P7i;%SfJX^pZHUM2aI{qdf(Lj z48v;Pqwhtqz7i8jEJWgiUUOfg9}-}~*0GgmTA{Z?VLQc&;*I7M)bS|u^?W)3W87)l z(4}PP8^U+J^?3sVf?9&ErCT6!*F(X$AQt$QwEtj(x)f%;)KBE%jNl#fxF`8e3Jlh_ zmPT8Lz%238Zb%D;2HiwQ%MB^m`@0y>if;;=`;N*kxu;>^HVRr9Yk7c1Yfx>!z~V9mpB0G23`P0391`!p}ce!8~#Fo97>h zpgndls#@U%BCM@X6cOf!n7@jSYrGhkHMTmaY*dDynkM|Icjlnx1B*oSR0K5Tyf&S} zSVNhL<)d~rNmzS)H8h=W5RuLJ`Rjh|g|G+d)k?~>FyThj*%+09=ypxTnjR(~9m2QX zyG)4~Sh=Kn%5q;3@tLqnx65@Qyio0XF*N&7^C+-A=#(n-%{?Kcjoii(>b#?u-YYmd z?PV?ZMHFFj*PXkDF2GcX=vWyuDU{BIi)f`5K120~v4F0}AYBaGX3XNKuqs1fl0 z@bw}+tXsaP@-8=kqW0*?=K@5~5g<27p3eo{?*%-Vk}04&26f2UFTzxsXv;c%i^bxTJuD?$w^w^; z1+jHqejk}@Vc?$ydcpvWp9IUvg9D(3l7@q+^$L_c%sjZ(@)!~3GOWRU1^Bf==eBV- z38p!2=sy(oL^s_f+3M9R5dR+3l@*O)(AkFccm z-P03DHy#}2lGX#WoV*7qV(7i|#MA~4hTu*YV}5O!8`%;Tf{mD$?{1i_;iZU781`Abkqx#*XavG4j;hQ z&kB6Jva_&O$u(K3fIYX2jjeZWfuyjJ)Cu}G5U8%^>vx46Djl{zRA8bZ;UmY{4(}4! zAbu$vAF2X7scF0#5x=1tTM-|SZ9(H+hS)uyRCHIUw7|?T1t~dxJNT`tg=K!3!z$y; z3rL~Y(oWM!4t^)B^ZjHjhOE=)7HAIHp@%W;dqXPjXPCUqo~hdY#f4Z|C2B;^^drsTGh9g-1sFu$?x?XlGLDp&rfJkS$zXnzYWF*_1(Xqc zT#O2EgppRVBr2+F@Ou07jcX^dh$@QIqefj5*3?8C30zNLO3Fra?y>=VKGh__I(`m5 z;}An#&?*lnWpzJY^ZtV9L>b)nrM4hP%=lRJ=NqW0Q9N7@V??Yv36gEa+Q{Ub z!D`O?SPUX%RK3SnA%#>W&s`&5>4FtG9vXVreaQ2(ra34$50&ioMrTKAp>w^g-Pptf z5zbuXArY>FH77YCqn!KDcHom+u`>x-vCZEp=KwOVlZO{OXh7}ZdT*d`EOdCB$FZt! zKqMnvtV)Y_VbX{9`62sN82%G&rr`A!2FK__P48e3Yj$7#3ejI=8yC2kF*}7pM5k^T zUwnH5-BDI~#&-!2?U1rJ9nDoJwS8?XJCO{(8}Bvp_4z@1l-1eSPrky0yhPI`!&}%2 zf1>L!8v$J-;sa9LpCQHfs66PF9t^$lSf%e zE(euB{b#Qf4{|E&gZ1?KpgC>kO8tQzw9vY7Hu3tx>XjF9mxNzq5!<$d&|Luz=c{z4 zo8#a!9oyI!-4RGRwUTeo2*(*B=j3EPg_&;PLdL8cyQ4MnvT z)CT$(E4y)pFxP~@#CAkf(8&l*P^y=^$aSL zS8fH%H$tZ6G+|n69&9z(>#)p*LDRYNr?0~IVEf`bi&u5z;B{>~7VknhB=DX#_?Yzo z8iqOAD)uNLCNc5B^HY{^7=KaV7vnY9YYQ0Hm~V&ru$FV=CgU*q*tLFDR2T`oE1{m& zAV8MNj~#P&YccS5KuezNl>)kTMxLnBxCCYbdYrCUEko+->=6?cUr6!r2@YD2hM#M_ z++M32FrQXF)^QUbW=cBxcT>7x=PLK5y8AQ`vb>q8)s_Q_v}4tHoTkwJWJv$Tw-+#M z$@1r7W*5S_OLDlM<^Ve{LZZF?_(RLk4Abz?3uv>VGESSzA3;3AJQQ_U z_HBYf&pz=C!ygE@LTS;q(i7rdGv*@~Pk0+2h9emwdB zOx+R)M^mw{@skFOq|V;UyR{0xN@V4fO~Vk*FpehKaUZg_`ePN%Y?}KgDl9i}8V>hTcvRxp5d~);v)mm4z(B$irxJF_@L6*tJb2gS86NOWuce zkYTIU@TOw~CVnw|3To~{?B3t(O(m<5g@T?ixtRa=RzG+T)I}|_0kcxJIV3*l$2mGN{n+XwH>;B+$Z+0h{1@^ zrlHAKD|9n;$CBuKHgcUdc>K4!4}(~${O^i;bRcn2{BeCZAvn1_)?J4xwgOB=wKhOig9RGTn5!jlp5 zlMV99M>u)@euJ@O635H#tuShaPkRuHEjN{A&&zPbpmkMH%vFpNrlzadWdn_oV2kU+ z1Oh)KKB?1h=7TT@$D#jjzI+3E-1f&zJF*U{&D*7Wa$MjEi+n;%#UKpxF1*;V>xEje zFSlun3^G8T)^ZoR`Zu#BbfnoZGqz2}hNM+rQVL2lr0ZlL z&@zEfx~M4yu|c#Rx)&C}U-Yn9{xu!+zBU^-ilc||>s>C(Zxa#zZc52lfCO)V~R8k1vwJK1fWgk z4D%9B2Rw}|Y1hWZ+N_5ch^|Xshx{4gqz_4N5J}w2?2DRLAfyb>=t0joocOW6bi9uP z$v2jMTqXdh@y>T8N{xhpHAA;m(E!M&pbI4B=`C$C3?ja^K9Rvkgg9<*lErs^g0((zVMgIK$oBb3 zQyEdN$jQ@K6J`o2GhE6Zk8+fuo>yh(i8TvRR z{N$zYNGvW=;g`|j7&(U}*o+mTD<1a|B2-l z9#ro<%w2RQf?3|Jq_(t4SU4u?YF5;PL#o@6wi_%E8|bF!IhqeKd|VOKv&zuBnDekN z&j)H5TvDl|m0@Qn6-PSy0-{;6h!MCQ2%SRVn6wEp7{8`^hw3XJ9*>V&&e?-VCS`h5 z5ic2AV1a1oXW|+X(7uyzlCuvBOCe#lFA|}?sVq{a;x*LkemKYY7D4%T@`RnAAdI@7 z$~vQW5jqvE?NnS3VN2oO%|hKoCYw>!DYacZ&3nFLTk=5WE5_AR&inMR;j2A`7 zqkE|CWgz zx01sCYMH>q?k#u{Ve4lx;|WFh+P*cV(l9w$_ke)|1G%G;rfe_W5axcdii{H0=)P|m zzo#(t}Sd_A)@! zLUDXH5js$kDzsWWWd<1%E<3WfYoYe15LGevZ*1L*Az}=7fL&I->%Ql?AtwBqpg_+c z#N6}Jm^z7tY}-9NmRmJ2WUS<=lR6Atylcmr&mG}l=Kk9cK~XThaC7}i*AO%eQGKeD z`3o!NnZ{>27?3QhL@K**KQg%7CvWv#6NAnfE_~aRD1>GHFbbM2ewa=1v)IYk#^O#2 zk!LwE{OpXYU!{?TI$F&N*CPs8P36g;6smzWn->Iew2IIqP|q?#6T?sbE!+n9)$a95 zETjt-g4D14_BVzR&%x4Zs)rE1udt>=q6h7l<*OTWpTd_2Js!1&c1R>CH1LTjf|H7; z&z-)VN90_qah~00AU`OS^EsAIil-NPPpQZw4q7FORm=%`nRje3JDq^FZ(^cj#6`a7 zUMow%jnuEOn;W6H^+5>oG&AULUz>xGuiRx1FE&FxNq1OZsU0+PO(p1N?7|!eZmX=y zOX!fuDK=I!fdt>MZmak#_*~>Iv#3x6qf5UV9()#oiLXpM9_FslKVNu0Ju?DQ&i6fg z_vAT@5q{1JU~hw@X!gvmSavuJwLjzPOonaZIgYettk{gzwq7%E6GL>b>u%iW2}Y+B z4)w;v^B~`nM3Yub0{YDhfA$Sjz~|9bIX&%1FnONB?9St17^VExRO>4aZN_g|?`Ic7 z#>wjYV8+F+}sO8DR#4^0#~8w4cmutdIdz(5ug5Wj0%xnTAGio$2$1+&aSkb zDF}8ESt|H;0}(x@Pd~Yvh>Xt_8kn0s$H2ZmU0a_VN|dHTOoBoXafI!Y-h1|N^d$807sf5vG&8=xtF{8siR7m>oaUhS z*3}FSRST##c2+6b5`fy45X(xoa&(G!#BRxv5tfRJtqx2lq54Kxg95`n=sXPio3dtv z2s+{gsn(g1`MpBo;-YvgkGYG79tGqfX*G`5j@BfIT)yk3`KuTRU-i2CXF35an87ynk_iUhXy^-4jF|l+0!|Jqp)@w75ZhuuMfH&sn!k)@ zl4^Qlafh^HZ_*HQ@3qwZ^t6DTvB4KA%GaSM$+dPUxd{eVCAG7qzM{M7w3S!xOCVzw z4PK5Hg&1^3M}w53ehmpy+~m9*83l`nr(KT{i=aBrv*3o&C{(Kz5BYniLhjiZA*E6o z*iv(=$9P&or@#AMKkaI$E_0LI{BaC%t)#vw*R7zY>((@yQH6T_%JVeEp^(*j^i$38 z3G4`2rt&|I#DXHvpB@8d2(0K!(Ks^>JpdM3UW$mOGs-8MS3(5VuKiu7Cp^H9|@@KsirlOR({hyO`kd2bla!6ffcE4hN5Boz5Kv zfTx?rvjui*_(4(eCIJ~kP0=^{263z(HI)>cFx7?C_q`2z^y7%SJZ81$c^$O+XFkwY z7KerxLN#9NEr@IJ!y;i+3VOjPo-|3ekIk4?pVj*+CnP0kbvW+*4dH1%9??lj03Xt# zZVz%D82@llEbQ)Ys3xJTxfpN@;bu$=nKX>ShW~(ZdVxEvzcTYaN3aiNBvd56R+d;a zS8Ta%t^gmcw3wx6CLuawwLCv%9cu62a{C^93Jx(>)Mz$5pc3tRi8C57WPe@HEUnxLdYaR_5{~iXto(}?740X_1jrS zRqpqoHi~*`;QAHF81=|QU(Ue62Ju6@El%h$#S00kP=lZhiH<4P2qbjw^|nR7BQktl zo_+DkHw*+aHC9(PT|}}MYs04_A3*oRly40*^-!c&l%4kO8@7OCxBRy4F8&6{<4E(8; zqSLSafNtUp6q~hPM|kfG^p`qDAuodg*+kpJ=MPSm*+cIjN39^3v_Sy&S6A?Nn$bl{tw@O%VoI1C#P*#==-R8FA9ty=6$QNi~8Bd=X93^YpU zir6FX_E=tMv}($=Ivo#wyv;le$7<-(nJz49dZCxz)H3A6@)$%qOz!Jw#eu}vFT}Gx zyNnoYxy4Udl%QjFnnXg#1$xzVjA}n=!*5>x?(7sf*t&2X=Tx%;G&K#dMaLw=imZ9G zk=RwpV)65pFxQ6nsg$EWpKd{H46aL~j46Do%gorwhGDMFD?%XgjMP*28k)8{vcJOpt&)1Y~#G zAWzSVFsO$KejArHD6M{nD6iuI=B-s&OL!sq47J0rZ3Bn0wlb@tJBf`HTu9KU6kfgZ5SRu^|v#s-~ zFCP|yQrvByVEz{fqxF*Vv0Nm=sZ8m9RsRHL>E1~N2^T_?=!>ZG4NLf?&yYFeVgOac zf*oP!iy&`tuhs2X4faz9AJ&Ctz=3SFrO)gFgpU89_CI|B#j?+TKe_)Iwiq2n_Uulh zbDM@Z^2;h1XzLxT@c590#8raI{iKo+rjoWPUTgr08>xp9JQ`p+U$F6+Oc8XaRO_`6 z=^>1jv)jDk0z`jnjGQM4gN267ZFKz*sGtXMW#CmN>);%w1vbVTc zQLzYZ($g-t2E<^^b*S`*cK`&RxyP=WMFX{GR|RA4IJtA!s%Oh*BSU=#m+e-<5 z)WXI0r{$s2pSv>V6C+qZirSGD*@3oTqLMUUO8C9UkstG(7zR9Ly3gtE!#FFuI<@!@ zM6UOn<>jwns6i;$33m`Cf)gCc#e)!U>G7vqEUU;!Wv4t&OdHGmd!C_@`{_u|WaXNv zPbng&KH1x1J`a@#Q4ctit)Xn)KiW0vA|%O-E|FYiM&!qA_~G`9&|k#vT9GIOL+}0R zo-^P>Y*WYg6{ka}k=mfQ=ZJvXH}}Te`U|0Olp~O*w*ld0HaUi<4#CtFEhoH04rpXH zD{pjfg2|zYo1K062zE$QF^&%Crpftp(cdF6aKc5uV<~bCv9=^lKTT_cJrlW$f|No~ zn?gNVn)?j$`^&EE#W_RUY0g5uVBG8bNZ z@)wa_36*%5ri0}1CbNX2Phqh~fWPet=QN^aunHa;G=z!lzKL%{PEf_)w_e`#6Q(K$ zKN{kCLur0P_#YJp*ig%3T5=(Q0iw34QtaEhcwU{QDEtbbnu{pOU9T}sdcqcI#gKm7D(a(Wdh;k6@{kbxc zdW}mqyCyjXVIn0}2ZS#n@)-=H{=^*26uNjk#{yqEx4cEDKOQulBQ!NX{|Kyhi*QJv zzl9?$oUK0I(CAT+qu7pSXxPL!gkLaU1Go)#u7@Hb6Xa02zp$LpNO%Mm0sJ(W`Wkm70)n46Kxl ziSHhyqWi>K7FQhaz}gGz5}W!ds1)NRPrVcmgN0!igU>KSh}($iw_ShOvtWIBE3gYn zREJ{;R6oI9CxK(#*^iKPUnDR|uoeo7X6~EasE47mZ+aQF=ApmNTB2lX9#LzrDfkhr zK})x3{&jhMD8JogXipmkfsv}JMj7uAPpr({>3#xa946nMz zJ+SrV*B8;7bCjD9rul=)jEElw#rB4S#~Pv5B)KVfq6!x8=v}7vKZZ<(Ru`T3+ z)uB@N)Ti6=+)(R$#se=s9-P-VK0jOwR=w?47h$Zn5BOM#n)L3n|Vf|>^z}_ zMWh^52hRM6`xOBb^cy55X#vpXrk`+h`ys4P$5u_~X~0t4m9<3LJ?I)2TVM(Q30+o3 zp08TW5zSlHOE2F&K)SqVvKoAwFo@Mw_IE-8pN#FBfZHxNKO1}_fw~QA*%6Jcj96pI} z*RrANM$FiEYcHrE$!v(#l!vTCd#2I_SEzL(zU0MN3^517EQ=){V0`A9$^1t-L>1zy zJW0WgoboBhac>r2V4cm2jWIR}2`e*D6vjV5_(7GGXWeHYozh78U645halB^pX~Tv8 zLBe^5WA*=k{I<6bN=7mgLdguF*Bg;SBr}nb%E*?Hk&%eXtn5wpCLw$8y=CvcGk?C< z@8A16*LB|a{d%A0^YJ*>ea?IDBFiW@KZI|%eQ%{t9G0eOeRmuC;Xw2or9@U2`g zN{3EB{@|ov>Vq(-vZ>yQ4P}Ga(V~fIQ*D^4%HrC)Itn|6f-*8q957otqdUsh1M!XF z)Qwx|=l=Ps#Z++sxh0O6B$oJK5L?XQW%5J;r24~#!GOdNlD}YEk6nKYsZuk#)p}Jh z!kc8Htt|-ImsNcUsml?Thx~xr)tj*P`~IT1&m{B&M%Ca6;=qr;e$L)8F3^SJ?2G-ndwl2`grN{c6d^5Oyq7Zu99c)KHF8o%!X%M0!1M zB{wZJ553-6{eG0+&zZlQF<~kh#+1mzp19wE+J{n@znDUV zcjM>hpAU+lbD?-1=Y#+@{~-&zsP|B--{O{_J`0`o%(Ut&uF%5VLMb$+0}WqkFR`e8 zK@_dJvseLt5Wz&Nd{(J4G*fA(_3~eXiZ*7k45lN*8>3oWF3W%n^k!$cieF$5PQ>U8 z17jU}9&|C|x%m+sv1qiGoo<46beRrTw+FP*6zoh2JpR;vnv3%^2oH54G^>WqRs>}|4Y03KOJTQWV-$5*Nbo9`3 z0r}=_X2ZZt?1B9YRT!z)Y}oB5Ki9dE4XrjU^uDs7R9g5m2GN9JQREq&A@RGC_O&0g z5xFDA_$=HWIwRKO*95a6=p#`xj`RQ&&~7VEX<8$4HYMFFDq}F?|Lms zD3Vmnse-aA;y7WOBoJH9?sLGyfG8fnneY_Bfn~}5;TD-{*qL~_boJf&9<=)qOSI|_ z!&5fSREE1yQ?>KOjXMQ`B)0Bw4L^mm*&Iz>mRkrXaLf0SJ{dG$`C7FmCJz$_pMKc( zo53dCak3nZA9CCAo&Q>&cMghnzHCRjKVkO;ChzidD@62P2MQFTH+k!vA1ua*& z9!Z-rLm8o1&?Ua-h{{akey?;7jF_aUlJO+KPV2&S^0lv!SK=>)fA}0qHG-~Y^zcKU zvB490dRyqO7+Acq&kpNPvOKOf-A7avO!keJgrVN|KsJHnGj!`=y)85Rg=qfukxq%l zAR80MiZ6RVF|gqzG8ofwgqTYEekK+M!}i68H*Vcyfuz*PNNhKM2rQ_3FY=)RT3NLV z*WV7ne&S1=i7&1QBRsi4q!*0{N)itCQg@&-ui%p=mpAmd^osRwl*0tG*q0yu+mNZ4 zC_@pS2S?U2-knxm2(L}#Y{;7HToY$51gIrIFTMu-+YAGA$yUEcDK`yH{56ZO-tPVaVR6^k$Cy&8l05;oqOyQ z3NrR!HrkH5s7NQxV~euha6<%!qQc8K?5dPNhb7tRr>onrX<94Qt6B&1 z+|T#Oz@RHy!;cW zK6)UGi4ugaZ(sa=Jy1ZR7YZ02*U6xl6H*;lh}bX)|N6=OyV!JyIOBn`!}DQS<{uqX z&>@8?j+1;9UM#4H;2HKgAce>eSNt+Avm-+L%WdQ0H(^U=LTT%J6C53;B-^TPXU!aBvNWLBc%t~t zwmZ}%cY0A;(?ad7Ak$rm6LbL`@wl7NLjyjy>mOqtG!E=}zMUC? z_N_l(EF)qN{`kXHCc|Mws`~PW(JM0Oc^jiiuJ{`|v3c7{-rymjCFRC@&SU6x-o~Gq zjB*URoDinS`8yWfFJHDZU)hE!JAug9dKt(um&Zx(ae@Zz)+@%h??OE*7kYln4H188 zAIsL#hSj)6iHRf2_(uBCH6z+?c<#}B|_-nO881B;R_?Ql<#8tmO*vSU+gpE6ilSL>vsnHg6$xC zS3)sd7>G>&YuFqQqt2_IHbl7S0sDr$+1EW}qRcX|*ZK~FC*eVi&oVOTv=6+|)Yu3)9=CCnn$8!1 z^|zPe^D1;$8>G#f-Gr91uP%D0jj(<{bZ+*R!@0K}k$)821iR)ZsVXPAFhQzqy7e;v zG55O9vIYJ@Drfu=ax%u}d(3ooqs*onsY^O?t*zk0?r&WoFQF^&EtHWpLe&-qs83Aj zx1}Nf>CYN$xg6*xZsllrZw{wZwtZa}LSb)S)!{?G0(@0adz<&&4hH5o96Q;fAn5CZ z0@ni`sP4l1wY{SZGy5BT(Lxe%+;4V;zV|vb+vPN$XvRW6JIBB$lM}>4u`1NIDu4`Z zc`MmluV4^kP^QkIXbVynFrDRo{Q@Rf$d8ARAk+-vZeE?~h4MnahK)cAXcXh6I<*Xk zzHDZlyvG4BF8uDflbIjXx7&9iKS1QbJWWqIXAk1&{CSRGdmK7n|9b&RFV3T$F%BEBd@z%=tx zYk0aP?2J+zf8gweQ1>{lXEBS=QP#)ORKoy$J_=46MC=fsF})Fg+Z^VoH1nbp?m^tc zQ$>raE|>|{o%3R7f-Ehf>lY;=5#87AswjdK^j;qkGAMrot&dcOUE{S7`8(>__XSumR8F3q@v<1&j%ANC zUDse>-!jHYOBhLXeZdeKIwRvJNAZJW&KShreN#FI=K@lww@T|y!GblyuJO+dVvysz zTl*vu4joWa(h5qR_L3L3pX@6Z>Ajk+2f;DThHFbXiK?G!|!v;!fGa4HIugHkbm@Bdf@ z5m6g;w1r3o^cYx+ZsQif+OB7l!2TU5Fv+_=mKz2YS2On|N%5ib*83WFNenc?qV^{F z+PNF_%wN&QgT+7I7SFHVg{Egk@saQOp!f5ALo$O&B;|V+t^H6H*(~{ssHo3k(A7%! zNyhqZq$I+}@P?5RVdDnk;TMTQsSHcnC82ew5_}hA?eiBZf0IpYc3Q#;IbLjaq(5xp zb{szn!h$LO6nsdXDm&EnBfvZT0OhDu@7a;e(+{lP8KpwSTivQ`#vMX-iIM{H^mQTBJE-RE%g!h&?3~m zQjAGRc>^usUVtMy0m6J84g8h8JuzQ2j&OV&ZtJTy!k^HN2^Y^2XpW6&I;A~D z0t%PM21o!stI{KH+=w~vN+J<4-04b$yp_IZYD>Z9-QcApYhkGJKH01#mxBq1A)oss zgHU2P?C>>EAK?+QE6Qe{@4;aJ9ec_dAt!azIA*Q z$QyvEtxxga&a7efkdtk~yAYN=JbtQ);6X+PV?vjMGIZi^5YTYaBZ{*Bq3$eFow52i zm3{7&80YaVp@J94=*MH?f-egQm#mPA%I5pISx=9wiC%Br{h`*hicjc_a(F&1?a5k}7rTl99ob z6z{X6yOZdm-Qj!&1rBs;JPGa`Xo3;>%RTOz)QHD_RV7tM0GaU|R+RkdIXCgbZ+`kD z_DFez>7j(tJgjah@spRUK~uuC#YUZ*|A*Ov~mm=u*_H72m)XM9$EVYw#@t zdIJg-@%L@vheAG&fu9c49wb`7?c#(siEgjViRTF4(q=>ak3G~bDMfL11i)61WZBNY z1jxH@q4i__8Pu}6+xQLz zj;W4CPRcN3Kz(KBSplTG;s5U$emKeZC>-8<0b4)rC3xMDgH3OJCLLK~h`Z%ld3mG- z8UqejuZgrl$AbsM*j_x)%je~wZ5DmLcc(W32@MeC(|G?@`mZn``IXvkzXp1r$=_mY~Ne&IcVt5^%6m5>@w)5t@b+Sj$Y9VOpk# zTQ7Yc>PT#AlTD=%InI>l*^45WHn$5u@)3ijA6qXb`*$IBCx2lpBn<`%rEgTgC+O4p zGE=U93X1Qxe^ov3gkN8LNBrDfp_7#t%P+$N$^s-6V}cxEpuaOX;l?!L@;dG1UB8Xq zNV24C*ji&?*5bis=kcrPTD>H7({cl%SYiBkY(@xWMCnJe_`A?MSZLDSOAn!%vFm@Z zKT+jlh_wiMm0F4o8ELDo+edTI;$;I7s-(~_9C#)% zoPbCr^`+xaZz9~ve;4tu%|RXU;w2l!TFB+9vQ6D1M9jLLl(QT>$UNEbc0|;B45CQT zW712FK|r>B8C`t}tBlULrNbAY@>5sw*9ak)^1CKNL39hsc|HbdlPtlCys6d|Je6}2 zy~;gtVH$>Z3D;`lX28Yc;kLPgD72`L%$0j{LE!#lk>_?_;ivwbl{StmobW{6)PFYt zBe%k_we^V1W_SILK(LMIx3_GZ|k(g@Xi;;Yw*qD>j^@UMoQPx zwGk!#mzxLJD&Qx`CGTW=p4_bxmWmr4(2-oBBb zqqqxsJA<_+v2KvxCq{!?p`86qxe+IB*&iQhJFo3nEQiXuJB} zz^@d{!d#gt)LQ5yoTN%Z=a2{=-lZ;>8&cZJ{X76iIk#6BD&wKMy~a+W?E$nW)!%&k zv=hkgtIAT!eR!D2%b%*LYsT8ac<_~SamU{4jC7IE4Muw+Bw*@dt8al+8*mBX|8^(~C? zZ**M>q=ycPlDkR~yKpF~rhuLh!&nGIc;mhRbkXWgJo@JhRjZ~gCnhftPcYa8=oY*(Z)kq(GQEny&wxY8PC|bY1d(}m+4ej*$u+1H~;ru zRYd*m-fg4mpU@??=HJ`132QW?m`Q3m_<73P`RVWAsZoBmlJf&=G=t+ z13%NFCVcSJi^9^&X@lC^4LN$#|Dbz;-0oDd9Qp`T9;}3Ez+hWi$>-8zM518cr+rWe zT@r<4i6P!FU1`;l`!io_Xs)a~<^?_T%)zBY&4!M4(P`)1ZQq(?jy zja=p;UQ8|0j%e2X$S}Ob+epSpz`J=X+sSv zsQsuLiP>u50$sNcyOR2PkcaTYSOT*hS z1Ac|?z7FJQhL(=Hq(H_vIJhBDU`kXCtL%>7YI|^?%qjHQ_TCt@Ut?UmQ8S2mOFddz z8^Vy4BrSD6H~s(aU92^_ls-fX($uqcX1oYXDB}mQKqQp6epfBOiw~{2z89<&*&5Ji4Ld@4sAhA89&l*ewQf zVi2ou{uI5~GUB~3POm~y3$sqUk%^^K(9pq8=X7}sW{PcBGd^5__ZqdN0!xdC@L~QQ zH_o}C6K3O76)-~M@7(u z&*=wku(C2br=9c!W=`T3V~_)M@2`u0C@Dl7JGnCW8-mD=PL}ZV8!-%GSTNZ6P%eOg zHI4>i6>0B}L_zuV{r5?QFCdP-x_#>s0pvB)*U|i!j)~TDUqO3KxCRT6gGBToMyfF@yay!l50g`a0!z0i1Ed@534|mfj3Sscc-R&M)Lx`{w z{DaZ$fr!<~It_y$7``y?nCF!b%^rVk)f_@#A&C6BUJeB!jv4*7E+YqhPTt|Rk@V0i z#_TSgEDXDf6uO?AkC9c#$Z31Z4-71=Y`wTm?26RSZs@*|%R;!yDyM0oCXiifxlBBH zj@U1AoxO9?p`4fMk!H+3q9~#gT(nh(_5GJ)CbQG9!~W=Fnb-rkwZwhH^$Q!c&OH7X zIpYF7j-iVU%MReUL*OV&MF>kyi(ErT3y7NOwwWavJLKGGDxD>5hl!f-#wRDnh@X|{ zo`N1X@`%HG?OerhZb^IQxAjK7k$8X8T(GqvtcUZr#o4z*5x>dNe-^CJV-!sgLEs0m z1U>Ix1@yr_5%*VXncuKB_b0bpXdvgTRM-~jfqD*0b`xN&>uN=gYJ*`f&lz{&J^#vE!Sr|@XHeInXLj)h2 zTMZY|p!J&i15*!ig~@@Zlnf=wgwv~pRXS5ns2pCuGJAM5*as_Q^i39)Q#;v?8d zxLx^zQVr%$*)J*_BB(UByzXjQ1#4m0Y$H-Mh(wD(Q(IF6*{&uOsNvUO5N(>qO#A3NCVnJ;5i|r2jE@4KTHIP6p`OPsaJysQ-yQ=VmloDy7>K`jy5!tWXtnq z#KNXg#=6N1E^zkh zvg6t>C>O4J%>U8`I-4}f>y8VdAgk*-HAx-9x<>T0$ff`)txiiCQx;(aMWqwGGyvO2 z^;0hAbkg|kz|E890N&Y4@@EdWLHB>3Qhl#TA$&%QNjv`!u=lzx=zVTCOuYZY`m)#p zrbE|szt7IX=BeFkDvJ+t1(HjK>miu)54aR6|6WA$^*IBI!`ETAFkH@Ay#q@AJnJF z_v9%(wC%dx13W!w76?d2i8{z9(Y_8tTlh_$d>oQK5w_`%*yZ7{GZQdz5O z4c%%qd@f$JQ0V&!U&@sZ;l9zlwya4GbqQ{BJR}j|d^b0S<9#|3X6O5*+nd+sq*Ub(1fyvz;NXEIq5(br%d*RX`W$_chuQ^US3y@ru;V)k7F zDahu%c9=v-0_7gM406G-ko{nY{+oaIIh`2aB#l{v&F`~>dTvVSLP4wG$IN>$8^a`3 zbK(g3^wzHHD_#gsmc&?jDii6eI1F6sK4*Tq&Fr}y_7KE8Iq+?rhy(q{a*%WHUNz)2 zJc~76eF~!kb%#t3f}Yo`mr{lzp!;_2^3Tt?kT4>!_f*OjQip%a+FI*CMpM~b z#ruB{L}zJD5?l(K1aU*fG1joa#n?~H#|~Y7Bffb3w_!Qt-k@~&05lcbMJulRAUm9} zIuXx448q#SUXm-jgE-xMiPfZCVLOAVc%07#zy$Cs{3jYbq|2T=E^>N6z3K3V> zuzti)^MMUk6$j>ZF3-ZYBJawqV=NRC{8As5_yhy|_emr^;(=Mmbfn%i5#%|Qexl%J%6A86^oYd3E#vqnReOo&%T%?^KmHCx! z2C5oPUpIcPgHkth4-(FO=$9^$nOVOL^{RgSSIgF*YD!D)_2rAOxjx9XDP9W8-><#) zoU4UGu61G>vMLxOPxY2BAcD#bajLX#XUIzx4lZ_Vg>L^184D>T*u)sKMA)6<)>a?q zf_FJ||K8g!5KTf{!m@TxAF`rX4~r>;Km0sDV7%eQR&gF8p@<#F_r`*gkuM~P?mke^ z>fuED;2-oea^ijLeF#5`BVfr(9$logFnn@M4>MP~92)xbVT6^z!v5J!2%+ov+f^(D zZK9^d8#jp|Ozvqmy?YjfRli?z-ff2Yj+^0o=3n8sXUwQ3HV%67nzWw?Pe8Ak=dUyT zQ-l;<_L63}k(R=nIL)*&3=A6631qbv6icJYzrBiTZTQ|)lw3TA?JqRCzl zB5J7U-H*IIVS(r^*&;(|WMSaOGJR;KGt@bnsD<0V1^-k^-rm3G$2~RRYYY z>~Fl`&F9lykMc(dyWFYON;LtxKEC#j_78=D3miGaqBo&2jNY%4_y7@?U#u)xzksag z`huMzeqshRQFHMl3;n;XN04(6`IOsL>U}XA;*&Z*4hUi=OpKac~HkST1dloc3H|JrKr5ca>g@JGc5&@V$%i2t7? z!s6b>dAMAGa29>(EzN&IfvY&j#()^~+pl1EMp+=K-#e2}%)X-MFYj+f4XacOiq?Qya4MsI$1|e!@!GsHq7vBaHF7 zh|+1b!qOkDa^m78$YOX~p(ip4*2SkuE>3l&Aseg86<&+iF@|9X3=agrCd zs*^?6zV$)fJ@4cAYIdk3FrW=8u0~v;f;d6B(a6y8+5}?>Ck9$h{k5h{7Z7h4(?c8T zR+t&|Q6Tvf3GT5H_Sq#XP%A@eIc#qWMRHV=j7 z=&Q7iuTo$|@j-vehhb=W-N5;vQw!nV^|cNA#s<4RL$AJ$-hkoB$1=ZBCk!l5EATz6 zgwsOtj~j_K$m~W)h&}xh23Ep)l^0Dl(NlGS=%ABmDAnq?cD!2;6$-dX0~ZsaopAR1 z0|IR*wXy$H(bB6YY zd(j^;rqIi~s!BzA6Ja!vELnUTBHws-lo8kp{dzebvb$o?UDifLZq|k#=+9PmP{kuP zP-YfLVZlJJ-eI6Drv+Z@>Et z@Q?I&PI7T992P{Mmdc%oXz%d|9YeIPx#qeg!?_NBpG~ zgm9Rl+e<5fhX^lp{k(&9epSZ!@2E|0!-ACbQZ1H0rdp-HM&t(TqR?L}1EI_l+TM&EkQdDAQ!ktc|0Z89Tym3x*{o8Q zvFkLDX?F2`CNUqBu&r17u6&1VUB!roj!I}0S3g?q6NMg*X3DP|H{s}!pI^xsKGccu zzDu@dg{J)N;%(*~M3MNY!R4|8GVAaizmxy;927JDMPF5pM#Nv7AWDx2rk%6jtVrga z2c=WcUR@iE)VeYBr8nr?`c@hX~N7kxo1Cq_nnVckk3Qe7DCBZ?M4}X zK($}v>*|misLb*DO4XqQP1m~pX^{uaDHHxIx73D(rqk8$o?Xy!UC!(G!z37d7s+4| z$bv*t&EFC(vrCvv`{pD|F_vq!-_v5hn?E@=BwmB93A_M8FJEvSq1akKH3fZp5k zx8BgTLy!*Zjk!a7IE_H<*+cK)z`I?jLHQUa^8~F*t@okmW~1g~PhF^K@^h?*P?-79 z);-f;1AiW0b?r8K4uhq?aEayEVEbLqZ5yo+s5pCQF~&sg>V>mse!)-Z^vIA4@f7-8s+ECgUy~QGLup# znDm=q8N};@`Jl|-WLObUL~QNyB;qCXlNXT%V9&s?m{A&^?H)AFR1ae5Dj{M)JwY6Y zRX97tp^RjG2O~!9udlVwK>n-Hw>ee?NNPB!!DC_r>2lG0IngybzbaKCpBEWaBhzco zT%-?N5Rv>-A_ls6$eEaSknlc%dg-@rD=G8vYqwUCy)P0fH``^FFL1-MS9*+CKR2v& z(}k{q_xv}RI4AZ=ts`hf&P$)KOWvFWi8>1;$A^8Gu=JVf<=a*rK zAW3Go=vRR@^;L3B&S7-*j@Pvy?a%0m^Ze2>{R#%kaO7R;!!9FP?Gk5)x4y8u$;k5L z_FwQg)aJoTh=*cYp}()cyn>(ATt*~EOK_As%xU@l6O23(U@(a{hF)`No1)#{@S&qE zpgAG|+6y>l6&`v+Rl7B_@}qUgXUTA&4RwGWPZsG544+_-)93ZL+c)UAJee>YrvpXp zMUlF7c~X=btHc4lR0(}76uXbEVRCLb3vk<-BhDpF0j-{L#OlfIkaQXtxx~t zgYIj`3)2h*(8u;KRN}}M5&PNwH;4M6=w(eGRZ0O&>>EU0mRg3FLPqM(TgRcP^O1Vz zWqqhD(Hwayo9Z%g*-3po^`R%&dNUNJ~3V0@!k3J?Tl4BL4`KT~nQEzP<$`F(=Ke8r@KN z%J?GvwjaU{^5qZsp%0DDw!N9S&9LNdbr!}X4JF?Ny1j&=q4*_hi@x|ML?MgO+y)WI z(K7OXTd$3XAGo}$`-}w(DFlLKMC4HE*tdMKAsUuHSrZ5oeL@V(uX2c%#*oQHpNCs! z;TXi4qQ)4FV~nJ6w#Xd+(?j@0B|h=W_Rz{+_4DtX2qdO+)!wikgyaG```CwHV4Ixi z@s(0C7^5B;#@l!bgFZLEKVrd$9G1q%4on4a&76_`M0YqFn!@%3{Q z7kz6k`xH?y1eCI7;y{EYu3`G`Mi>oZi?k}`L4;P7qqEsVNG@PAc7W|02KFO1od~D- zkj9;W-0R#wpxbk%uYTe#WZ#b@pw-oYUzS_EzMrz7Q*y5%&9~v=kKKpi8@2lzF0b>EhaEt zSgtTFT?3zuib-fB=9}~3`PH?D*JH~N zMJLNeH8nP*fz2-X%Bb?(E7uxk-*VN!q2g8j>oZ-5D);RrPM&b6FryAzQ>J%8GEBu zi|hdSY1!HK`4v9Gy0aNo$F+-SKmQRad?EN zfsI)%)8?<=VRvnOmMKmJ4hZuK7`kKNqs~I%;AAHRTI_UfY#2e}-(8-riCVBw^J5u} zPC-~vqKEmd_;4UIQB{+i4ii7^L|8(9L5J*^aSyf?y3T7mb2HEvz56Gf`N-oQ264v- zD?0)o5|JW~mw8bF<*t~{#M|KzuAn2wfgJ%!??Pt70@-_Il=MdwNLp_qp-7#Ux zvVtwf%PtG1)sPZv^0sO5Ep+&gez?VV2=?Pf)~kI#p~1!U6SunxOh!Hu-Ko)sHMfd1 zV^MSXDxEU(Xj%g*r5Y^~ynLXU#6$YMJuBp}&a+&hc?8|lKjMif@ZgxyOtwh#6b4n8 z?~-H3!@{u0iilbO5_n)C(y$eUtQ9c5R(K~EbXiH)gKUTsX<6tewy@(O?3DHwCr=B& zXYDm!y7_Gw4P;|`BbEzQH2wE{{h|?0#Yv9X;ux%@71GGe@WWQseuN(L2*gLZ+d2d$ zLy^S2E`xL`=(JB%OQg63IblAO+FKj27p;*nPm+j8YL)2lla8Q4ij5Ojn+Gc6rM#~8 zWFg_;dke30@R4&y*2_>mB@ANGawPpSC5lL~4zuKC@50%uKGhzwcVNzXCBMvh8FHk1 zZ{dZGK>LVMqZCmqY|BZW{l{hlg+!0j->yG_6n4h=Oydtw-9l{giUSK$ybY*75GF$9 zYlR&A^ZfexdBCmW1vQ*F1yoswo{u)6iclhcQU6fU;4$2Z{ns{sn^ zg+zq&`3g$H;edUYES3YpI5_O$BFg;!9SXI~_+<32LZ9CA_XHF?5OX>CQ}6N|q%%#> z^Lc%QLL1}l9-}rU@SX^3$p>hB}3DD;v$jp^#}9tIBD zI0ikv)6fGBY`gzjoe|ZczNHxMCCL7OcteB_%oc<*W@Y*hYzjPmFG5K zbjE?bBkUB0q%SVedFdf;CKKay&_!C@g%g2_|uOMZ=kfYrvD{ zOi1f~EKB?6d=tx&;M#nugOs=^Te?hT7!2n*I=LzaMU%{e>5wLEUOfda+IrZSXm4M zX4h8>{xyJZQbCHYT_O~PKg8kDDT3|&EiDO_Y1mwR&;E*s5j?vB{u&!`K*xuq+bdHl z@Q3#AD6Xz0RK4*MR3fs2NzK0h()m9_@6(eiW!?h#Z5wndQmYNE;;J~mWHk}vpDATg zre5SUhU2=MYJ`E45Gjl=y(5xhxe|`6_ybPm)T5I+gP{0DGgmcVA`E#k5U`;M_{?|Z z_7Q_EEHR}$rpOG0EwBBxOOJVA^Q1nOI!F@IJu9tFIjSJfjlXwLu^oCgEmi1tzeC3L z*Z7&ti*VZat%YSd<=h!eXry!{VWG08hi6?7CX-#ImO2R#H_h@We)4C8|2_+;tz=>l zNt=A`vi4o{m@3Zjr2i?LT_5QWys--(!`phxMSnwAh6?hiS-|y2qaFP18<3KXbAo1R>i9L8F+}<8<35K_J+fHD{xu~ifk9Y=+CLV#OVHz` z!HT|bWNJVmJof9P=hjKk(& zH&Vb(ZI1|Y%z`G}8f~E8nrxkWO99&b`u^k65`=CK)u123y60cud#D)gFF30!tKqq! z0yCT^pI?3b4NJKLasQaw5En!BN7h(rq%Z1Hh}C;8Ba5OlbIz&VNIF+^T#iWNS%PjoBBd~Db*ruIG#RD{uI%0TvJcxFau4;41R;&i zx@YZ<8Cc7{|9v0tylZcgD6e4Zpt{@W{-Aa%!pJK&lc{ziEXvOmC%K)__(U`g2=QT6 z?#?UHJVqqydap1rvISYPTu`?4568fkHnygu1|DK(Si#WteulkJs(-=%B|zo{(}EaS>c&@HLQPd69_)wsnA)oBt?8Fy8eDmoL&E9B=h z%-=()SC!z6%j!@Q!!0zz77rWrp7sR7vT(%zQPcgb2TE=|B#Y|Xf~a!eovllB=mGx+ zv$^rhNS}AuBs)$TgRb%j6{$OJAnDY|_SF(~IPB%6`ckI|xu%SRVHPtmsG$CwMuiGh8rvB6(|6u~jxgz|&SeHaiWn3+6@f`;^9mDh`f zP@-cOejz*@VRin2UojL=q4)q}rT+q^R^2D`TP^dW9a4}OV7rT%*11T7`%e6Ce1hyYgt z=OnHi#;TF$9z`K6ytR4$uJ#&yxf>i)S)>GcGjbLBZVJ$$F7vP}Q5plHYo(_FqkBCIi?!iRzwc}At2z1`b55Ds8Cc-+7&kND5IPX~ON7aUwupmsWj(;rx zR{SV4JayX;9&<^gxgIZiE3+P*Q2Pyo{<}bRX)7@ZDKXb3J6uzRsZ27Cs(l)$6L;Y& z4#wCJ#6{w0^>q%m;Zfq^!Y_wXhhpI6)HUj40Wn z>Hl+8M|u@YG9~v5&rRIyjKMzT5h9QKxopKzhzKsmx8X@pL0;WDh7WHRM)!;x6h8Mu zF-_{*oodU)Yf&%u`42H9aCY5umxVJ&^*j0*1rO@tA8AHXk_IEX_co=#(9Nsm<1oeMhK9_J=Lpu)F z_-*kS7(Z*=dqzJG2ZP_@dW!JDLvWyMDAgP$XGP>BR2HFx*~bVwWeLj1nQ44#HV`)1 zKFMsL2^^U%bPMR&L+$Dl_;J|;1{{+fkXTP5KF=@W(kgclXNbi2JJL-UbO9TSZyTQk zX5D8@1pKmL#3*R-N?s`xeF~PKSKNTUdqhtMJ6a)-cw2nFKNAtJfWRKudzwGf^!{I6c*591|mf zzxo9Kz4=oCL*1gBv8N#rQGE}GkGh1k9@u#@gb^*51{Tsgea>BZA^o5i?beQ!f}fx^1GhD%U( zQDT3f7Vmth;{Om*%%a;L$g(%{5Hd;r^+WG)AA{(BTn=&|!$lg88*vT|JYkid$M@5D zZx!8WvYFzhfN7~9?j-SID1Lwy{^Mgj)GJ2MuT#E)a*UeP>y;xIrFM5>lQ)L{d~UM* z=DW&By%DR452M4~r1?M46>_DJ7J!P1|&FCP7V#n_$1*F!=r; zX!gn~MtISQoxE#;u)1ovbT*@ma4{CIH0#75{LOvgmrE^BWn<=dyvYcIp>c92RaMYI z^)8_}_X2F|eC3W7wS?W_J7;C|&tNFKXsYuW9jr^1+??M+Na*Y2gvcFrWaPu#S`tWu zK?GzY)ek7S&?C{&HF6{jyQC@!j#D_$*yEDVvV(!Xua2zYN8}KLC7sw7Ne{&u08v1$ zzx2PH@8rW?%c!A>eLU2u`X`fxJb(loYy;KhUm%vCUmfRA3i;LbyP*=45EU)PZW7Fo zaPrGZ)VD(smcpZl8n2HbPqZTYhYu1oRcu40b&7g`Vl*xMbvva2lzkjOR~a4*#ih zO<^^xQpcOMzrh9j=doCddj$|^DOa5I!x}0tYT91bYl9~4g;0H;c1R(0?zI&naXpGM(Jh9oTuxls z<`XF2$^G(s+6!@h;+#F1F4}r$gz^A-+>X4ED zLG99x9gNWgK6$2A3B?8%mg!Z-5P78i%paa)*o^2+=6y#23(+pj-8}r=3(H6l3!4 zGd@~}zmGy*xaKTC!=K-Bu~-=}oSm~@6H5V&8{sJ?Q!$X)OUb*{wU2~3q@Mrb)j`j~ z<7B*F`k$NlkC}s>Etm7li16C5!t3?l7-@OH=6PN2pO!6JjVV zN7!vYEe7!pV5i^LzS{D9irE9q-6@$N_-}FBWRsSiSKPOrhvZ4KyItgm7^ z*ST?ean4^|y@koRh#3d~gOMxB-5K|pF%q<4oB5-xh9N_yQ5*&Y*c-jK`2z}&-u zWZC$a=yH!#w}a<8!g~Dl;Pxd=2$TC8eO3?!T@v`Vw0Jm>$YhqGZZi*Oq>6D5a}g|K zx0b90CBpg*6>oxqF7RVoJGkTN0?}6|qq_PHp|)r#;6ttuq^o<{iVs)9(3^PX);CuW zxy!Mc!Vej!f1*8d*TM&qR3nzg^(v6?bm#;5hBEX#j_I*%qYws4;~UQGZ^WUeJvM&o zxkremj?JnD-wCShFSZQx--4b{!|_BH3n)lm)6|*pMx=LDmjjM@U|FH~vFY>yWW?`# znJ=HqLS}P?m|PuHp+^F-k%7>bW}Is_sRo%JOT|LTj1g8IHVsMkc|g>lcWBqH0;3r= z&fS0l7~41h@{#`|QV@*@kzrXxZz7~~eS{Y=i01a0+y#4U^yrAV@x!-4IQnGc{ziTc z@=Q7JP;%`-zfFPlnTsA2F%I3s(_VwA%WqQNY>2_?ktM3uFl zDuk%!aa@VQagmE2=leSRqVw2;3`j(-#KAVJi#AXn7+Hj#ppfE2Tbyj$0oW-d@XrCS^lQ;=>H6z}^v=C(}pLLzh$>H9sQj z$7Qo@UlK5osi-mi$!rp_p-FkX`bvajTO_LC;R`jVH!tFNPr|Swb9hb83ut4o+tg#H zgbCBQSx+2XsKSkB+zhsaIsQ98ZVu0Zmy)tcXzVgnj-a+(Swo1UcJSuI+JIV92@9d~ zDc;_6VioidfQ6mW;&h5%P~WGYp8G@`dh@^W-@I{*u2Na<3wtZ04~}9JIr3HRGSbtqJv1;}o-kd1#YxiLIAWg!Z%9FCT}sAd8ML<9fRbB6_(^Z+y=g zj;*y@4|8Lo>TNWbJ}awbERy6-A3T#iKM7hVK6rIlk4W#8h>mbq#q*?yQh zFfR!e{w@S;<@nGP`0XBHml9N@MNm{43P8bwMj|;YOGNP~cuHTA0A|Ju|7+xKf+Oiq zoeYl*Ae!Qv)p$@Rv-^c;2=emZ%lKImoTvRldNmU-3orw zTw}P(Uj);geSiNVjjR*=w3ke((5kbr(W1(C(#0bk%`d?FkZrPpf zKc9w>#Ney>Ox+&D=b=_b(%*qWbQ^yOJ(2r6+_QyBkY=cR4q23A*o?3qbcLww1GhPKKv zWN}?h%E)~VEy*;e^w-E>bK>inukIB?cRR$9bhNU zfGt$;6X7=Cm;_u;fwoEeJxoO&{9ME3h>mfD!hEu0<=@7LFT26r+<70FGLSx_!lgLh z^S^H+C%*iLE=b8L{QVXUi;FlXKRJjY$@7bUK*TG^=5D-qC8QFf-;zXm;YYy++sG3^ z7Yx)2z8%KGv4*X|XVwPszaaVk3XK^3AIOkcQ{73><^=}$Mm z4_(JvXj#1qVrqjIJB9gSv}C=R-!cb!7ckRun!-@lec0|7dV;Y2le-($dUXmu+(`ELYI8$fE(VTDyKi3{WkJsr7O?&74q^G&csqdYA~ama3wJY8 zfx%VN3=>>m_-E*@bBlrwQ5`rq5_8;!UAB*!S+IESr8-^Ba;Bgb8t`_lCmAN*1U#js z?S=#u$EL>Oa2Wja&SgK^9pQ30+@UF+fsNSHNgD1x_|JZY=yQt?G;%C6S$4}K$P--(U4IKaqqM2NF~-84N@6ati`17^u0t z(e0u;4H<<(E@TOUP@Z{NbV6JlR;w?t@>WMczNKK4@#i4u8C04ko@ars){ySVF$tKs zH!4b(Ed*p?v6f%#;_d}P~#M3n?a+dT5ntN7P3%?HvL zL^~X{&?p#;Gy^F}4UP6;=ZU9-9O)*MC&>CPUj78Ff242iQWrt4+!T{uqanf&e0an4 zNfq|^WBK27nZWdzmR+O2BShO6^63T-LgkL<EK|Z$is3$#hY&Ftj}$;}n>0gO~+WB|`TFmcQ%m#)1sw z#ix%82hBqy&3JEi4IgA;ZAWz;kiv-9=8H3|*U)@&HXG2b4_lWf3#j&6&_!zxHb$p5 z$o?3S$TiXhd9h26$gOD6WwtAs>v(`PZG1993nMY;k}>{^VzCOOjqgAsJDvf3#5YCU z4jZAmVL!5a_B>}Ug4ThTUQEVUVXvzX62p@rr@zS% z`^^*R{2^J#eBTV(aBTn4XY_)fFxi8H7800HNzX`%-bOg&K_i%A9heY#5w8@T25}B4 z{5d}Yk(ZxF7zmo4w)*=L;<2 z8##o~f4pZdfq`||0;d-S0f>dLFNbr~6yeg;WHDA~LXMDIjn&0!C^)MZz0+$2mAv)5 z@BceMxHSxAU+`IA;mU!dKASgm5k?taa{B~f8}7>33-OS;%gor6nFH-BXUrdqJKzez zCWBZM<4^(x{(7GcwTzCy>507KL)3WbIIP?t(FNn)pq_{UuGYq_nFk{5gUw!*o< zUMHhmz&F!CEWRtcK~1M{@UrM0p6et;<40%bBYCH7e#3_b`Z)|+b=R&+DbvI4n zOBKRAP5OiH#0x|JvT&BD-Qatz##%VtSJ+()y3KdMfL!|{Yp+c(V-T*jqjj^7B*G!> zqFKu!fw|PXe62?2kR7J$8AH?wx%#~Q;XWf!?iBxy-)t6PZP?0jjcP)3nQW4?#B1p3 zCx7o#b_G&+77iBeUV-;W98SXf2AJslTPhdR2bnFaht?f zs2#C+%05gFvpbCPTT9+ZC3{;(STc zxZ9AG??v>Si5YsVsHzM#E<%)><6C(rS=bIAAdmfc&YwFK5q<8m&?HGX>7{z!lM}8P z1}9}u^Pc@fz4#xfi_cH@ln8((k`L-c4otAm^yJ}M%2n9@b8)XFOa?lcY&0;1Is(|M(#*{C=~n>|5(@~aEdxk6zAy4H8KOd-^oa0;4 z8(mt->*(PlGd3p@NjPz<%p|ov=fRD48O~{}uy8vpPSnQ@y5s3np6;8&l+}WydovZ&cq6f{M_wFPSN?Oe)~^MW`A7LsXqQ=Vv{C-IJ@ zvo6O7$7PxJv&$98!BsI6+8cmoyMbbbf487efYy{*!xxSo0XyGRC~R;S3D+9@2MgVP zAw2Ai@R>2@e@Dh3^&ckaKS~eilr*ip;@S=kZ%Xw|=YJwBdaZ(o(>@4?sQvTgtOqoI zeN5(jN)P4sUwMQid(e$*>{H*39nr&&N0RMKrWl0dmd1Kyfscfg5{5dW-@(qag+|Lf zcZl#$9b=Q5g1+l|j>Q_(5bxW}R@k8qN5T#b&gP*o`8@QKh_E{xkrIYevdO>?dxqz0 zEn85YQdwz1{1}?XjSsbdUxc(9nY?@3A7P0lFK$-d9+r1LKY9M22-J_Au}%`$KA+Y42Od?6CmR0k2L z^B`D=t6YT2ikPvp@_0x#NQn;Vc7fx6$Ll=T$`J<3*^g!i3sU^CR9l~sK>te%s>^JK zP!@3OqEXiwv?usg-3v2@y@eaG%9i+uc)(+ACGe6k-1(_)vg|zJNp#MbqsNoh4q#p(F z$W`_qXx3Ne__|P@OKSNrT>)CYi4=)?kwZ|?ivTtSEm#iV5yZkI z!md;AqREdSL>xFi?cG@g8ODfMdDjpcugM;DuQ@}_n~sVm-}~^#CUk?zw+DK~H)W&? z6XDE-Ffk@Y3A{TOmrTVQAS!DPr+j7y;VTpK&}=dx)7GGDo;!3Hs3#aAJ|!MOS|&nE z#xH#lhP$i8V#f+{PlmRCa@Rodg^r=UbZcnSe{=9R#TG_CslBRsqXqMv2iUy#d|=9& zl*ut>72fq*hsER^L6)<^2aB2^$Pjl<3%h?8f^f~;4Z1HNk}d|kYb1YQb6}t{azhEa z`Rlp!8>^tB>qex&dw!Us`xNK?zz$hc&3s_pR6XCy8fpo1;a&7V@a&7vlo-N&TbR-M#^TTcm zUDyN2{Qp6)VZZl;EYua+)M203qze{sQ~q<)i-z?DasrolPRJu|`k9-*2OZv(io>}K zh-GXM$Ke+Va(R~C(5FU#L3mF*DvgERkmmQ+4~Ypbu=lE^_qbdMYEv>E`|Cj6p!OpRJ4aZbbGDo8z=BO}jsD%qVJMWDyxcG04OwG+wARLK(EAX5 zV!+#j%r7fM-;MoXZuK>ecI7=-j54&zRuqF_`NLi&?*V8JZ2!;cwgKW`=S`o`jYf~( z#Qmz4z{8-+@1OpYQ{aNll2eUj+JA_EXS&MhhYJLJQ2W{1Ap!Za1Zehf7otzz2C8-Z zh2AWIvGCM$Q-;Do{(moEpp7VP_9q$q2_BP7<2Hu0Mps&sdVB~gTdDq?aRbV9qUsIiMr@~wx9C|d#1C@d-*+l^}1#7VBil_-+gg)2Ku47fg?}Q>>VPlT4`v%Ru4Vb zLum(b{9#>VXY||lcSwD3Eb5tG3;h!Bsaz*6Krmy`jf&^<@aKIcepkLW98I6>uFj3X zS&7nIadRdN>HG=U?csr$SIXYlUPg$W)jK+Dw*tMnc3RNSdJZET7Btd6#$-sI{qZwp ze|kiCQGBF_(i$9e26-QM1;9jkIDw+)48+T=?9APNh-h$q7wCJZ5T0~hl*3LutcoA> zc`z74mgnjTt4ytPma z*|T?LSf|_|^F|ns#w8Unu%o@N_vHwdo;@|0$P|XA2KF=x8)KMJkh-vXkpU9))#Rp( zsiCOBUao|B5K1q_*07nshmP-b<9`D@U@+Xq`H8@5$dB-E8oyfw6R)fqDw4fmV)Ee0 zz2Or?75YPF=8`UQsh|EjXU30#@%7)ChDuM+1AL9(?;NHGKly?Pp;`u1a!hDOUaADE z_Z?Mkf1Dxbhq~B|2|u*`yqxmwff+P?UtjHj9H?k(b1+{$f|?Ak=Gl~3$a6R)lEMyv z<|V~OT(=bHaSAlOC@=;)G@YJomS+f?EAI)IzJY2<=J#=ZisxiM6w0Lf7hPznJY?3| zMYdYvE)QF`F^J0hjoVF;O(bdImpvkp1uI3r7+s@rA&w>c*OP5QsJ3gySN?Y!Dt<)Y z?K|#+Gv@lhnLc@#=$+_V$I5`E8(w<~l{oNoz=odQZVf&SudMHXUxI<~WE&1W7pVT7 z=>7S2J&b*QTPG-m57XqNkv+ZNp|LXdo`PK#bn;%rB`8)yEMKQy(CV9_m!Ey#3(v`% z1FyBFh_>PxQtM{ruVWO3>Gm86l|u{Ye2zb_xceD8uaCQ|3KGNbt*Kwp!d(bs93Fw~ z_5@}ImYE}X8=zZLZlgS46~0GP=6QeBfMWAdO+TSX=&7>o-&cu&jNp(fi-!vc&&X$f z+G!e2ifID_r=(%iJqEV!2|AH%W+1*h z*i2?8kqC=Uo1T=$4?4mhhvDn+LocIot(es=^l(+#7asAl@})mDiK^0TQo{u2Fwx)@WA1RW}v!FKZK_2z+rzRS3#vVKr8 zfc>nh;UmHucM5vpFN5r!Qxn)*<6+<+)AychxE{Kl_YCvm;eFWhe0?$~ybNW@qW^-t zZoy#Gjn}sITIXbb6Psee8a9+JM7r`iz|cc~qt3xNn7k2XOM3MPvL6z?{q|!G{;J8* z-0{2wH4*_^#BPBWxNarh`L0(_-SqFI<5;pX}PI~YMIrBU_ z^GrWI-%6?Kl!E{4kU~ZD1w&1ISbIMC{b1Gs+(`TPo1I?5gva&9KPp6!(1#Uoo?eY` zy_aOjSU}WtCA#1I#Ai+b}hKr9r`O;o_SBUKx-5{uFbQ6 zBitzI&h!!3tKnyAYjT2S-RUgOq7WW-HFbII$mI#U!ZFLBUSc`u1SO*3%jh58+P9d>x_;sT?6(V9Uxg%Oh2Qwam z%1YFN@DJBwC4uG(^lq`z?r^pvss3PNB>x)S8eOCv3wFXF{GqzH?c`_Ze!q@t$Q>G3 z43y}IWbJ|SsXofI+{-ZL{>xSv{|c1Zz9sz?nT?1gu5SK{UW6&Cw;lWE!W*cvA$Y(L z4Nh^-{6ZVJAUrW=i+4lz@VxZ%9t*|+dCQ>u5;3{7YKS%j*586(Sp`c`W zuA=k`WI0U5$=wzJ?<;?6N1r&uNyyq)dcO_mpG{xJyF&+kA8@(9CJBNGX3O%RfC?J* z{)=-y$FsgyvKuD+7R$*?A3vNLFVbkp5~$Iv;{0!#2qg)~QXW(gQ`Pa5O4?-F3q6OBa72$yiAGOljHe^)G+%Y4~fqJ@=;l$%asOHb`k0fh= zRi%tDswH!T|3?4v=;bP?Y1kgER8cs`z-R|+(>^2^hh>-&){bmdwX>063kD`^?(2Ih z9iyB6h8iBdVlbmT+q+yg1(p6jfr>o55cB)1^n=_%@YPf<-eakUS^jU)F*a&Y$9&nV zaQp@=w&TPBAa<(Hr2g1bNIP~!K=_sk z>|wYxETm^3Ow&F#GcFn8v&8$GgSH_%RKuU4^bkf~)H5f#JDppTBb&cVE=+9hAD0wW z!n^V&^{+{C&^;Wxk6lp!cB8}{o_PO3o{SaMR(2N*aZXpJ3t_`CF_*B7lq+Nw?Oi;v z%7>7K*76_Yw-BGDn;A1tBSMNT!M0)N0!zZZLZ>53i|+BS>e%*HLce7x0Ri44h^KXq z`On%D#s#K-y9|AXBGSiE^o%cHFg|kh$?Ln&{P2bV7GnqWiV<)gJ~o8E$5%{AkBPuq zoM4EIwHadnSU$`jC5NIaui^@kN+_mpxcJyD^E{OhjV09dLBXhGWeMI>C`de(!y3DW zu82*t5%LM5_jy%rjh06k*e1*DdO?X=k6p z=1)(C4U%y(_nhI3ggKd!L57QwYX%sWcTH8A7MN>LfwgDD=F4$Mby) zAK@Qa4V$IBMU?41Dp@}`VNsUl_fnt)^hcaX7I5D}66zv1{5=AZ&SHYGfTte@j%JK?L5sxGhc_W>sc7Etrxfg+v9C?f;=X*e4A4{B|zuJAJkfUn2pmCr29u)gAh&9Jxu<5=CHq!;6$KSne& zZ#)D-7Ge#HSf!wAqn&m@_ysgy6j^*meIB8&tXnO$zlE(`8d7};PnZae_vOc_f(UE& zcRSSX&^NeNrS{<(V#Ny^DL70<(uF3E4>iiqo1f#qqCG!^Wa-jbq_(AC&BrIan6MdY z4e9H)L&YISr&z+u&>d=WlR5ZG2Viu>Cytq9AXLVz*>>!Ix; z__x&YO>5tQGzG~;{GLz<;*-5$*K3D}uEgfJw64GsvnIZu=md0!nOR4_{SVgJR-!z@ z&x7Jw+wxqa7BcF+8X%MIjzLV%^%+iUxR8$cq(3)XC8EY%A#mxq0=2_-!Kr24Fm&>R zn={-4ikO3LObqYA=2LgRs>v$oEFo^MBi?}(%^pJACw>qUWyhP=M+sHhmj*Mr8(}oG zGKhMkAO3w1j5oF+f-Pqzk0!;>Fq3c)@H+^=3)fcRpUPGE7mj5;I-rY?%)du+l&;8p z!(Hca2b&*xmJs za01~*{#9DAo{J2!hldv!ogq(ZzC39rvOWf z8_9-8*~f6q|IFUS{0{uKPnw~XJ?Bx4T4Js;U1&ZHd3rd4fqHS3U(9rs2-iqHeEW(5 zoPMNWkpJ@&QU>$xlX6c(kN*FT?Lv?MXFD?u>jz}3AUE!EOAG^Zy`0RErwgNf3{pC?@(ZSSBs>sCyRu*;l?+2o z2|rqTHK3|R=qvtvSwzLc@D}%C14JZu`LAKk!MYylRrillkP+}v$D?HwzO!^u7gW2$ z=tbPb++Nn#_`2s6UVB^^s?4rBEG( zHwHBHldz2tvMrPe~s@}iFg_oBI_<^IJUJ#oP)gE zF4g=ndBL5{;^r^tIOuy&KfVM-8^dq8UpPaq>QJjXnFPY(8j1LIhz}zX^=)Hs#i7EY zh1Cjs04fce-X<1@LVge9%95odR6n??&;7m_%0}cjYO3{Nf%&Jbn|CClCo8MQFRp}f zHHz^LSwVzQ`0%Yn0@`ER#xKtmjTcZF*W{keP)^~tyH@6}7>NY4@!=M}Sjl3Dk3nYpT)>vTJ z=t8Pwd;}DfN8%uk=ZM6@;oF?DEy6KhImaLKGGzg+AmVu#NAnvd)zbf!~i6pNzbP>RzqWd2dVTTg%F}59fn&$EixX z174{9yRIo#FbV?;!b>691JFJFu=XcWI{X=uUrK(#3bl{@dx=llpfLHVSuN8%l+}t% zU(=`1JDXnI0D4@~mhV0|EPte&jwU?Kn0~K4#KR6kVMp?>3$7lZ_zxLl|YyRYz!~wO>`xPlj4w&Ao8~7Ff#a zrX-^_hQvg9G=IAh5(-38KS+Fr`OpVf3@C#ki-JrZpY{SGq-<;y4!Dl6R@7ey2&f{g z11h2-VN+=S$soH)KZL}p%y8_puA*13)PK3{&SJsQop{lDlbGkG7l@VZ6B$L zY@oVMUgt|uBLp;3hLE_nLUH22^;p7Dn9-~^u#!K64kqTV8QBGB6eFYM?VW=xy!CbI z@EmAoB0Bu(>Iq8JFHh3n_T5dLKFs)<%WeNu*9`h#C=|f3|^B@ zx?$5uW?i!)g5e|5y7%^brKJWIqE5gHNHxtu{9HZ-wO*gk^O3u=`mzu-zSWniFCl@# z=|R>&8GA@FO#>N{RTyn@{qX$c611`yK4XsGgFX!g^QJGf&^uPjNR0avIxF?^{OtN+ zOhki2$q64ygFXa2d7h0Z@Pc_;Og})^-404RNjBIiY%m~y!3jg_B!9-QIwRqZJf?hZ zdt^2F^?sA_Di$Io;N)T2SVHW+Qbgk)ykKuiGM3(q8M-{)k?7#1LX*uqa(?c3_)g&n zA6rdfR@0PpQdR`!4ZaczZG3~h2T4KhR<7qlYH_bpmk2su&C7HvHbFst0e=ZK6BMQs zGSEl5AfnP2sp4c!2;cL|lA1sk!U^(C&<<3E7`bsd;r2&JkVkkXm?0h6M5U7mmvLet zLM{ytL7Z2Jj-B}D(cdHZHZ0%jR<;U*Pfchm6lbBZ$gASV9B?b;`$fvg->$nmNMfMYBERxAEeQ7nLI&J{ra&0K) zreh;~Bi1l3S8GK72zOJsCJ2%g8>jl^mXU%|LUOm38~W&6@xS-yv0yV)@e%h>72<5d zE#t0tgWg+DX_m$tp)}2y)@7R)THFh6`}ur=EUypr!rn|UN}<1eS&|l_Ye{k@UXem? z3EOQ8Z!0MM=3(x^^Al$*EhjC}3y#*R3x?+vqj$e+qoE^&sL4NQh%l|enx%qf zy1*T1GH*?noZx{L_{UAJ?g|w~8*5bG)nJqQG&SJ%KiC|wU^+9vf%&Mln}k76pw)K7 zJWH1p>WZw`0$&lrluR3oMDPgozg&CFRJH`$Ki?ZaENVbh)va4q-ie6V)A2buM+`I( z?hCwp?E~xhbI)`O{vqK^Iu1Vp4=lu`?`LZxU4}Tvxxz=8$Dp%#e8R0L1uC&Kml_uu zpi9%_*JG?>XuMuxLy|`a`Rm+`1O4{Uc=BQt&r=n;4xa=$Gh~CeFeWvK@E4Q?8~oUx z5`rkl12H%HacJdUd35jjWjKoX+^I>k4X&R&mYVs65K~e#Qyj?x{G-!Z3i&vLMA@l} z6v%HO65DGJyhb~*5NF3d>DJ67BwEc$UNQ{O_84>hgPuM#cK-OgqSOmILSj``yoHec z?S4C*7dGr_mIgUAoSuVjQq*`92b6~>g*xb0K}>7# zx_|efRr5FKdn5GZtDrJsFsZyHcT|q>jLqx4PZ?oCB=lIu#2@i6Hm!08pTo$jS&C;; zJ?A}^8g}!pMkx|@^p$>Qs}0R6Nklxo>dAzj-L@pd35vu1WMmSQdGw zD=Hli9TovmF`5ry_FK?9r}`gIL9JPI;n_WCXukx#5&uD(u1KTNs0?I(_%pm}-3c{U z+Nv`$<=13!SZ^_m3g0j=%S&Eq**V6^eflCzjplqa(WsGz6)Wn>0g%Cph^rw^6Bji zFUw#(^-a%)Q3m+M?JPECl0e3!NtA2SI#k4X-Vf_Ph59OHuSMw*grgADreM>BFm^bh zT7`pfcvzvicvA-oKh9haFWg0(hJP0RHRm7=oJb~dY+NkF;o|qY=$kQO|0-0)bK4ZQ ze7$a|v9&^3qG-%XC^fWccIZ=YPJ)|dW9m`SENsxPd@|wahN&{o=o0r+sN#>7QD={W zv@~1c-N;5L>e(|H(sbkuda-vXb-x_Ad8SJ3ru zM0_XJFVK6wCysMiJXi?(=5AVAQ5#exj6bmS`jqj^ZeF%KYTK7jGS z`nV5Ih9HZ8u~UeH2(mC@#8V$TAn)U28HGdxsNuM3-dEWLd3|Pn90I;j-S;_cwM81? zb1FGz2)81va+b`SQ;GZu)yTx4fBGB+v7lJkS>#H8 z5xR3~%|UQ%56%CcK2ol3grQ^3h0VDe@KVO}osO0dWN&+mmA|5a12bHX2~TetAwS3-;VxY*@Pcm#7z!2&XK*Rt+!8Jfh0`sJ{8PGWsEILd@Q{*(CQsJF_afF% z6_Q;NlD-6)V%k3aqz|Fn-8D3%ND6uyLuOv~4kNsXHSAp37(^{8mz8r-0N;DF|m+Je9@*xJpW6%eX~lH{Wc z->1o;;}?Z;Q;Im`2%a8{S!ls*fQgU>t_;+-P~N^Kp9fwY^7)AvI*7H-zivw=1ONW- zW|=E6yO0*oYaj*r{l-J@N7JEhvzg?__6*c>N5x2UX2VHJt^|j81vFjQrwB_jLxP2L z?7}~T(U+OtRD6%bbFZu+Qg46NkGOcJ-;*>>Lr=s%CLgC8P)8HSkdomDzvF1zH7Nf< zb@8(RU9JnTeS_yT??XQ{6`t|F9Mglrt9gvfrRk6`NB)l1;0k13_!QIKr3&SP$9)p5 z_7HkTM=uk6A6?X)^m!FX0|P2plV;A3U@AabG;2Etk|?yi|Lt=k-u{=S^z>Lr%8*Kk z>4)-pv?j%pO%=vNDA4bmujK#-^*Xg%%tc}!sZ38tuhoin-)uqoxA zwsb8M=2kYZA_A;)p%p>uN`dh2Zw;sX{U)g3-=x$O(u2Ca{H7K^9+*pE$ndf-gX8Zm z!tpPp5!K+xbJv`|@b9G)NxSAT5{#*m%1#PE9vJa!O9Iqbu-#NW)N9d!$Qdim-`;r+ z%U8e5etu&DPkD4+8s3tF!hR9YstRmqGjsIT4z!15CS(0a*-0>_l3MPTln90TIgKTV z18V&WRkuZ*A;ED&RpIw2jAsdsafcg1?cu9u@lQBm^)%P#k=z)%pzWLabVnNDOf$Ih zXwN}Xw58>Oa2L85`mz~sSsFQJ(y;yOT);y35hvzUPwvA0V4f%uPYi5c>bS2t77V3| zHm@Du6+yD}jeFD|rXWMW=$L|L02XmW$jM^DAZbgE;+EzDjK>_Z4hShjRYT`3ipp0| z_JM?kOG^*_IY;F071lw1(G0<_m0E-s_=-U^{mQ3HYWDIT%O6K+<@9*qIqLb!R)dEVx3t^bc{D zgxtm4%yU6KDaKON1{V(nk*_Qy=W!{$F0OPEIuu-s z`L^!B;G6o*wN)S3Jfqzl&pL;a_!ckr*+8haxl*+(mIqDxO!wYQ^CC*02VOO#kw{A| zQL;)%@w{SJqp7t%8K7%fMnv6@_F$0*Uw8A}`B+c28I`cgK-&FKCU;SP@W7=j$-N#7 zdslYtb|t^V!oZSJQ@#)cSDNPd^SpuvsRy=RovBc%%Gm!o&H@IsNC_?Uwjr~MObqK5 z38G3HHlpj)Ll-RlaQj(JVDnW$)qXBFbj{BFQR}HeLa+Ho$V3{Erg+<)eMABlx|E!^ zo|vJ8Zr%F3BrN?GMnC6xQGXtT^t3{PB~59_`76Ty|2jGkf3E&7j{BhO?3J>zLiP$d zZzItnQZfo9S;@-ECJkh-N_HsOo9w;!$lfzMo8RaA`w#Bto^xL3`TX4bxbJ--HF(F@ z=v%4s2f91iMur=ip;1_4<16E1=rI-eZ5HzhV(;XuT(+cv#=Kk7?hVc`A?=i$UiA=a zogO@njK6{?HOnguST4YNn66}uo(lAt+dK^YdkxBUm$?~>c@W1U@%!sD&(Y&vuWxkO z7chw4x7naGj0v_mtExMeMPOOf{Mq*%4M@!1clmrh3r1DKcdpVshmRRj@o@{IFxi7N z*7-^y+2dU%ql_X<5HJ2(-nE9laBr>pNNEUpHqXIZZvic1wr^k1V}Agy4!eN{R(P58 zH>{-pB65CPkq9dSL?ECxfwMCW1AZ3$mPFBrq(CIp@Szp5xN!Lik#i3=U>WOg*;jo= z(sS(tax^n=Wcv276*m|=UGJ7o6zic|h*VRkq!vdagOlA>Mk(y1Hx+KE8Epxa< zdu={1!vq==TUtAgaRF>-#sU&v%NqY%m0K?yEp4>-*CU+yF& zfu5Q033JUuBu#?n_~$V(GE=@y>RMKdLA11pPV8wCZ1ejxE80DU_S;-bYGI*}pI0nc za5MmaJoC+86Mck==X#_j#dXmBLa}Y&tuW+0nqrRnVg;R5!cxMj9grVGLQ{>X;1^Xa zQIQBP)H%)9u5t}PwfW~k)HQ(!?*#Mo@)IG-tM;=485a?CzT4FqW^7!jJPHtYtVC=K zs|Ue%LXd6gEW;4ZFb1})EQXJjs*xaD{GrKG3-lP?RcKgphaBQtHtVEOP^(_>Pdb(p za-C-_-rJTyG55nl^4Vn=Exz0rgXa$OJ%eVJ&q|@hSW=3lUJ*hn1E=U3cwpXybQ5Q~ zA6lbh1}yC-(Ao6m$GiU~VUf%}NqOTZY>LhVp05vvVuv9s34JFdK58!;Mbe3^FOKly ziV$I&pAzqxtMUrs4sPOcbx4L$)5-bU&zT^Cy-241avgM0sKnbU2Y`)pLYq{B1Y|r7 zBBedbg3jA=YwPoUq=+IlBa2#aRs0opG=? zy%Pv23y9(?X(SbIC%WL3IHsEJ06jkfUxgC9K{A(2Fy^xZNLSwQL4*G$1~feG32N8g zMbb%HE@!jt5njY~BYs(Ps1D?o341;VEg~a43lnF-bdo1O1aBNx6F0VB?GeB)E_POe z-VCUZyfweUl?ic%;q<6=2`0Z>XLNf-3hTmN0jW~&pg%{{0nc6( z8vK)wo}~yt0*h(Dwk|#7{>uneBrb;N-3J=PCoXWXyMV+(RA9R*!7=E`dvvzQ?RV*q z0a%vo2~%p1K@@Ut!oIq;qDPh^#MNE#7<55a>bH?g3*wh9BOXl)gB_e}tXHlmL*GLo zj|&SjkZ=5E@G`*{D8(<`8r+S8kr|#-?(%UMvOHL_uv&)I^!yuSJL*t@hV?lk4WZ>3 z?y&zk4ftANBFjG>1XUi&Ge$=A2oK*RK7T|!^41nm~wA=9R&P;oAH^WHZp z82kKCzx^jUbiNL3T+u9qIX+eA`%397>3Gg zI+k~msS$0ENqy5yJnXylPH%c6gp11}!$mCu^;K0ygL#?g&g_?8@r!oIB=pfzwI>#3 zx$=o0DoQ|&kJ-B<2yjHN20j(MQf;}JiRCIY5?Xhocg@6 zHHIcqCzq3Rb}+$LDfyeg2nys&vblo}ApgprWJnx{k3ndb(qv}6#^Bo!-G<_2>%k5gKD;vn|};;|@Jf_W|IC$+i)?U#+4#pF2= zaZzz--U$aJDW0d7`yzmFd^Q!y1$~gMP^H7m*5?>R$v}WFYp@K7rFehWv?rkV#)xOh z%W&w7VmmDM^@bOp*yT!Nw;`m=xYZ~+73S63Ynx&jq18UwHuBA5*ni|<2fb8KDH8F> z|9B0uC4b*&Z}|b01v;7u+N#jz%w8H%>x%H4i}kmbreVM7R&;fY2f|OGj*Z(QgaT60 zpu$IZNW!!sbHFwRsn5iVOlVMG5N?&SjI8en5;7TSpzZk%CniKj=}MB2H{To=Sfp#D;=eURE3 zlyjP+X}WjNL%(a4MHmWo{uKc$kF%gIKc4e%@2>c{6WZ>{PXx}YL2{kQHSe4i#H!(XRP@6DIqH_J$<2Sk zfVWH{ucKH$qW*HVIsu;-Y6w>Nxy|UnPK=yODsch=Z=PP;e&G#2nIG|t21`LhbuHDV zTLknmQ0xW_8$rhe)sL$|51_@~M9V3Y5%Snb@{4%mA=~X4RpLXViv&ASh~ zq3hi_@2x^Js9@tSktA(_Vi&!QDb-HM@#8ai|4|Yf(1*nHZZBciojpP0;{iHricN=K z%LqU1&8)gg33SUn@w6J?L5vCR*4Amc=q45FhW9D0401zj>S)X?953I*

tv|fV=^(=YyL2*d; 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 Q__vP+4gheU^0oo|4}U81G5`Po literal 69508 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 diff --git a/src/main/resources/com/rapidminer/resources/template/geographic_distances.template b/src/main/resources/com/rapidminer/resources/template/geographic_distances.template index 01e5fe5e4ed0bf98298f1630f423eeeecffe365f..a97eadf5144ae2f13642874d6d18eaa8eb2fd4a2 100644 GIT binary patch delta 158054 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�?8$%A?`$T;W|KY?HC^c} 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

;o;K$BB>NQfo12NrHgr$*A-1?5BS9yKD(uV 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

%hAk7Z=;Hzzo_u%yf{(nZ^ zqlFsc4He0s-=FTj>I{@(P?4j_k{cL~peiXur&^-8! zi|x#sJX&f%Q4B$RF{ETt4N5YNdZT|frS*2V=$*Tb1 z{MZLpz$tfbCTsL%$bnS2`Mj9TB&305{4J?mBPvRWxI_-GNMvo;ns2M#v9@X9Mn8Gi!P8bQm2Y!_>rmzZ2Ff)#bZen_&8}p(u)trbs$}XlV<_LR zfogTq^&4C%lXy)!RAhm@55aKuMZieV-fX*}YAYx$N#2qp3$6ei-qDQ28fW!g-6wf_ z@dhjaLbppVkw;?9BA0DD$LaaGUxUfFDuS(3T>MZ)`PKopn#fu$$G;EPy`G>wf=dB} zW{g$FO{&6_Q!NH+@GQb%8NzH}l_%SLY>#o?^Pp>P)+ygkbB!-hZf9TbXGz-?L%p97 zk>d|JHEi_izb58@f_?(wbCBp6Z5YT{_mGZW+v(LS^vH=UB&}oo9_w!Jms0VDsGDUx zFDH&IBNLFZ%BE$)$a~NI?t+pZ0QT`eggQR8%$I4AztFhu!4Ty?b2=%~bTkxf;P`D? z`Ko&g6=DxGgn;j#_{(zVRY#X{r-SzLZtts$OX1=I2PToB1IYfLt&p{A0&3FoRdSu1 zoIwBl#K+jnV5upCZTkiu65$o$oo9pTzb6``a8BZ@?dVxG;+^s@}@hcvmRIvzvO( zXz;6BY2(1G&J=oE&q>dSIMZ1TU#gxw2dtRRmr-o3iyXq;cG2x6W_%Y<_b(w~*-y8U z=lBqR)#f+TD;09sgn%$a;tsoVw&j)hOa39smanf>n1TZ-VEAK}5AN%$Z6DOI?ujFn{K?-lA8~QTzOQaz zmQoU}jw#*}+q5#w?w-a=E9pnzOg2X^le{{cAGX=t{P?hbf%B_RU;X!alVT;LD(5Nc zJUF-C&5eGd0VcO~R0u;mF8YpSx&{vpryg%#*^*wFzwcxdaDSO|EMc+@^4QGc$@#Qj zeNu~NNOKf87CLaFieS+CN!%x~?w5<_WpVDDI{#Ido$S?i;yI5Shi+Z-)yw?U_?bN8 z9FxXUs?E6DuOUXVXq0Y$uMF|`LYqn2SsrB1pELOkaCrCEbg|jUW~Nx&HK`0;@|!f& z_@gA)=l(+=g{#L7__|tKLJ4kgPPj7T;?rJGBP_ zzW073ch*nEqXs>$1juZQo?^7$#5o8yPbe*Gx(mzNx!vV~w9-g7bE||H!DC#hd9iWx zI&~}+gIRLabJlltj^0wJMNpYrTI`+|jvIhDa=|aH*A9gG_#=E|Qqrv~kINJtp-vRZ z!<~?lGGWv@xWSpIz&-!M6*cu}f|IOkawSwoU8_IOd4NYgeIw{WhIamZ>AZ6u?yqm{ z(7*hPH{gc>8_}FyLI2`xz=*v10H0|(@89}5NKT`NNfm8}^2J2?&@L_f1>M9l{EsZh`19u`g#ga2Lbim*Yct{k<9 zrKT#5L)SNFp7!Hy_xI}dz4;`mm1=9hd#nc_Y1GlQW`4mTx_dB?e-&U*0k?}A7Tn&X z<9+#UhF0HmS8HGSoF5C!{2Em#j13w(Di6Bgb^2I+#g2-4hBxj4Y=nctB&;IAaM7BT zU$&MTNI=ftPi;>{Z|+38bFPn`iU=&dB$hk1D^2z`WWM)}P8f3gK5qYP4I|{1$#QsN z>S(b3tw{RmMWLA}cFjnft7QoUzRYc`q%!%r?pB3X?{`MTZa=;pI;E`BM7@`@IgVjQ3v0#Biw{l8mR-8e0c^XWHKU z&1-8&*7PFfB%~Y-=GV8F$CKFJh?Om`Soy>`Ob_t<2sh`sFagS&`Pg_; zblShk%juVlUjtL;0%$t@7)1)|3Fu|*|NL^L75;k^@4&`*hLqQJZZ%V_=!h&j2;xjkMhnf{F570`cb6sU`0>8G1 zfMy=>WrNzsvswMl-^F@}n(e6ujp76Z(eAqh-?B?wNVHN z`tUU#ccywg$SXh3tLKW|5=E6pknY^_iP~p;B%?@SKYf5YZ}6=S;{D|SpJ17M@{MCP zFfsZr8?cU(Kaqc{G8A7@{^~G@(Hu7rm{h0S5u*7$LW!SD@#zY$kqXj{(_DFB;*4Z! zYwyA8rLiL#+#bKm@zS8?cw&Ydv^1%&MXnj>9bOMMsf5k^piAisnP5AG<~#7;Z}-@- zkQV;<1nLw2yw;?%8rXJ7x+u8XaRp3kj~rtLFr`oWQv~2Z|I{-Yb3URE4SwmJF!sJ2 z@_1ozR_>SPskY;JI>})!8&VEM_OO&5bi0|9Xxsela1d=;{JK+JA6oo~V3pAFq6JBo zi`SeFR*Fkm&ibroy&+0XUiEiWhC6Uo8ScjK6?Rn3keYIV!<&4)?wgsi`@oPSEL=SANeA9e`53tYW zE_o%hq%R?LvLWHsT2z}7Ju1GOq%6Ka{AqIg=llz=_4S3FNpfXsceN$ikFj87FPATG zuLJtoi+1;yCda=;<6VWqCR+D@Fe_&u#moEsiKPzokVIzn{wYl=M5gTu?rc=k!@M_J zc)F{9#uHqU-=wF_pPD;6y&t=lejkO_%&XDZ%x?7DQ@;U652!aB&6mqN@W!I_J5N17_zt6 z(JxHJ_8BOHQ`0bUFEWny&!1R-@%VRzy~}H`;~U5RdOP;RDZ6+L_EQSJOJ12Nb6h?D zO|wAnL&2rjYi95%u6)aGIiJqDyA-QysxwiB6PMl&VxO-arF~?d;=qyrUp4Txmgv(ZG94s^ZF} zfYoJOSoJQyW^2ZrwBHsaEr|F|J9v1&>q6bl#vR?CNflmV<5B7!a4{hET^{!Xtd#CIYAVS?d2qh^-$GqC>lityG?R0IAcj@zv~5cureNw4Ygxevqqc1+X8 zSK*BY4Kd)oyFR{h!zV$4cPHWLK-2Y1b-}FOYw9i1_j+yj#PL?| zW?x6Tq>|#Dxh_pmZ&{70J#yUaRY?+e$~)jZ`)uMi;dFlA?E1^%i^R$Q&GSjg5os&f zq7In;$4VFRMZwj|(>L;CpX!=yu;pTk?mQSXWXYz~_5Z?x0K33XEg=8=!}(t~*0$HC zcg8Jjr=~mg`9v$G9tK?Si9mExV&lP;_6<8H4^w_;l=;Mybh@*b9hv`k0DCmw4hd)1 z2i~}`eM*(^J9tqZonBnF_Ru|!Z{J~LD)@rNg;r1;(`?Wirjk}Cm8{;T*sDbyDxk>u zQj^Ga!vu^?8Bn{MM4&d1Htd$&jQWnhbv#`QR9c2>3+{&>&Xeh8_&oB=94Z2%y4Ocma%TpQSS_VU7(!W)c+hQ`1(I~RDXM*&6Rq~ zhfckMOE1^Df9$l$FPiO`P_L23XF-LZlTHF)?hVG;{QHJ-fp;xK!H50P+xRnY&~}J3 z7Z%oVi$H>^cVhMAxm0^MMA@dQ4|Q-?sG3PT=%NJYhzpd4c$kXlMlP{ z)h_`;FCPjH@T?s*F>4W%L4E7ny+&INw-LwjGfbpUg~jf#+0{GeoV_Br)w(lQb%7UH zm@ruoGuXg><3#rbY3G}e^pgbe4VPQqhf1 zT0U*gk;AhWvpH4iQJ%R+*oeLLS-v;PbNFeObH8QFW&h-ry9w~~{bsd0t!1rcfq-qD zir^MMe)xJ>N{&g2$2&LQs3@kmtYWMbYuJ}ckqi8OSJX!|_LiJM)NDnI!7+sj+e7do z?*uM3UxUMdz)Ousom!m-<|SYn;WwaP!NTOlXf$>jHS_v?uhd6%cZqpdffX!N;%;*J^?z+ar}y8QINZe-hj8~ZBd&y-kXD;IqCnqwJ@^{$QkIuiR~7_4 zcvPMyt!QjI3TY%)v7!#b6{6nsaRuF*MW5`m&n9)etqt|xjAk!QTZ_Hwi>m>IrUpp9 zCFa=aa2Ch~g+GJAtx1ESp|WfD4)QyDnYmc}1p}O5XkdxAu+M+gz>;QCQ)@Ujw8GF{;3&?(O9w>{M?0vaqd{6UdXu9fgQn@g#3)edA74}?eI`1_t^t`8 zQ7tMOnKB8@w7Bm;DMc7}0&_f%GF!5C`mNmc_FQxv=+ByE(d`niqGpxqX2|29S6226 zNXhkSa}|FRp0VLrv+2t5a@s=02P1p{U;?HnVIV^%DQmvscHK(f6;30ZF(mU9cLdv)^W!!9H+hK zrtvH|O~`~(X)D5buMs+7Zd8NjE<^aei=jLzA{b{eBmm!E(@Y0>d>Z_&FRv6)TMX7h z43Pn`>-A~2GSAkm2?XGXaerMyq{ZX#^UGfBIkb6Su+W1DO=``6*EPs0?lJis)$7ZR zAaQ)e@!al_uj0oqxX~!l-G-x!zfVQWjoe6eN%hUo@F^Y%4WPZxiPhYTf&R4Bl%(JB zN8Um#nFCU~&uaDet7*Rah5O@-w+uS2v1V z0LN%)uF==(-77aihoeF-osJW<`Io57#gKa{%{_vo$h<-Y%x+Ejb{y z`b)xk(|%fUef&pytyq;rJuQZ1I=Cwztmk$3qDt6b~5eny~d74Sj8iT zPAw;I^Jtuvx3aZsX}$={B*-xuI3*DpJ~=;L%o-PvIF6;rQXymYVaP_V&X!4d-b%yw zd9xL9g2$v_d(soFeO>Wm{xriIptp~1f=sxFXCx~E)PJErI_(*1y4G#jo4I8`R6Z!B z0UXoGCjr-HGyYt2y+hC;rvCex1oEW!V=D(H{!m0-GFvv9DP@&5fjVR2Tg_N6g8C1a z5=mf}=A$O}H{U4r!+3Vd1W7mVP8IXu)lHwU)!dEhQfDixV%fvCz;u#rp^}F-EqTQA zOGCJ&@LqgQCNf_JD>xk}xqY?1)`L|ZNVM2rH)$P{X4YWjJrMSD*F^l0Bl;dI{2>$l z#aNV)5~a}ue99`9T2XRpSF;MNmF9W}PBWkfZL4c9B>rM6#D+E+k0Z}nId49?&kt*+ zn+QMoC;#gx$@X=vai62q81mI0waFEOCx3i5e;CCgtr}#b26OHB0=Ej=O@t9m$e|m}5ah zP2872@t5+bGaln7Yc~ny9AF>r#iL~?^E=FZTIry9oFx3elbLSz)P@~hHL|y|KON;o z%>Sty>8u``>YWw!T$ff=IuiNP-6yVW#-uT|OYIUe* z36?1tp}D~VZ^@YgzlR35ha$e!9dWD8G0pu49(2|s4*c)9!Tt`tG$ZMzra~AGYFG}q z*UU4WT3XC4lH0v7eQ)yf0_GN8(;{S^2fcMFo_tM+@|i>luL#cCadW|K)X*vKcKRY9 zP5ms+wy_gSzc`d9fa8T^F&R`eW1GY*J)ic+)t|R8*xo|_MFh8)I3SX^Qr@-iDOqWz z^cvVoJ8EC~*AgvLqFVRx0womk1MFr)exGi4?W>QvPQh90^ayKA5=mHdX8bGtJIHH} zyJGBGJb-iyScxu{JzkSb^CP5Iyv)&F|mvJ*#K@QiIj`j1W*^ z*DxH`ORISe&H1xXs?~bjBa#KVMC;OymBkd_-S?7)y9bEA!11OO);IMz@$FwxMbxJY z)3d7-wNt$vA=OckF?w?zyNwl^z`|ZYtX-;(O!Qd>&02FNB8Rj`a(!{@eToB{WaIc5=X2(Z1 zKok}HFYe9PbR5{G_gLq1WANgA>1&=1=0>`QfAg?e7gVleGstbs)VRXo6ZV>8HYJ{) z>XgWpT?g2m+ZCSwOa7tzk#Qk1tC7KG`;@kdS{D(c0N9XW(!Rz zvz2}gUB2y^qWYooJBy2!(ygudx3^|E{^T+^yKX|As`AV+VB!HTTGpro6*uJfYv zmN!r5NTJ++J1Hypqr@wxZ4D>bZQ#Yu2`?3=^kiP%WKPc7wP>EePHc(Po5{8k9aJ-6 zQk7BXcK^r@{F6JZe1U!TX!XH&S9zfhm__D|f$Nij;#8C>>4>>M&c^WHRCl$_)quB* zZ@!th$($?qiFcM@!LX3utO43kM}6{v-=)z--jezF$`Lhu!ja)6xUPs-9EtGj5iz(Ck+qePVn*Q5%(_tB z+WAi`5r65a`bUe*+ip@s-XGBRCeYwpej>Uh(pA7VL&(`hs4dt2 zUY~7MAdXc}1TwzjR8ya!J~>E)T_F|~Hr#Sl)M9(hm|EPMAx6it!!`@nXTA=QIJeJ# zd`gnc(2_chFRKGGCA{QnhI{rh`}X6j&S>GN$DyFKV0zkk3!WnG^Ip#VBLx#Ru@<8p zX%OQ7XwY5;W>0vu^wF}oBmGLFrmrh=>;Le~%Jn@$m|>^SCTSl!OkW<+p{ zT0(i~(1bOQo>j61!S&E@XnEvO;PGTb>pbozh`px<~c#A~+|4zDB=}Fzc z^mWTcdSY2(W;|)5=Lh81sqmi8^eu9m=T9e~zO?f;)Npj!k_wv_MOkEFPZ~sySRuMCf&! z1hR}`Q>gz+I?KTP#G3z2AR#uWLK!|vx0)aUOoWoijvcLUVJ@fj81bR#dr@KKq$ln# zk$~2Imt8Qe!o@D-}*{s zZ{*nhl6C<+G%Tw~|J8)=oq!0TZ=m@1WBZf!mm=f;&(N8;GyMl}yb^M*R7OH5B{?E7 z*NV^~D&=PG`#y5bzH-Z*kUOd5=f3YP_ndR&z8RZyb8ch!?H}0l?Ah~tzn^{H@AvEF zap+OWp}zga^LNCT`QAc#E~X3s&$L}=$Y`)9E@4CQZvQygzc3nYwk%2`ScdJE3^91* zGEB@$-z*>Nr)KMo#-@;;vg0>I=dOL>~b)@BD4q!gK+8 zXsYmluVHqs>~AQBwgU8I*7V?SX5&HEN;$D-wQ)cOXMHkl2&9)yyP|1b{%(KXrd^De`sQ4dQFFDgWATiXz9pJ?NK>+&0}_SCpE~ z6;qd7nGVH02KR}=2|#2Pi!3WBt*je;hL{Ku-NB@0|5V!kresA;UXMO~2v6UQ{@s9EDxez&~%y*m>)v@YCfVw#mdhug0kt(Vi26r!@?gK zf@8}A2MI-?ne%k92YjOYnpz$Pjirag1#t)c`?(V0JrI5=fIo7>S-*&nicB}Io)wg) zfmuCPkB>OhC1PCGJ8BVEkNkKt?Z2JL9Cpl&yM>3ql3a@qzl@~{%kvnFvzfSY0jt-B z-1jy20-Ap>{Trl;lHS~vfeqY+HcZ0_Ar!XrsxGY{zobE~azj+aG+{!j-NmJ`HJ$J! zaMrOpsl*jff3X?t4;iYD|BWFa=bV0!{@!jQt|i~PYhWv_xum_xC)ppa?>_Nbl?ZIp#Hssu3}BYDZ{-*MDiqq= zFs4#;lZF(CYn`O;6r>02L(|V3Q6pM%7rSZlN^2aD${oFXhhV|#ffSO0pLg%{_)<&t ze!{ajqo@-(DSz@E7fGb|gN1Lj;tclasXVfO^CQ&2gA(Jo=xsBxeZ4$Rv}Q*HZ}8-H zV&{S_X!2NCe+iMB<8ZpE=R3Lb!*yAFjHW+#*4nSOt*gAR*9~6D9N*T=Ni;taZOUrI zqXB8cr<{!*r0}${fQDtq?(&(z%k3F@h%LPAlr_Dh2m+#1!InVdGyl?_vdMWDP249h zsVC(9sXxNk;n*DA)sr>MbO`M}h6abHasP~p)du+QXuZEYzjkpl;A&L)X^7%QOH3pE z6j?nR5(B|hT6WiM#-zJ z8}AwT#hLBsSh;0y9-tJd1?YS0`T;g0rrTe9rn+~=%boGT3ZaZ$h8XT~p8I)HiWBMZ zAXhb@=ie!Cyz0XKVAaqM(SB_{nYxi(8B}=B<$AbxI zR!24rIoLb>*lzzm6q2RaJ+~&h?IAzdXAjILxOD-)A8jFt`ORBw7>vjKBtQJ%|etxk$N zjQmb(N3%4wUD$zt-#cbZ4JWw4UUO@k5>FhTHXSatUQh}fPyr$qCHv%4B@APQ0<>RvKnzc&w%rL%sr_4mb{XUkP^MeP~8wH2d5h z`1IluOiY(a3ANF20{NCyC$Vo|pn>-(H$Fs8M;|L!{YJMnOz7f+c~U=XeiMe6FqUga ziF?vb*d&|Yz9%4Ei+*hZ*{`c0U-ygkqeR^QI4u@UUj3dm99sNVWky>b%vh>SPh z+g11G9lEnl1qlTl`>y5#pq7_jB$+|a0!|N{~4e0P}Y{IYUc;qcDIfH;rzJp(le96 zUe&0lC~^I&XM-C;`wx$n9(ynlTR2UMysuj5aR#T_F39rr%xOfK{(ej`sN`01D*Q#J z?8F0M$Gvm&)i)J!mVIx}-I$I!D@%v7%*VAQh%=akP7S}Tu45@Cl-TU}$et-d8w&cj z_7`Vpv*--6bIpz{P3?4ZUG(fL$?3qNv)Al-nUr~B+NQ}vtGA6hKH>EmjR-r>j*s7K z9a;$m(WV0m-J?sRr&L1dw}A-X40_4y>_wz1&wFS7=@|cJTaXqquq}h7s6F z3d-FH42)?Wd4f-y>_KYV2vNgw&RUcwlDpJg5_ryPC+WvMz!SZ9GC06${(nhgBWs$x; z7@B)FH)WBNX6PwI+C4rnKct7snA3upH*+20vA$eQ2b!NVuE2YsGNRMJ4jgUq`r2+wAFsvkP1uX zXF8$_t^6+Ga=Uba&BGeFY}n!QQXdYn_9FP=95_Piv@JMk2g=U3qRJFs>9t6u*< zutQwyrg^`2nK?|D5J*GodOU^6)~ElM)DsmOZ#r;nI<*;3h8THjZ~qXGT9@Pco~O81 zgS~wgK6gHXU=r_|UyimdJ5m|RhnN22bF;~mAtlS8tm-|rT(Ay7XWUTd(H9jqN2XKh zs;>bPLZm9X9PSq?@i*<2lajW85!xOoXNO!bjdZdXgqH`Sj@@7zgULRh`<_W0?*$2$ z@p+BVkdfl+@jpIJd$6c(8M`c|-+&jUp<}zOOr2%y_yYXKwcF*yFWFdX<-j7or6;iy zW}tkVq$YHO`D4AQgJdx(d!04C_sxz_ZGe9lmn~OxeRb~a3FuUC{wUPgBJZKqt2ANS zQMFjtlygqtx0&~o+&gBLR_~MiCPb7j(&i5jyZJ?<302~cbZdgJfhQXsnVN17zbjfM z7Gf=unYx=@E1D!^mqlc`8nr=QF1(O75*`0r-+LR2tT;jl7CiR%@&%#6su2Fjc&`nFdf6F@!?6y`ppy;srXZNr!?Bc+kfVI zB2TnaNkT7E-&lxo9s|+rPJOhLl#mn0uAeC4t=lRu;Zi^9DlG+2YV{Pu(@8TU@7)i` zFD-&H3W$=BN#ADeJQP+(kvuY@5oyK>n1zRn}^Y zl=ev1?Iuy&1wB}OxebxkJ>naI@p*rDYwE7eJMr2JQD6ugzd((Gxty|2)g z5GV0@nNZwJKfS1(Yin`766nK(C)KyV%G6fyrKm!3rbCoV65kP}&OM9i(}ktr6>5yImys~ z9TD<1m0`5buGXk=nah8pqXw%*F?f4#dfIf#}G7}(HA1(h+pr;7O z++Op=uWVi~%5*L&XUvzVh%%oL!JhNsNmaJ(&oKbSTU&&@U)P-LU}+^}gro%x*(Qjg z%kKtQ04MjT^e0UY4FLf?Fbrh5E89?K+aeh|!@g+LZoE`_C69D0)>uD{fJSHz}zG*R4+?rb86Z6bL-s;DgoGU#RedR)4u zh1H_y_))we)lf9Sa-m^Tb>cX`g2ewzV@bORckN(xq3^gV8?P@Zq}nuVaF^~##A;mc;miN{ZuV5nZ{ zzFQ^Mh>UPz2fGIs@^D;s-%qT)&t>)iC#_>8OetKgY?b(|6c63|=#|td z{D%;C!=;rofxmt|U?qO}IB?c$tIEfhuCkSJIEhfk zAM^6HmGa9NOstM{MaB4!MPHYh4EQ|1H}Sf(Y;{XeI)hT_eGaj?ArF@#ym38AvaVufyF*GvtS#@;*lwDR0{=P~#N9?s(|+ zQbb>ubk_DVo$leS&VoCTyW#h{~B%EYz7z(EJ#+UH^25q-NOF3Z=a?Rg2K*{{pKMI80O{5bOoE33zlD(I8!U(1n1raNAoTO_G?x*NTp=eVOm zv{dAS`s7X9)C|M#?7lMWu-mkNhFKD*JEu{_95dU|e_rEs0%_66YAe1no)`dq?b7)G zf}4~g9WoB2*`^D&rP`m3=7gl75^YTewzf!hnU|F(!d!`vAsF^UdKS<6Uv6E2*b&v5CIQFa+jWs^!t71^8^m#X>W}3W@$~2O z|E}P#VKG-LDJfXCV7;W@%PON20h!84*h1KqzHox5Ip*1X3(D{&@`)beC>u}mGaV-A z_@~J%&-*6Je_vfu1Js8i%DrJFXM4)|U9cJ`f?p54;owN^^JcmO6pVYbVrQ?x4= zTP1$^8w9gpKP57TYO^d8WFR0|=-J=9n)CI&yU z8FYogUbR;-G8URtCdESm+P5fy0E;lw#^ovnZ8Cx43Te(ae6TNxN0hn)}cGO_V@6CU{y;D zD=KyE?Ld|MvBPuF8Rpp-Te5+e$b(OCKJUv#qei&%iQv2LKQg7enP$|Lw=||Ugz#W6 zPyp(5pq=9nu=>7HiW)=5d3-*ycZyf#|9v@L((2-PWmut3=7nPKr9-`&)bxjL7FNyqMa(EikVV$X6xAb^->BdtGA|9;QwlodAHloR4 z&3?vWpF{8KFQwngejw@4p)C5tnLj4$#0 zwCR~wP{}q&BvF`K6_W^HVyBQ9y0R6vvGXvUS8sYnM#(cVAV;vNPxBp^c6-qcaL6zU zr|lKbbZ9|SJ4bKIv>@xwYXZ|Ifvem4)WK^zD!|f{o{a&cnvHGYZJy z6r*deZW(22xhpf;Rht{Y$%fj`Kme-dL}J_G+&3|%-(vS1Pi4`Cte~g)36<}cHRg0= zUdP=r(YDc($dqLOlr(2@Lk2qo-@zc)k8)ESx~zBqU>GrPa2b-DU_hiLfH@Dfd%3nj zo$OWA%_a*i(Kp>BtxvRaMBi5DJnJYMqq*xX%i6gdxGR`kCLIHRW)TWiLgkbZHKW?h zyoc;Io)J;iVSn!amvhT@_Xqle6OFtMd%r;7ns;EGOE?HhwD9>Bv(8X#k=I=FNTyb0 zdw<}2{F_Lh>!&o09KbM}AGDA&wImwE9z7rHii4~Rr`tKlQDkRkx;>&JdlQz^RXzI{ zEJL2>e2z((Q1DEQxKVmri&v(IJ?{P|)URD%w_eTMSUye(H}CWHf6qx+FOiN7_ob9f zseyr;HlfuxB^KB+o%jRLuW#^cN7xprIf!&XJhBzn`VV0Xsf zf`f|3&x$%dfsnM~#oLb#BRAF_nU%sFtp@iLW0dbHB*~zn2Z{x8I+$qMGt0120!vlR zD}SmC4s7Uq#hS`@kbK(CsoWOuu{ZthCjnoKOsj)D zHazTGP{Ou!Zi)XmHg+B;HVdLjY6%lDh^;MtDy@G}XI*`y7nP{w>JLfIXJn}Rq|m&j z1L3zRc6m7UjY&y+Rs3+ol?YB0YnOB3CoE7S5d%-y+Lj_;*0J0v?eI@g zTI2=F8YtxjfgzH_w4B?gAGG$(&hLnUa7OJ>>Z!Mt$(2pE4J(25#?=>W6C);IdA;3p z@dgssvZ=Xp@Wi()XBaO(jQtTr-nVMqEET4`VyFWFP;v7?ESgHLJTCg1Yg zLVS}bqb-L`@i+d|c)*m>j$P$)<)o+zM2wq zne>^fE8;xcT!wlHOg4pWga@TZK@X>Oh?n#`>BW(;abP+AzL*p|rnT%HsdG(DqRSV&d?jUGnb=h~?b|8!afg?O<^A)gisG8ui1Ej|lb_N2So7^y zyJEX)Y;@1Yzw7*&zCXf3r6wrqWTy)yF%{g@vq+RKY0-GE=lSK=0AQ^ob@lj!)>kWV zq!|USAAG?MU;9s+hUBbXdysiBtF2rup9eCteO{vbW_gXG&Q0Vwp%v)QI`Hi6<_A65?T779s7ncaLui+a zt#*bHXb#s(i-0ZyhgCOXL$kEKa`&c-=#y?Q?Pe$RTX>#y38FrgcaJ;Fs_mO;`oGz? zoF%7gX$tY185qJ6L-{o_2D12WV{+L}bF^B)y>hC{(N2TX zl4OW%>UHCNr-NMIuyX`!*#3*tHn&&*oo?8=%{svq5H8`-Q9d#m@*Raly)9=lh(EE> zmvg$ME1?8qG+H~@3teN~_=~%2{}aUED)McJje2s-eMTMt%l0+FC{;E+*WSZgs8$_e|U|;snsMT&FomhVU>4GiM9Kn z2wY_X>INNVyj#FWUd2NEdM3OiO7VdwDpNWTRAMM@$Gy)^s=kiupYgX3RJ7RIGGc21 z41EOKq7wrkujV{odZ5aqJ|Fy@JI~`oRq<-^cgtGaKKl!1TGtt*hs<%rTpTE}JUr&w zZoc{`oFE7>qN%w5>RtAezc?5?zubOd^|On-t&F3%Y&F@5ir}lBhDJFVM6p>k1o-y2 zwsO~mFoH!)4+3o6a|a!StO&xA&dx&sJ%yi-m3FrjD2zCofuWwDn&9UcRzac^}^qkpU_e#S|^T zw^hUSwDzvtIZ?bkAgL#^{&P-4)*4LR%cg~H+L+e|EKj-wj8Zmfpr#7$c5z_)@(q=u z!%Izha_0@J6)|tFAP=rdc}mudT1+Y^?FG&@e`(Is=Fd7uI1*$g#nI zGud3qODVdO#jkuSHSpLXolJn3u_E7KJop)(#Ut_Qh1coA{&(3|UefaPe3=)<41s8( zl*}Q>tQ1NQk_-)g2*4Q;`+yIuaJ08(XXH*tZ<&nEsr z(!D8(Uvv7}H2lkelHbcC1Zf%mmm^RI;){wd%HSqb+D!hQGg!2y-UhCAgx`tFk=w)+ zdRIP+W>-07O(rRF?t6V^ZBsURIomHzji5Xe?n{}WBmbZR_3|5bg*}gAa)Ms@7%vTr zT;LEKe$IaHkDJOf6_wj}E;6m21V9;3{A#<)fJsS{yq<5V%S3n}sKGy6|18-pUK2+`! zCgz5K2l8v59kO-Kuv|jYX!QCn-w_8$5_Vp{s@2cV`{BN)`hcYP$r2wH{x~7v&F85@ zwN|ipPdcpARtx!>6!4d0ITZ0{x`OrtE6|8ne5YHP+C2TL(#8PJpMYy4$$%iJ?R28T z9zL+>^k&t|ne_tR1tLQQsnfKzTOOy4KHupgdj)!i8gbD7a!Sn#H;an;#~!+NGC||3 zg|95sPw2j&t!sNPqwqr14{Tf(po!p9EWGXdm3h27~xEIGuFe!rhx9%ms%=yr44g<&c;DruzeDFT4@H-`Rj zpbg`{E7V7hunQQtesIo1~R-Sf3do%hyH;`IUf$^Rar|R~a>SUT`KY)7gKo`4A+X zci@MC9}Xbb{Z%YW{a?Vwa(#LR1TptnVB7B#p~+4zalQFsGBKp8PKl$WL5zWgl?@B@ zJaF(Q{3FMEAw($~`G(OG=$wMiypO(OU;-sYg0a~d+8 zHcdbxe*41t@R$dTwtOvfPs4#)h5yQj%n&~0;NBe9PX7j<5oGGWYZ*@5AZ^N7 zMv;Lp?2NyD=s zB$tE~Gc0KyrbJtJ(|z3L-QSy$sCwy&Q|W}=DdSxzE!rOJRNd_>)-_u6VAw6mb77fP zDl+rGIkvC&ht3hnbF|iv)a|BF*N@L<_D5z(t#J9hE@g6FfEE!*`QF~LwTFxvO89}n zRlTF~Q^yjmb){YVJRk#WL_WX%YRXz>0eJOH;;=};(6BAb+0D^W%zug9w3q|}z7$xu=RLy&^tr?tf)cFV=iqx2PjmY0+@n`qHac(`q8$CLAT`jKv+S!CS zaUDg(pyFn$B%9SOLlLLfZuh4+JHQ{GOyY}ALsPeJlNkZ*uVnT_O&KL2>Lyq0U^ z!G)FU8!PaJo}%(_xT{>fC}j}VZw*su_La#S{Wx>{{OCCFLO+3q%-4vZnMfsVBVPwT zk{LPln>;>8R`LIr+5v@CihbLv!ULryrhT+>DwB!d#Uf-fc|fTZMtBaT>iL4;4+%ol z$5*jNmd$mgjHSWOa=5uJ^!d~01NF3kqTO7~sfvC=AvRgNg#$_Ox}(2;P44`IDf_a_ zy}Iu?A8yM6xW8HjpP@aeY3z5&_3FH|!>485Neq8QDRGU40PuQ=1q~2^w-$qRgYu4({ls9tD{^_QKrs;?XMR$00zdrL*PsmPI@MvSx4+x))QT+`f zUYa}^m#1SDci%hm;d~BImLQGIbhWX06GB;&>A2H>c9l`+gHX!82n`jxTP%#=SKMS7 zx7=Gnnr(JHE7=CEJLCzyljk$~W?W5Z=rLK~*~hh7`5bM`j^OJyylof>G$NWU-u8lf zf(;q@679dPpYsIgD#9MSWxxWngTif28`3YycGcf*u(z~z5(Ex@Rgo-SZHi0zt_p9C zWRf>ld;BAvxnZI2e3ME0jL|h;Zt%}7WA1>UjIp`ejxFGgjVL9#&r>g!vm}f$2`g&& z_^LN#3j?!&@I4{mdwEoKIX@#iG`RMRz#J?GutNpuKr!`(xR?pq`8h5tp zSRY)!kTHt&9N>EMZ+LO+mZXrrG$BgK&dV3? zUg@5oO~AITtJ%+W#Io&_HJ>dJbzOJtvK z3%2*MPmfK2uE}UJgT>oKKqxdi6pD0tYi&n;XN~WFu$t}muF;Rftbgb_B zfe2zgTQ>K@cJs;|k7WRC@?zj;caEfd3HE{;uqwIj6*U8v?WJ_eb(dYzq5) z;ve4Jey%Y#!tpUX$i+ciYOii|333MC4#p~9zwpYg=(g)%#QBUX&<96V=O2F8u!3Rl z9eLlZPGmAGRyEsHULMBPllRnd9O-^>WcJ6;-TT2?7h(F_E_cW1`t`OhoY)OOE6K&B zfHz(=d-CZf7b^t+FtKo)5%MZmq@;^rXEpnwxMk+Wm%iWW^Pw#RA zI|Hb;DO z+%hUXunA(He?S@y&n{mDNwm$!my_awM6tY!dr57Q9Uk{T?(i)=WAhZ+NI_?{=BLD8 z3uAv}8RF#-N~p@o^wf!NYtVnO-HT57fo>!Gw83UP5q^fNmv?uwvUuuTA1&Ro8Gp}9 zw}yez+|GD+{2xRE5!1I;dUHmN$KkGwM&u3taaiw8z?!`o>MSTvzB|ie`OLlnU@}N8 z6~gIc!Vf;!BU`LMUHJp?UsDsdGbTj%qhgleyXZO5rq9|01l2oMtt-$j@O~zL0h+ll z;>A9Huf!whR5V38Uy9s#WoJ8QAuBdGhf(L)^&9p=lPVio^f=1M8qNKf_+_;>Hv5^L z%SB6oPS{W7P|H|GSz1Beh{4EmptE~W>lmEmX#l_s*IZJBEzP7@Q8+1%(q3a}^Psh3S4ov%9km5aO2xWYGo>E2t1)1Ojb z0x&a_3K%Wms-oO&08HvZCFbS^aBSF4TcVomZp!#)YRlMOfV(H@`a?IavAWVQRE zpIzdEL+{}1hUO?r%@z5~tvh|F8-YA%|uANHR-M1@KuvCodH{a zGoOg<)p`lan3>1@6lM@d>O-iN?}OupXvMv)f06bxHv=fjKpLA~*s3$qm4=NgYs+DtTCay%a;6O=9%iD?u&D&&@Ptd@G7^ob_l-j13fQ$vf=>ai&! z*8|c0i(&w9eae@Hy88syp2+%bC0emP7maSCS&mkvj}CWF20IOh=gK^7yWtL-zeDGF zJY~Pt2*|`Q5O)jJlymkhgag_@yR46g64Vw#=TxA5&a#aPkFLe+GvY$nj-RMOa7XXj zJeVP84=P-^^&P`El>kXV5>C@JAWGlSpLv24n*sc`KqtW{aSyk1MJeL-eg;v?{)p{H zHf9Mz_F8v?mtFThEd1x=s-do=B1SZtSdC{U4DyUPn71xd_)9G%P_N*WkH0>whEAn3 z{$Tmbv887Qcqi-$ARHcXBE}~DJA_qu^03_S*NB)?@k1@e+GEQJaJ@Bw6io@x>enTbGUxZE4ai-r7$KVIjCwbhE8(c-~?grvN)+ z;3wxf8PsO86YWJgy~C25(ZE6XpM)YnmXqG!nv35n9w5*4zQgFh8IykQU*;)74`Xl) z44W_gYT>j|zD7+`L#UQ0$InqztX$b8YPu!=J}^6b5{KtPMw8U|KCKkY^F0HoC&7Lg^wPzx4TZ6;h|*cejHC zm6;S4ZXdtH`VH{B$y@t^`WWa9Kr*`T}>~wO_;rX0&>uQh!pqL`mb}(??RDa+y>d%3FKBI#BB_h|p zbVb5y?nCX7GB%G~Gck{scZV7YA}tB~3%i~{Ijdlrq-*_z-vjdvZYm_*6)l9beZsS0 znh@AgY}(nc-hFX;W-1i<{RSA>mP6T~in-nj7`M##dVvv0Y}^HCw~+rD1g6E5<3?IqW63tDf^R*G6cS) zu}AqqX?|(Ok!>o4{mr4H7a~&Jl%s)`=f&kdj|eA95~me}La+KA=g7orE@7^P2cCS+ z1SlPqD3&9LD{g)2hxz>XH+x_NFC&m_)-Us4xBoZkCES8{7buDrD@fn6fXLur4q=Z~ zpb?SPE7&>M)l-K%N_#@&YULj(p0whK(X%-3T0=Fkk;LF-1d7)mK_i=00+y_*;lg`- z#64c2vi<;O!dIpNNvbHp9L7>^?pi8>lkQyqK6{hMf$t$@EXs~iZSC3!3XEc$B7Z6G zTeXHV0rC=mO=(3Y=H7QQirDgT*iW3+6OS)y`G(Vk3|jGD0-eQvX-OgR)u5ukZ9d~z!#%kF zyLBJKU8wvI#_~p6AnP&9twl__YpCYm9O6Z}|K^_5j{x6*x&Bh1Z$935|5AMgfQG;% zPMjHXwPlILF9#>uJP3q~hkAJH?R`dkgr{ls(*en)JMhybR#j3+PSoTIZMEJK(4*gU zOiN;{y=K(OCUy^wnwuh|AJFqYc8H1@o}9tbW!41bWDf6`Ma2^h3g&Ix1_K^*ENLYc zI?lCY&i*6PO9R72(tj9TaO{*}e46fM>>L&@@{ewxvL36vn7E-83o)2_B?{z5->Tm6vT zBKr;U0q<9u8kr7Pz7QLzy?*TO_Kz82>lRIs6%?D$P zdZq6x!1~KSJN^kFAxZIjhGLts01B+bNpSu&YZ9Ye`+9}7Frn5-s!3Stew2iGi1a_& zE3E}Sfw#eW-jBGdob~p_zSdQkO~WKVK8pc+_DEiAqlN#&fSa5L@`8S0o3X{a>J@QQ z3*EX&-7}_^YZJOj-(!8STD3hzv25+vjuHZ10GqB=OKqop^z28?s$A%l(w$#7FPlgz zEVR6#(>puh^c9+UYW4ob5rj(u)d4cl!(G(>@w%bZth_^*y``54yXQ7gRykuo6YW!> z*sPNYBAK!^+UFh$+BrcaT{^8tPq4mkaJ%F}+V-cL+GFb*7r3Pu7YltmAerAWW^zL7 z|4SZXaf>a6@?9FMb0yl7Z`)l?FIbMJD4eJq@%{8CjNcVk%}K)A`C(p2tXb9=n-$Zd z%bPcj)w9oQP?|}-l_Zz_(h#397h0=QlR9g606~V$ukL7n=(VV!7-S{cBqiDV66x9R@6cE}3M7z}B4lDE4P#))DNe3v{%ZxDG$AOQKW768$Gp=Py*_ znalgu!$;H1td~2He_~-LiARFKXTK<;m{tA-qYqI-rRV52IkFmiw*MWB|M#8&%5fl7 zJ%*mEG$^Uwvt3n_jYYBCukQHN`#AhcntfpEckd!mD76lXQM^x579|#HObY=C7*_-v=w+$i zz7{-UhyJMQA_=(OrLFKMF4G)j@j~6wJCO<9@FMH)563XX$AA}YZ-;smM?#umf+;2@ z`20%nhJ_sb#)d&Su*@O9{V@?bsBaxjzxmPgJG*XI&ZJ>k`^7y=1-Sk-`J0N&^JacS z$=92|tpz`a$O;`Su9(&As6YwN;kJ(nFZ%tQSk;GbE|dZPqGT5`8J}SOp>Te(&WCS? z38A2^UW?gq)c*oT~)Kv6qDNQNfqZSv#8J>VQj=!ME z^}}6tr5DVGqBjeJX7oC~*XrA`z#m3XahS*#CJ7`>8HIt4r!U1Bl5T;Wg%&2uc5JGJNxF)xlM_o*@b%TEbR7g86W*Z#q#)dNrQaj z51=)~XPGpeFa07+SLd{?XQFKWs^fG?rAYC7YIHFG&gw*dOguh8&L{*9u|;SsvnOpH zGie@|XD+^!aA}qoLN%lf^@@HvuO7*F8+7(z#2rOso%cVLA{!j<&2M(FOc}>}W@-y9 zB^SV_wx(=F@U!4q2Im+J&}vuBF!y(??>F&C&317zd!V~0q+1UQe;MGeu~U+2mYiR} zJqfU)05NxUxIaSq1#F+bN!se3EjbHaJ|@ND!HBD5IlXXPY%0Dtg_NZ%AHBau>$bXP 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Œ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 &b#3%V@w~*r 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

P90-7JMTD^nq{|7i`-2B}m=Hs?XYD z;Z`ZwI$2xY>38>q-wk69i!3#78finQ-SeP(D}MnZ5wL{QaBaLZ`BKVwU&zO5B@-A)tfM`O-bBzWXk5+f$6@QzkVHl-WPe z7CpVA|1uvWx$6iwRgIlG6T*Yk)ntwyCdPc1oi))tHdmf7p#(=+uD`*aMpce0P#8>{9?{ScIH3JQTw&ImKp>)`u<9!a| zQF1~BU7+UK?n6VoYlddSr^E1r`t#nZ^Uc)2_+fEb*?Z&cnfbW=bt@e{!c*~E0(BBW zqlU*kI-Zc`_poLPm@$&);i)4*7%Nw!0J3>Tv*?sG=d$?G(>sEtgF%mBJe&UQT>*E?s}5IdC}7nlaDeK@diF~b zl5z%7cU0R4K&<^a&AjwCTr9@573O4j1OGeUU2JhGxXVBYD2IJC-@d%_`YS`=ztI)g z{|m-v=$5ZB`#JcIu_m1b2UVzq>al`mF%7uSL47s6OUxl0(_tz$QVpI z7qp-MOeJXPdVO_&v)Q+vdT4r0_jLAkeW5Er8(~Rw*XND-@xpH(jWdt{U+~q83xNg2 z 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

f?|iT@sB%YDa_c zN8o-C&$|6|uM1s}Cr;J8=>8YdFqOl01EI50anhIqx2>y&?Do8`DU7Nra}De)Tw;QN z-l(7T%FI!N97vqTbs7_91ReEyfPHb?a~F0p^zj6PLnA}qGH^}1T# za1{5Mn)`O4bbZmR_JTF1=M~t7pAe(7SyXOuJ#XCNA6{v2ovTEv$e(5CX&$Hz?q>s@wxClFT1E4sGaU$_>7WVm=%YEe5iNr)2O zeWgh(G0xv-T3z@?J#;RsMK1^3;C!E3g`Lo_H+I2$Jl7o&q8_)!szp@lcES?y5o(E* zT=fsp2Tu?pzyK-lz&zA4I5D4Cu*9^a6V-=d=jMsea6Pp4abI4sf)?SR0O6$e!)}k1 z3QW}pesVxU|D!h?+;?aEThmuo9M<-oKF3lDb*Y0U$ph`G;`nu&x)5_)3C>|`>mt=5 zJ@55N;~Q6c4FloRbt7pQQkvHDat&&{=;8Cs^Cgn43fy6>caziZoaId2p51Sgio!Cy z@jU-NLPd5T;qUth1yBUNMZ*~XzZ}qhiK|Do|I1WYi0mHR>z>KhL;Pv$f~u3N*^juR z`9N+b;r5|4G5v^ryt-zAL4G)ZETrj9jac4_`2ehtJ5jMAQ;%KtCP%YBAP`hc!QBC^ z=^qtF%HDmU=~txYcJ6A(a-G;0W%=N0PsUqU^c~;l@ueRo$gQ@lN&W>Mtf>KlMp>Ik zjHv@^O_kz*^3?TUrW2r?tUN-CZEI&NWPh;N@J~mbc=hHpy~!zlZy`JA@P)9o_29$1 z(42g}No((aJ`Qm&`@_bXuXwi+)-KVTS#-iI{#EMv?T4@R+Ftrw6yfA5+JTsGMd$fG zxKj~wDmxc{t5pe!7|*CgE+hS#6nt8z=|AS{k9HX5mzB-2%|0R>d^Ls<8O{izoEOwF zt;~@}Jzcntoebk7-?z}!z5EkDQ`mf+8#Hpv%k7c#?}iIrTbBPq9~$V01)C6e)2QkS zJ&+{Vg*~CB$?O;_U-n&;i4~=VOj6c(^v?*b&eGQflxl`TF~s--UhNuH-l{%~fQUc0 z@Tmx@!T{;Mg`0YjDvA$6jSu*%sjTEOm!wrtGC!B2+FuV_L+cFNcDlV9mq&!?G}$iP zzRaAaxlrlGk2u$Az*XKjF4s($(YH3#IuiSFRU#V>b?luj{}r)G@x4d2_hIE5K9_vHGR~i=Znr;f7CMr> zG4k~~J_&cJFe-?;2HsT*1}J^L`y3U@$InF_>CIA|{Co6a?6sNdzZ;eu%>)fb#N3$e zv#-m(VQdpg&S#uV;EQ;u%5*i>>}b~o>{D~A6CzBvFL4p?< zhzh6fItDyuKhz<@6dmg6E8(vac>w%T?%56qdBLb52PVY2B-N~PCI!QazU4_PEkT#+ z(`6H+q?Ozu`HRxh$Xd(yct6Q!Hs2y$p#bE6ZS;KoqwJiJ?Om5?o4;aMTF#8A$>8=o zeQ8uJP@3WYU;&ID&bpROeB5!)KA#PL-GDT&H!F4_I>$neHip?px)hf9UEV1{R+z1R zX1-j>{YPqbJ7eLPdX+BSS(N2{5-M5yIO_gaehd&K@I7XkoTV@9ZTR?fXhqbjeq7Z* zQVE;ipMcP7Ue%IOwQ&65d2f#p-t^PeP3^!vsckEK+5iD7IrwG_Ysf5JIiD%t5qF_H zHvn3>1>eyuX1I}cpD>6V`;*->aai)AV!ZUkJ?W+^&6IC((r*MiV|*l%qgZ11zTxE_ zb`eD(4B4w{E04^-(2^A44v(Ux2~}m&9JaU7mz{hP=T|H6p~5D66na#0SnT>e&1S~v z()ONiFPRpwdO6H)1rxMiwG7v+9YE`D&#>%WzXrd9zC1-xs{Gdt@^~-VaM!-)nf%oY zTV|0-dgNdVQo3fi)b*)@!`@oUn~~oMQOyaCs^_k;#wvjBx2`Lu^gsSe8lEo3P>oP6 zgI9#NyS|*Hu`fnCO*PTD&yQx_y6YZ@a&ZyK>lPf-436~XJ`EdB-(B_kY*YTlKj0mh z%H2QR%pFeZc(2uWUEYK$%_x$&-?rds7can!GGs*q3L~7Ng zy?-0sUT@0I-?*lVyY+-8Fy9E6=dE0M4{o?-#wI_-$g?3UgC^Wt|N0+vG}Zjf{7T)= zp-ON<2_pA-zaqf_`6J@Tip7JPOtJHMcF8*@EywYsv2c?tFF*7%VCeOJ>a!KcNUtgG zx;e>-SZffCIB~$nR87=<^XqIGrJeVG0-OjhMSMBasvkT@FADAnq z#K-&Xn}sTA4IObg;H$(1U4IgbaJ~5-+6PYC0UV@xYQpBsNwo2j5wqH(fmF;(rki0G z%X@0}(DQkx{aCJ0w3iKcpfq;<3)d332ch<;F?l(EX+2jOyG0!~zI8&^CLv~Jvb{Z) zJZx7w8m`s3rXB_W;@y8OnK_Y7h!VzTa8-#p3xx3C$ za=(H@AZPCKwB19wret=QqRg;8y`I+fU3V9nGgwbFWYY)zBeQrlh(oEjA?wTib_N&} z|0^`SMU_tW4Y$8_#;0Hs6=g^y*vI&h5WdA!dzW$T=hfeVj)LVYhsTq~_+#k2_}SF`fXug0+1a-(t6%+lQY<)ldolW;+6i`K zus`zRpTz^Xv_(R|At9L3zX|?zYVdlIa-GPuu=Vca`!)B<`MTYS<|{s;*8558{q5TR zqqT)V=lZRn=yC3ZV(ZrMUs^C}4$AS#@9x4R&B9l5Y9QW~Y2~CqRRRCqa=Ia0aZdwn z1f0)5$EoqUdNE`N7S1Ic-9DhjJn8#~P0g?LhnqZv-!pmv-->?O42-7Ou&b$OJq&Hn#P@=PO&vS;hTI9IP=xD2m8r6$D6lg1lMAEKzF17{d0Wk!BkczWGu$njV?=dikqo&Zl$UkDXKr?*4tqa{)v$Xv7EIJ40xZ z7l)~Hv5k=(?{9&hGySFGsj(}t>|r9-dWtnnn8mti{j{k$8v>fIUePRr+OWL|T*S0b zP1d5=?wPKW7Po!0{7hM~^mXmBOy{+N@dYpc5&|qA6`Rvn8TDqh@Um1L6Vel%pXb|76rCSO{(>vKT4{Gbj(kGzfCUcz*m18NLe`p~ zhzUAp{!@%=Pt4|POBM5NL3_cOQ7cDWS>T4tRVe1n zx3Q!w-J5SFHC!DkKbN{8+H-GXgwEh{ON(1!py{rc!-UqiIo<7+%mH?*`ugU8J4}&* z0p5*Ew<}*_6oz*T?V3%)U^i#-i71^@QQ@(gb83ZCB^YuM>o|7%a8X@odj{?s6w5^} zu)Wmke!Rn|ysfP$@`laXjyPBEq{Sw=N9qg66G=8p_rDP0pZfi)(%2vCV}~`2VBS0d zeIU-cIzdP22yX4hH~VXA_TbAa_*J_kQ%3T@AI8r)gZci=9X{qNA4d>k0x6OyIUl<8S3!vWb z!C`paaaP-(ACLBEegCmonRu5Y9#^HwPo0MzY&@9<+4o#&poSUKqTL?)tUrZmr8VvU zUiqZ5?ig{Z#&cPs)?!x;S_2*_{_P=X&i_rH0qrtW3*%DKl2cGy$<5z)vkxA>bu|67 zN4B8(j<+)YuS{bU?UDntG)0|>z&n&!X8P1>pv!{B`niGfVy4>&?Pi9tAOR4j)@W?5 zy^|Y$zTkCJdst802jE|Ca9q~4|F|mzryjJ!pP8vx94Ca;LX48d@%cPQpj#w=jg@wv z!L>6E(1$3-XhuzE?y4Qw)rQ-eA_(r&0g(=LySRNJXaCzax3f1brW$-FzgPr0j!r)< z|BFWlsV|T&d$jB8H{+(Kg2)0)^`ZyzuT1u*FNsD|N+Fp_@oaqg8)>nPhv66aE%}J) zNd@EW8Ub(@jka{t0D#gNfW#ZX@sF(NSNG3al^V>YhJVoF-=2n4b|Ru(93=TYH;txi zVH#B}|E4i5RZ2Yh=%Ryv4kVe#wOG3w)(yK{OD76nr3?@i zLIVQ9pUMuEz^vytb4)WDvTKS1s+V-)(jwJM6XdIT_~u%Q&}Jula-h2vA--A;^iu>@ zj7~IhVtcuCcj^-CNHXovvPac1B;~01f_HEf>1AMk8b9&b9HuIty2?i2lv(f(n0o4+ zF_9nIs%N2O87$j}Ne8%!u!c283t1$Gm6i?n#X2v67jhEQBvfaI_#{30cLd$)Evjox zQy>n0KvJd9<2>JW_6F)~s_TF~v{%MyfT07Bl$4z6#o+mWpYGWoxMys^jYA8JnO29! zZ1TiS_qE%UL|etrzNUwa5h6X+qJ3l*vuWxIVbiYF0?}T^Bbc=i%@>0$qouAq!U;rX zpc6a58bXDeoRpwzz4#2C@GA|d9^{A;9Q03Y;G2Dhbp<%VGqtdVXrCj-_gZb;Ip#rp zyBXae?XFWYAwFWmyh^20XAfz(E%>SVRs+#wmy>At$kCEVW){}b z=U}_U6b!sdkOPMgFXM&)5w4zd!L9=PP|zrApY7+clE2MWG4Z%%`qAxL&x&{Z3AA6) zeB$R6Y1_V?8M;F0QgKE7vLh#EuIjIKW+M+(Thw>Ylo$7|c)v0SkzCoJlSZ&RGqE=h z;fwPtzN%PpHCH)w%l9Lv3^$P`U}zX3H)_VvxpK{msL%|aL)2qP&r>D zxk~R8bc4)^M~{Mo#%PO{70wi;eCiI&r_SJG%UplJJ8cXic{No4qUKLM1gkxtmpu_T zGrlri3$7wJUd~$V_4lbc;|);@c5nvHspGA@>8Eo0%Y|L{wLBf7&okfIC5O%cXCv{h z1X$3C^^@r+TvvZxURt6#e6#lQnVj8k2ZF5l+0{+r`V3RTJvQ>TuR zr2Uic!5Z(OS5VLFS9pJMBd}b1N5`i+??Qu3*OnZi1Tqg#VDEDz@1GZlhD*a&&)eT| zl=y=g^|I!Uvx)r=W`DS3>5On){Ak3dlWa1WG^ZKPSCbpN{d_u0Sw?Hc%80=1is08u zKb(GULJ^nr`ZR1$;+^;mJ)ZsyzNs}z+P&+HRhPL3ZHJM75H-P2b9+n(^3k z-prx9eUP-@TXpCB=*y}Bm$FyQnE}mm{zd^Jz&h}n;t+S6r49r4muh+i0WD*ZaLvVu zkWMDvb46=aKOUy^!m%vRB*g^=X1qfO;``Z=S;tDH`iWW@?!hdBAo5IIz9!TPen&QC z&~ea=lPT$*&y_%8db>-Z<53q@a3#hG1BPYGqXD}<#~p` z>7;cN`MRvsv1{>ntLg|UV3E(ZDT294CX^g9j~J+FrOIV3jHCFDi$g}};-WPKV_ zePI#YE!g!vKQbp&DakvlfpWlqJnH!R*D1$N)|Up?9e>~SKIf<^i2u6C9uN;vsSHy8 zF>*1MHy6KDe0$YH$s>KN+vauuwAinIa!@KvBjNbpzl1-%p(PBvzXwKiM>x zzmB86W`ZVoxnNpx#}mw5q$IQw>g4Rwm_9u@~B6T0*u$zEq}cjc#%LcAg>d$jTlu#7W87U!R331S_TQ)D|HH{Hj|&t6#1pCmhJi56?(I#w_b zgH0{y$NfN_CE=u)tBiU803H+MH3qcSQy!blOEC5c9S>3_+fn~?2QzGN1vFJn@B%^lr{ zs5mB#J)Kv9JHasn4Bra0dv+B{RC0vRYXl_=qNIp-YpFhb%t$lTcZXVFM zAD^3?*-U(n5Ka-5SX6(vacHY)2<#0dYt8wWJJwz*`B}!>Uz`hxn@V}pw6F!d2VtHK zRaUx1g+&RQ&?`wL@ukCo&)R{kZQIrg!Rrkbwspo#66;GRmjQ|$BKV=r?rDm+hOy*) zlgNXNytyn3v_rPX!V(;UET>nSnT&|fD+<>Sw9SL52@oub*$H`c#;fCejbpZ$7mOQ={(2PL-cI`hehdk(A~HT+w(hqAS^TcxnxCRo5!<(dvxfw$`I>ij_#G? zQb0gO92yNQyPLYo=`w%C_6hJh6{%+r0=nHax08&2>8c?V>~OFAzb=l;u?kA4tsK9` z+Ntq-au&~?DG`bXZ(vabRIWxcdwkw>is?%3j?2;oBe(!y%AS4<5}E&SAeysk-pZ3x z`hH$q45ewWrH8vK=>PMrcXdoKNC$yWuZP-7B)XOUY!vV53jdO9c%xgz( zItGDUH`O|Ja}Ufl&r)HzeA3oIOr-qaprW9cK}YE{Vyu>qX00H)uxVJ z+!-0}A`^@5L!$6BN_cJ)nf2GZabAA$7eN%??BG!HgC+dmsNr$Y+R+>PF@EtiAV|8L z^JK24W17DDvcv=W4R0XKr9Y`jI1TBN3q<0mQ;Zxl=^-PJK{+ug^M932QVQEF*+H^z z^jZQ$-n=R2!J@ujaSlHV*lIElWAo*sinc1KU;cd~~vB^YRa!PF|*kp+@f(CT~#GxM<>0V@E~ z97x!F*#gBj?GpSPS6k*ULJrIq?`%xVPwDIm`Pa8m6{#&am$bc(9*?BeONKltdd}uB z{ce>c>yoVy|3Ines`)Gz&ib!$erfkkUFZG$BU29vp9zC*5U#FLBRs*G?E;woHnGSqzwF4~ zIPjBHq3UGc5TM+y-aU-bcDCRH*9MQIY-^yeEB!kAMCH}Hj^{5rkCn3O39SHQ#$3u^ zfRsta*!*1Gt~TF2+|oBk>U`d}M%5ZWk>T+lvg|-?WlgtRalv{pxBn~TcO4|uqwD?% zWKq~RX99EH98?prwdC}ji<7RNZY<}PJ43(e1wHzb&9@FmDtZwtUZv_R0dG?ayWXyUJ8I^&;%n-j@_8gLoezzr1N~Yu- z=0RCIAWBzPEz5e|7yDk2R-Vwnc~SrPIr-Yf($tHhcaM_+e8jJ)vP@QStG!!9u4jQk@6RrRK<59%@XG-fUW$~OJu5!|u%$}A4 z9fz+CFw>LlYS!03e;ViazB^af>|h`E{J%Icserh(FxmR!17LTpCo#d@??ede_5ekW z+h#2rI9drXY@$m6K5y|ztlG{A`GJ=#tp;{^YvV$z#Pa%jG^JC?h4LDvr9xpydy_uz z;crdgwVmUWbfLAH58Qs#a?^yQ=2A~at?{Zh#^5a;Mes_ZN5uJnlU(dAeW)d1*xAOU z_w&jle_yd_uuWvi;REhI>g^u=stbQrwXr>F-5?(%&#CySs6a%*a=D0t1M1|56ZC`7 z@I~HQ!PfEB_kp4w{o$_WE(FOtp5D(L?@+9-&95~4;jG&HY|QV>$_JO-UyHtoA2F30 zrjAy+tZO865rW8_sj7vUCJYBe=0Gv7+^*Q*@DhZNn~ z0-^ss)&rCfQ0&BPx_Q(vS-u`K-3HAjT+r9q@i^rgpqX`6<jBbX~c+eJ&B3){(7eb-hs>CL?4>#b;77~MZVJ`AjmPDZFTW@OSk z_UDMJxIwgTBX}KxFzm*1Jq#K;9XU5rTJ{WX z4cL$`fWCZM`l`7mp0|s25-<$_Bq@` zb+v4ArBTOlzZm{0`wLR)Vb!xKw0+8z>6}014czVc7F&S|``mIHR)COdhZ?6=MfbTL zFg`C2!3C{O0aG*~g1LwTdHrQyzRqaqT}_chG*Ogotmf@*Ww3vbh;RDVdYaTo`Hl)1 zb!T*fAj-@9#&6-{uA2Bpxzv-oiUR?szbY-4rD_$nwOfXc=eq%xX+noe=Y44BTtN8w zj{-|*Xssgo9p>spir=f(gi%E&B$SDhLcOrE=vFP)AO%GcFYoq*7a|*m9}i#Uwdo5C zvR(i=2cIBko##(XoseN64y8DOy@KCs&$q4oq7{YdLccX>tYBV=KGOp65ZdWr&|dCp zA+-b8JD8lJJ}zH-vMu~as}kD>?QrL7lY(W9)J%P^0hq2nT)m}6h|Rdx^$MJN%7kyj zd%Oi__hHS4eF6Dv;xkZMNSM!F$#3*aC&2y+O}kA?a{||SXw=;|I{p*#Ym6bw$BTPt zkJ_m*qkd-Jr}nK)t-(rH2ZZcV6$=*SksnJ_2+vA$H?L!RY>U10A*tlkFI>lwzqhZL zp=QHf0ju!(p2MJd32oK%Hy5fAPK;a1obFjyBVR;NLmzkZkNeHj7fkkJ6<13msjajy zd$qsWW)16+|y`!7MUYE-c zKJBW798zY!op1~1&X;Kd)QUIiS1==%L-wY7I}=wC@jN~^AO{=~S_H0&4l8qa!JBcA zP!}!w&lP&&SVQKTP&Z#HMr$pcYGJ5?eXGJMa8Xvw%BA3=*Jh52)B;TvDhHt)D{Dpe zPpF|BP{K8LeasSpM50g!aHGFT`Fxqs{QX&ejo$zbTVe`m@cUIM6FhgXI`hhi>k}C# zDSp14pWb;RU7}xKl?**DQPywNe0-8UOf&Zgw@$x36V+yECT>Ohf$^(>Z*}<%!tsgY z8Y2l=`EjY4-xO!~V&6jsk|i40MzOMGx(G7M$t-m<9H;b5`&{gqRJ)#ooaW#I8`Zds zlAECF-QGdSZWE|>Z}&!DFT->Fo8OeLKUe*BmmlQ)_Mh29MaCbPu%o?`Gn2BT+HB~O zoH=@jr-#Usv+CX$KC&2<;|Jgc_u8r;6hooZws(@L5n9lXj>HrvTkHc-HMq6!N`r9u zA}V$nEC0-1%O=XSCD`znq7ObpmFI8Y!pVs}6yRIUB=jZ>&y1IYf1DHfi5bM*Bnu7; zV{;QRZ0Zrob+OrCb-5yQwg7we=o8ABbwauMH!Xr%Fy?C9k-vJ93iVEb5i zscO@6aMJM8KN;iUAHS^}2Y_Wjm`yp;!irfa8n=c|BzCO6OaWrpv5URk`M~}LbOtt( zhQGwpQr5*~Z1;+}(3fj4c2&xDtj5E%y0hIN0+A3bTRdjIjwp(8FS-uMqVW^y?y8Jx zr?r8`Un*ak?!q^Qyo9qGp(H7!B~V!%d zl*GD8|LXO#3^naL@BEavrX-)|X5wjf{g?yN{cYc2(TUqMUi&;)tOHSVBrmGSa$^elzpvM4I>9BPY zi7q|ZvWuV}sQ?EA35rT#QF7inksZg0icSBWU*>zO)KCFF9@%n?*?&_9b2-#>yiHp# zEi^537T&GgKKGDGigKlr<9DKFzcrAU0cYRyED?i`*&X|>Nj6i#g(j8h*Ar2BP`@*A zp9y1%-(}`V0T(K8GHxk`_a2AwpVsma%No^}C)z))dfe^}muA16ZnX%;woJUy98z8W z(-`P%sH{k`=FcH%>})GJaWy72CoH;932XA5BHCY%jHMRfSP!hv4|4oFtT~Q{>*5bzGyZE7&=dBhJudB^pr3t*^4Dcfe z?gT9?ml5|nQcyIR5Tt=nx{CLigc=i-$DBPFBk0x3RZ zO3QpTrW9!Y`V-7X#f}blbxO1oA@;`Uc}EQ7TuZl}$OCiiT}?`C3(b5h>e`96-h1f% z&+2>6W1E{@wYI45Iq&b@2TRA8a~6Ka zu^bf^H&>gpi9QEVXmtu*%%BPZ31vMm$;VzzZ`5l8Gu89dyS*md93&_Gp$}axH9oy7 z$^dYju?Z2D--tBM`Y-7?$!b1hpNfIVeX|qtDp_}VC54_!O0R zSLMz@&DG7vltHFg7&VNuo4XNq(Z@E-h4(sHy1I z$>POKgXj~adHTO#3}*vK03^u9c4&pEu25@yAc66<(4=<_nBJy6^>SQ1uRWB+XM1evV)*gSVtOek-Wc8bb2^l#;`F3YjukJvtX8tE2|KArp|K z+jk&-qP=`^t&m{mTXMhkr_XS?avIiTv*W<3zHyCl?CqJ$D^Ao@h7(f$ri#zoVJUiz zTP_3W#V1%_v!OV010Qz8@A{1#5pn;C9VaN_Eyd1rIpAs=Jt05r&wzK0SAK8-4>6Wn z}1qd{B|t!~Cj+n(3wP*=JfVagnBP zgH(8z)EkxT($LGl7leg+WJ5!L*+36(!l0V1U1c^z_}_<1U%dfJgo|J30u`pAA!L0N zTIkhOGXb(`4Vk-){`0q@uuhLKfHD35+2_B#@3{PKUiqz_*}SGhUgx$td&X>qc~mTT z9yHHf`ZTXiFEayDm|3T<+SH^q0UbQ7CIW^XaGz&B6-{k(UMJ*1{)A7Os=xb!+bB~1m zQ-jvDO_#nNn>luZ2d_UU^;A?5JF`Ci{a;0)4deW>T@4skg(yDj+cXBypnRkMYQV&l z7b;|?zQ8L>;H)~B2ljCKsjgIVF6^&iIgi*@Th}Nfk2PwI2HRqrCH4RTwP6HgPrf@G zz*E=i*skjy<+d{?Yc8M1gn4kSSU-<~maY_|qdzmwI`oJ1Vw>UW_lYi@BA*X!&{CUS zT4yGPu8bk=a9~+WC?bC+i8IxT*@nY!Q^xpO1cu2uNe(~$V_lif3 z^d|=nY_=1j&v<<-^-YDplL}ezdOrn78R#~T9*tC_FEMp3A*BIdMUS_r zEsHJB%~ZhQqjd4TZL^FZj_){7;xBtxCR&C%kuma{iJ%`xl2f-RQEt)g+-nO{&qiDo zfIRL6qSYf(fLM1kBDlHD;K`9|K^sf0QpfMS?sMVJk%iYzp!N}K&N@TIVA2or_O0+A z<$XUxV_2#ZdOd+7yqenyiv@ff6+1+uIX!`srN_s4I|2X~AFEV}Za?LKrs$<)qYfc8 zrRhkyH?KTa_i%0(>wZY#i$odQTeTDK56Ljq#qv0=dATx+EF#B--+xO&3ocK7nrXfk zN4=5qsj=Y5kE{SQbJq3f5qK5fPXCPT+<`CWH7-qYezZ$t5c}Yo3|t`}Y17N~>~v@B zybSm;H8me#snS|C(k3k8*r|Nn^4@N@T-9I2<}gLdB1e!hWAJr!5J(-FSh?`u!m+Un ztvbd&IrfOw3Ak)uVF+35wRp7J^cik%!s%~-KfYU)KpV~r;&KLO1~e}+|Fof9=9+h7 zjV?`txc8-=)|y*|akRRoXv@#o&FgO9L`N0;8cM|30`W}mlzCm^0D#gs=U?ATymk(bF#B`42spwQb@tFW1c8MP7 zK>d&~p`_VYPG_PZJt)X)7YZ1Ag}JCMyHiD_soa>=eW@L=P^i~PZ+-2a&n)YeJa2C>0N9h60H^Kc8k~Mk*CL3caQhvFsx*ak?NY=E!*9*8}`{8(MqKO^B~vK z4E8v~ZC2OiN|$$cLj!=UeriFbG5ZUwc!&>mRfMHJ7fG9*_wo?1*ZE+BJO#6I7`YD( z)G7)WcsA9c#`)(fX6DBkE*!ViVs71-SH?u$Qn)nb6>UP+TQ%t=ux)QUyhn;0-wPTq zUEG}W*w9x?ROg<3i2uuiVB&McON2TX?GkWd*@-wA=Bepx&>GY}qjLl9Hq#;2uA57& zx?x!;3os%pV&$vtGyNM-6`$+{UEaNFbg*bUAsfo43Za!BLn^M;29NQ(!m;Fzm-Z{` z)i=f$x@VN$XVL=*o+}DS>?f-*NXRBFXc?_5`4;A7U$XFW7Z{=t8k~?y4h-@%IU<1p zXQ3s^n%=fx9!wK}nHR07MuhFEEjL;K*Vd2$n17FD4fvP#E#Lp9Qbz)2Uhj1-IY>}R zR0ERG3&6F_?0FytX|AMX1kbU_f2(&vlg@T%TQ}7*C5Dp~OTRlrvoLtd`~T!SzG|5M zXK+07mqxSRu25rh0W?9aE86f^+MMoQ<+Vsf;nB~;n;%2%M?iq1T_DG8*@*tW;-%kL z(jOib0_N)MDQCE8^5Dm{8qCkjh1}IQn%6%d>8TT#E;QjzQO2-WFFT|e@a`2Zf_30d zu}L6mM*@5V#cg4Is|3k1`)9&J09vPKq3)jT9b{5vDUGHyui{n?Qrc^@R9UOC@F>eH zt$A8^(Eof+hU3$HZ&5y}>?hpWl1D(57$lXJT`2%sZGK=wALEC6yB}K}TK2sxw_^K& zND3!Mvq~Aq*ctp^`OY0^==HL%k_OD&NbMK=x#DN^|nruayzU;$sf+=pP;Z3L{^#JHt`$WmIe8anrj_ou7u_ zyu`1=0e#P*qfNU#w^p0>oeYY}n~w>rJ~I2UmI;NN4z181G`m}}1u+&-xBSY}hzhW+ z$2Kp$Xi@{8YDOSWk)wG>%VSr}H=^CsmDo$Cl*cj|0a;I0n72s-5H&tgr3SisP1sMi zWvwQHo8{c2z^lIyIL<=dgh&j;&vV_J`ei}+Z(+h-q_EaJ0R0xYz~&Q4&6Tsi8L=^ek=yZzXRO-CIyv*SM%g|>GDY*k8Gjfp~;jph+rEfN69FzMuGVZ%Fo zFa+QHIdmJCl{tA~;&X*ljInB8cx1a@L)F0>A8SJKjkI&>=Ld9ERa!;wKE3Majumu~ zX1|u)@fc0x^Ru)G_$c42q2aM93zJ5hTRa#ab1VIb@*p_nUzcElo}7sE15`s38zNb7 zVWz;gOqCf>cxuW>)&^gfAAAIIW{R9+KK_BhZau9$#q2?} zbMwTQz%|m@hSdu9k|3_(S^&KIz|3slqdEASAg^zZQf2`vcMe#IB#aDPXG%P`e#F`D zv+Jw2`dfOm1~=F4Rx{?Xh*TVs#P&QyYQf2|E9WV+eTtD;hd5fe!@-wEonZkENR-!R zsgr9Pn)!@w;J{zM7T2vzS}%*9IEQy112_A6&Rz$Y%wObd>3+f6>+4n*#N zz>&NTFBgvQ*b9=QA#$VxwSC?Q%kCiAsUX;Um%}2v=O;~9b2t>zaH&B#J74WG2Shel z9WoVk7bzxxbH_*Ne_NKg(kQjq4@`cY^`}eyA4TWkPu2g&@ox#0RZ+HENs^ttD9@k#?UN?lyn-Q`l8JU^ap7&;xJ+HmFw#yxU=l2JAxE_ylKR)OEe!ZU0e=)ztiL%`xd6QWh`fhyjDZobV6|-xvtKE)Bn3xM)TwU0V!VD z>33mKvfs}<>~8o$OD<0(h|BIR)B=&>8MM%tFPSI2iU`!o*Tzg<_mn*gk>Wq9%JP_B zdoQd;%tPNaRd2z3>v7lVufBggZB2L-nN;!Ig9&-ZXjcf>X%!fs9OC8QN9_l6i%&gD zUV7s`thRTqtXX)>d1ls}lU$@9!4~S@uJb!eCMjA@a&xW!B_$5jJMVF@y`oOfEMb!? ze1jN!O{1Jj{K5sIhjW9~nd7m#;VSO?F0Ap!Mv^C$`KFLGhp=cC;8U+)(b-f}xx+|D4ShVnyb`D$T`RW9axm z?N&ikDSiLViy$TPe@N3k@REW&`+1krvVz0>8qJSm(|;|&h3rZVOn-g2?kCFAK;eM^ zv7fB?xc2ofVC+qm2ljn7AG8#zN{7a~1mDrX$()juL(Y@R0#hm_D!ruY_50_YUxcSe z#J1T;%eOQSLietDrg6IJp@7fQnXa99o-b~NjS1G~R0XXLe8I4usW(I(u_trsxQH zxUEqF_3p+n23-k>`L<|ag^fU6W_m8@c)-)%%;HUKRdfT=@G`I|gs_`?$j^o}yXTCR z=2ij+(f!@;prz4bArHIlyA*WemDRgJJ-O>Y_2^hg-5~UKV2Nu#xg4} z0#ch*qVP(IVP{x~a&E>j~Ch zSjZ-sD0FT_Xfd+nG%uKLdW2F0(&pB+BOFiTe4`rf$;Y#Y)vz`F2_wdQt^up=(x#jjEu>~oZR4vQ7hg!YB5p=a-LIAPon73UG31k+=_6=$_wec^cf zKY8Os#pcgF|K@x>mVbROG(7y%Kwbm3xGvgqT{_JGVW~R+=Xf_S%^9E&sC%{h{zL(v-7cRdoQ{*z z2T`TK3WP!&>AauKl`W`~c7!#nvVW|<@`Z=ZfAr1N1H7Ld^?AQ=Os^7VsJLq0r`4#; z5@MXyg{sU*0gkfFK=tBSeOs)(*v&}1TG?Hti8fe?k*V_wUDw+E^$}nA&LS?*Tqs0F zdCnyG^f~wBmZK1mCHN(heDr=PhI-a#Tf1#-Keu& z3y!v_X~1Mj0D1D#Hll2=SQ7n7y?WS_8i3#{X=YMP?EhG4+VSS=47j&W~k==GNeyKBT~ACeXd{HSRm5 z<`hk&0dIQDX{X$5ALI=zsmc>Dm5yQ9Ol=rTb{9Rb?M6F1z$eb+NScNGVqnN*z$9j~ zb(7syzEo+n#Wy(u!6BDu-?yDVQFOmvK$lZ9E%k(j*9)3Tyw<_U7@Jtw#yiB=paBtp z9snT6({~va#ay|iA4(T;#?Yrv40g_kt%5~@4}EeHkMb?Y`H70>^A-!Vw{x-AiTaBY zygbv(Cy?ebuu=D<$Q91D#-enmhH1Dr`Y>#YG|88^TH4|1$; zIHzm!s3UF;yNSpE5}7~KJN7{gg&U3`0|L>Zlf{^6ei@y?*W7o@RRtEabUMU>8B!JJ z5LlLdeR*Vw*l~WbdCSil;6|>1NqeD(MH8B5hShhQNhuC+S`$VIamDBhGu-P#GgbKe z{#pojmP6?+aSZ{Szde2gI)}r)Xoa!frL6B}Tf-wd^%jy&gI2Br#kK=CgnXZruXrzJ z*;A0usO}o^UbC%u%?DpmtWl4iqi{oZO&?@Q=cg>|JGWqZ+8HDd5dKnDlOr0Vu}Y1p z8E-c|banv(TmaJBtoGB0(B8L@0fQxCm#@dgBfTl?2i2OEZ=?*iU!V6^TiiSzkBw_? z(@sqU)5PN5Ptm)|+#;oIY8mD5RNb5-RAB1ObsC=ytf+#6{al27Th$p~^n%W`tJ*VI zh=HYC1}uu`+Jflf3fYCMGxWwh<4pM%H@&UyA~ndWL7>Q<$m2L$uvUprYm~R1V8c3d zui0V=u59Ydc=NHd;6446k^b%H?mci;dxxXa3)NJn$CM1K3`{&Z5E7YK7Qr_(wP3o(U%I4j$p3yHZ z4&u*4Yd%KzyO!wIOS#C{#J5$&IFcl9R z+9?Ay^ujkO8wRcg0UaTUj9W&{OtSg#I!_WszA~T(cxIi^$yPDhXF=sUPY>~8&IpAT{;jS`}ADqW&{_VafGPsmkdu0O1ri2DkqY_UI63M=_F+l*pYsihhh-fg3aBdQlmpV0e`BU7#Zaq7Cl5{|nYJpQ*eH@Oy&SpSop65G?_I0y6=N;O4Y>L6|lwRxyT40jTOoXb2MNeeM5=G^)3W}zS z$07fB?Go>3e5f^rluX=RQTWJr{PZ^bu)&Y=UQ!Hes)*Le*u6&utw%r zTY%0f6#lSHw1J$1;TWjJXW4cPdkDQW-%g(@+OKpInTK>w(rfpEX4>kDX+jSQ%JX<< zCs#*L??Y8&V0DWc{&Qf-{;|gCzu3a`fH(cs@^u7oHuj`up@J5`spfrnG=rk*NIU~* zW8A{V{zZyPxsoTmG+1;|uA{le8uK~9KHI({WIEh(PDX6PUmn()$(?kDGKI)Xqf5n^ zfDnVS4y<9I#~dYLd?b5DNm7TWZ1j6ajzN8h{;c)LXG^X4jH4lNppYOmjAXJ%*)cojRh`V^KS)rXFOqs*wajmxwe-;rEJzMVo(1CkxgFW zO{KI!>Qw>cfUGvTeEa>AtthdvtPAVl2_^sqvx>287cDy0JU~M`JS|GqAD$lh&6#Zx zqiay5y`^aldL1R8Ako{;d%SE7oVQJ0yY1Xm)~&IusD~uUaN-u`0$va;RBJTn{!_=5 z%aotoTxt|Uisbvg77VY_&N3-ALak_IUY0c7YHW%<^6z_MRZs{3 z8VZFI6pZE{5!hs1RJ0{3s}!b{3K`yN&COhLfMW~n8v%#Ou1j?Dv4XUAlxa)xkOv5V zQs$Z@?vXck&1ws?AxxLQ0q}~fon{-Qok?xlBoi6cJ9&1~lQGhFnBCtG;`+#`o z8ii>g!ubRqa)Ywr1zvHs%}-|`?25UTlz^7mFG>YxX+W$IdAGTdv*dVy5->Q;!eB=l zQlro%xAuraup*r3b0EQ~;?P$SI4_pkr6m0c5#ZR%c0N2id@8w$=ciQP6IW@hXPVgdAal>1dE1 z$h5j5@7UVqj6e(eRKz|5owIaj2SR?*gE5{@$akMIo>?x%v`&tg2@#4q3?|w(clN(& zN0Ux8GF9&6^ZFp(wKc>~$P92hHyy>oItOwMG+a_bQFX0*qCK<7jZ(9`f<>@HOUP0m`MdqRC*3SrHp~B? zI2yDU4`Jj)d0kBU5{Jot(XD4zbQ{-9{JM(uTfXRR*vBa6!0Xa)A&cfS4lFR zvHFE$Gk$vCQiP7iB1)e7CN@l0ub*sZ<3>_48}TpB(=Jz7}*tnD4O_qfHv1Z2pwkt%W0JB zHG||dRNc#I<)#}$Ga&&i65EQ(=0l#_SZ}KyMfE5;AE3jPwLE!ykKs0Fnf9+6Gg6#Jl~0<3oR|u%d8z!Dm<4UDJZ?bcgrsI zS#Jm_HJ=KH%s?;}Hj`Xso{P&=O|xSt%=LI&kJsMZQeI?_`CO1TMP?u8Ua%?TCPEw*`7MgtcWH$&Vq6 zp^bc>yG-fKIUAC8{yTxxm(w5)uaSni0>G^;q>)dw52J&BTuaGT<>TQEm21mbC1NK~ z+<>~E{g%RZaIm+z@quA`#uEk5EJLZr{ZkP@$9;TljK0@)7I|iH3i;GQs=u{mHR=Cg zrL9wv@wzi}Ci$A%!UKO_ykviFWhs*57VQ0=(7wGWiDF6#c#VosDV2Stdd7J4I;8@{ ziOK=By6U#sF`NpUePk<*F^b$ z4aIRILI*e?cMo(F@|)0QGfa!+D2xPgBdQ$aaT_bO+GM?$bG@CYm{`fgU#$-dpVlrS zgEo0M{|aUv?y#MQxQ$w0qs{ex5?WhECH=?&U<3lKaIwSl>rVoJs~O=&X1e`M`CSh? zNfd{$^i?6-cb6nz@JPVhK@-ncu5#VFIJk}XzU4M(hqDdN#7LFW3u3Q2hjQ}&fOyse zonY~$*Cg%QV7Lb2NM$OU8UbvC&jS)Drub$SA+3@ai@l({xC8q8*T|DfD`pXfGSpaZ zmJ>g$ZApYBp+Ax!6|!LpCqxS)D;b(c-{ z&b>OOilZx5`s|&RJ$0-C4w7zZEU-6Nc8KBYrCNj=d46+RgyxOhVE9qH&;1*2p*t^L z4%+*G^$7#pEr=a{zxhMCKD+@@+3ql_Iq*_qNx?$G-w&fjxtuZcHDI`MQd7=Pzc~Gh z<6m^I29!%=hZKZ?p-1ymcUgsO#khDS!w#FQJ8DPb2Jh{=QX*6bDSo%P1DSwoDJ+u? zpy=3YpPg^Y7!!w>m1SfcVN9Ou9 z6Z?kgM9Qm@!B^qq;oNuTp-{y17t0eg-dD@D;I-MVzvg*`U(JFPg`8z`GuL)BH8%-) zd*6iCO55?F@dS1qsN}>HQ`6D(Xx1EI$Iur)QrKJ1gHYL9lFbTo2NpP)Ec^|fp^HDN z?o94kw!5Q9q<#NUcY%v2WOEGs zn6fCS!vD)ux6!g_e>KC0_^h~PnCY>65~1?`#R_MRw95C>A9Z6@oew3LWGRZI@*Z{6 zst*O;wx<(E6-^5cqdOfif~d6U;o^K>q2pE_2O($v>xcF|M(3aBHL1TnQ=2$$8|h%; zfC45x@pJB5?H^CnD@Ycyjm?}ej#FDg80;*0X+jKfN0hM7MrOF#rxf(9qeL{XgeRMF zkX8<6BLivuYTv}%U#`&(&%I8>1)?HW4H$o~Zkqp9 z`YR~G$%ZS}u_X}Awytk)XfUq}yoXKB(0!rAbsxEn$Ecx&n+fvNh(r%`sJ5uW- zN#1{9p_!5Abvc25tgs^SROE%Z9%GF-hi6zcD5Ki>y4SJ5vVP66r0-GE0^AWg{2UGP zYUQqLolSNb$q8_GoXK@_7jAa(&qo7Q*VE`z_rE(>ptqCR1>5LVYP_jz4uwQ7D3^+U zz3=U$P!%-QVUQY4)E~@*a@@#7s6Iwx-$?oxnR?*hvxoEJaTz+x3p*Jkx^-7%kCFu$$}g@E$)e3$W}aPK%0w2n$n|8Y8n%~jopcK8PGo;`(w)S z1=D~T=)?!NS2_a57^~`qwZZQ9CD4-e1~f0hbj}$~ztmTJ=0zcLW5R(65=(BD{aAnoslG{h~|-Cs2u zhP4C`;2c7g_T1v&#Y^8di}=nqTFe3VR@J7cpNY6s}bHhho!{n*G)Jmdqg&1?>aV-HBh)0QnA}va+gVh)HQvlR=nw zxuNQ%QuL&ns9xFEWkk+zT{<7ltM+tUew+$utn5026R%oK#3~l@z{8j+=q!Hjak=nT zm6aV-j*WO?Q;=wsNd)?u*IQew;^i7UNR8f7Bguh4{sPhtsVk)TFLM2+mLMtR%G}Gy z0zYbc!j%mb=C8=W0b1~@s{;Zh>Be)~Y}}HyaoU;UV}#3!FPkB$9R|IR6uu1bSob0z zp)NoDjHvlPB%TlL%Z!3mdY;{0M1lR~~dYG>}I{@)BA}PhFHoL>q-W4_h5X2}G z$I1h75du50rw1a(rUXc%kns5TQ16X5LRcTeVWxAJIDJOx$&Hzepq` zod;~Uq()}Dtqlm)QiC-!jq;iRz$0yGVo^3%PH%JmyIv}=3gDjc)ad#B(2FsgyD&$> zjW#VDMXzvDL5#^uIGxlkQ$9cCXZT6O^+ar=c{U)+_P?->`O-|a_;U%W3%2F)oS;AI zJlh(58?ILp*8UIrEUf11`f~(fGj?alUxrBUQ-xB*CSNA3LDXIM*6J#Mqv)V0peLW#9Co(jp|4@1ZTIbFmI$3{eE zKM)g%*2p&*EiK3XQJ41}w5}{)1MH?nCkq4<-Pqhc%n~ro=4iS!Hx^bn zAS&xZBRANq`N0$$zsaxhHdEw5RZzsmB6MMRHUMR*lDu(RH}(8XRBqw$RDs?nr*xmY zxwdBDl{;$KlxBCmf2;!}99~=_wj7U}~xwS8A36W=P!S zCpZAdwr|VuxjBKbL`$>DNlbh11q}rA~*|)rFXv78G{xI4Exb^VBd-f58hOH zia>tbKiOc$0YlWFiDOt9sKb*A!?sWB#Wd=5{V4Y0;FecbsV}i2iY&V}CR@N&X=EVy zD42pxa(%fgGdDBrqNn#b=|niZs$hTt|JfY+jRhOcG~(Z`u?P+=Q>Q+vUS%t9&!IS# z&3|mwtIwHKgAOPEpusPSHrq=1K0nCMTxfqC>0&V2!nM#kS5SL$I}@hdz+W+R%2s}& zfk8Ym3U=9j&&hUi_K5ObctrS9os4EuRCc}a6gL6>+~8ML+R#QM-7S*I)G zjfS{-%=Si^QSD{g3|NZQEDF#~v{W}(WV9(QWFU3SWU;-&- zKli91t&oPcI2Soi<)cY){|c}!=2rf=>E#tl=awqG-=^9I;0HO~Y*3K!8J0zqrQYJ} z=@Ysbs}pO$Zqr@tmbXeg{3&8YjoW*CjL5OQU0lQlXsvWU!-w~3zRk0aJs}0?6Cmd& zoddTso)v#!X#AlOU7@otb#Xb54}%CXA+k`a>&x?$X3Y7K`v;+ybHY_J9*RiHO7-4} zN;1qiy0l+2PXdzDG|~q+x(T(9g$E)S&EijfvgR2-O3M>-EmtA`TK~C=@G(o)L7c-l ziTXOn+@wjpg7p(85nbGSy(Ooi?&lXHTeOcSxtlNO_OZ99>L)DsgmJO(3qwlJt+Gfk zus7&Q*M51Tiq6^iHp{`!nlmdtDVtQaYZg&>^1ko(sR9DmrXT>4de}0Wea&CsFMm^Czec4G+ z@sjZ+#r1-(ZhH0XXFHj3#wV?|wt#6702>`GbhwNsyX1aog&tZ2d{&qmp8rDv%JTds zW$p{z{j0MvmwL*}_ETp$y3yCWIQ;f&c9L~c`1>vxJ);&Qk7i?%Dnh`7{>w)q{%laj zn5Rm8u^ule2XrQTryU00;vK}*nQineZV>lb-O&=etgP>!sv;0 zUYcJW^e!tap8;-25em6+Np!8yO{8x&!@%^=3CNwJM>PnKv^{)t2dWq;f;hL!V075T zJ=8up*&OzJ^)KB@V`Y|w-*=uAC(1O_g>|nqMfZS4Hubw{KJzXBDa)B=lEr0|JP+8# zzM9kC@W*8AN>#p^>NW=l0gg-8u<2-%LK%*mi)#s@-%`0Ak(JJ`g#o}99z+eTg8`L+`6|&xs$B#Dr!wWw0=g<|cTbrd9QLbf4F{daA zr&5RgOjVd3C}dNH@p#}nH3Y^Bp7J&2Fc8j#n;3#FZkp$ozp48mM@mBYSdDwI5#9RI zi>>4?Eg)!yUL?DI#!t8qv}!wh-yQD_zaj0k0c=4P8L?owj#~fmweD0%bg(r+)QcW8 zN*xosi$(p(BZS`b7!vDAO7OUCZPXyMB!*Pz=MyDpDD%>8E)vNtH^axrfgI_L%nX?^ z-&bA-B(!3-;>h)1H--_AG~v^nVt0E%EsJZV(AUPBR?Gld+($B|r0UdV7_``Ttmbo+ zR*q5G4Iq{HH2x|5K4kOIq%8a5CM9~pU?~e|`q914%)vo+95IuaN~8G!=p(VO@;A;Q z)V4%FRYHoX>RMAs*!f|F-auBSYvBF~E1K-9kN4MX&CO`jXf5dCu$%BYAjfWkL;rHa zXb{eoE6*9CiGgEtH6&I&ZRH@I>kadkx%4v&5Y={b&nBv)6jqg|JIkLIpeRlWh=-QQ zSVYFC7($aj%D3qI#fhqw%Hz4~NQA8PIxtk2q96J^Maukx(IIT>&QIyRM`&W4%6`Ye z-UJG23fo(E{jA8yp_|cDOikbsu%C0-PG3-=Xj(jr#iZ*K>s?XgLGdiY9 zZ+=T6`7Jv04@tPo3E-X_6gt?X#hsgZH7(Vxx>7-+p96rp#bLokXjq`an{595lx7-< zk5&TjY2Wj$86G)LBoY70yg6*4x+Irb( zfzalVt)CLxZ4tx5i_I-cqB7lIgmGSukM!g{U!O>-1T+II8~$kWC-6&XybSD*q})L^ zu%_oGd)%XZ5%-uHp3Q&Stnq!rbpRwz>7nsAl4>p%ICiq?`Lq1DlOND2Ht6+1ReKP9 zCH4gLUjv-&@YZd;WWT{T+x8azIE;ZH0Z1Ka&j!GY&$Q|GMGY4+;&DdTIoAw^iuZ$8 z|8nxt)?ot79$4TU8qoUc=1#w7%B5XdIJ5W>0`>zAuXg)=8o#*-p=$u* zw`r3f=oL-Y{9yOL=}hh(ki8Jpk`L{}pjc#(b>RPf-F@Y^F3?#(mh2)lc+snrEmaE&h% zt(B$SL_&`IS{qE06WTzwbctS+FD=h5a^q3jz|Aj9Nu5;2n?hp7KGkc@-EenQeBRJR z(rCxGTaKQa`9{y6=$+gR{h7zuq}TI7sE~mOhVz>ssn1H}_S!tVDT$ok@kz5TAsoqd z(1F8|>p9+VU?mN%p|kmvwRY>26Mtf4^KISy!rpX!DX{R5gDR1M!zuW&@)JjA`s3<(Cg!glkR2*9ox2C#Xv$Eh#Y zUm@S9){Z3sv7Gg$;3oCb3%(<1Gt%t3nU~C*FwFn`vC3|O$E6%({e~BOwk(gJm5#d+ zS7$N!CFM zNz#RDfDp4;OtnVsUcYr-wwEg7h+tP#`=9lI*)VQFc%N*N-mwCS!*!@|1pMPej6Dra z{V0|@NUfv!Yot_o@Cs>u`s1ATcG)?3yfbDNYYt)v@c$>vx|hXKNKJ0+NZd&4$vfhE zD{d8rjsA|Rda#Yq^l)uP@0mR#p8(=(ZYc5zLJX~UtQK|63h!c zMxOsJ{=Fxe@t-Vl5t2vqs$O`AXa0WeD%B9Fy*x<`M`}0lsH(h!gMl5O;z=h<6>ASU^;-kupC-DsjK#=Tj#-54+LnMwQP+ZqArsPglM3OPA}vSfnaXO12yYPX+TE1>;*p}hYmXrhlb~iMSJl_Qs#RjCE_ekLaTHbz{$)3?)$!56={i{j&H@-(?p5^!*-#bL# zd>xB^+}J^m#y?sDUJl4H_v4HWplthhq?%-+fLtzb#T_N?HK&Q=Rl^}&sLS#%R$oyL zWKleuj~I|ToXBFO2Y>&i$cMw{t^Kf=yh$$i!XW+L`8}cpEX#)8S+bJ6L1gnT5|)jc z8-94;(iQk??n`6>D7-4a#1}m+*58G_DISTqM7Duvf1hRhmha>V|Cs03@7D~rEGghDM z$|D?)QgTeU2l!m1=@=>y0PRHP#Vya0D;JL}7!kC4s4CN_3j-amG_u7|LlW~@-fwwM zN(i3ta!XW2vu{yn@h*Y!tq`}G&Ey`pG7h*jXs@c%FqB9s_3hsW;2L--{LOQYiWWUv z_KOv-Q|@c;OWId5f-^&0~e^mqxW3*?(V+l}kL) zeqR0H7T=pDqwm&Xp*OSRp4?~P)47L05)_qqN{RbTyU2Mm0Y10HQM%>TC<0$;YaCe% zc(TjpkBF|!5JvlBV9Ug}`}$J!oG-|HHZ(7&Ck-9$Os;F&M088K0obF$j$q z`p|#1>4Dm<*3U`@!mH@YKt#dTTxZ*va_Zf*n-`2-YlE{Ull1WIN?;o9xrQe)cN#wo zJk*$Hhda+O`O?Tp8RG@e@?@e^NgTe}YMyaj7Hek%e~5Ea!Jjyv2a0g6T^{&Pq-hwk zqESIoI|#*5B&`ZSQA)R6%1iH?QEzLEiBrWtRNnca4EsL9seGxPE&Lam69d$_tK!Cf zte71@=p-Ilr*>(5BX8wUB2q8NwG5YNrgPDpB3FRQF2B|ywcm7=ucaw1y zfy}QIx#H-W?%m3<{56$8J8v$OSA9}(6Lm8)#&9PFb4y#FUvcI$`LFc0#(%y-~*m~rO}Y9fd`SJv=t zl+?G*E~m~T)jhvNSs-gmtbFynO?(Dk+DrPrCI_G=cpE${F@Fp*dundF%)9z(O-I45 zhk5;WkBZT1h=JOL;xfg$_C!@1rH%p!3V*pxF&S3l!#SY?{Y#5emnKnWyn`atbRuV& zfvgr@j{MKkof|UDxTAM>p`6uXrs90YoR1?LEMM6#qNLR`7-*(V&pa=MZ)7a>^0y1-Irhp4`lAz`PR^v)z60=8q`2ck~WHRX(*Dy;O=ToEhnGZD}hHQVE-Kx^V-mxR5c%I-ZJ&+fRd!H zw^k)?*6vSwtrj=C{K#D z-uQr3HdPN9gtT`VaTTc-f3^3_PqfCS6Zecs2LaKmxuNhV^vT;32$NS9c42r_@?`1L z5U5J`|J|nkk5+XhyXG2UQZI^jj&O;WL9oCY6(Jx3Wa{}4{o68eiRoOC^Q%mP45??U zH!_jU7(%%Z3Aaqf?U`wx0s&#Q@Z2MDwo2<&~V_*_AazJ;eG3WvnBSFx~VH!ws8B*WtLKu*$2ljXU_g!TFKD(5U$b?;59jSfcssEO>98X85DJevhkjZ)(; z6m&m^{P#1ggso^Q%YQyGc%R`?kFi7g;Ha=}2$jm|^+u>EJ?@iBd4~4uv#s?2ZjfHz z@ZYudftZJnjTe3@K>YA>{nl~7R=fc}I3rnWv@0NY5UV*~Yg(ijk&?H#1-Pi>neg`+ zEMi(cK3W(oUpi)R{HP-G12FTJJ_TY&qiKUx5Wb#;Q~qoP`L0>RRev=~o)T{mKd~0{ zPQ}-eMZ}tr)VvWr0^g-VLq-TREz=yz-LlgMg@POXKVEJ`kKt+XW+gJ>i^m^VeS6S$ zMdtn-O@Cw@P0mB28}XkMHb-?5@AcLG5z|FQ}mkrCq^9ZC>>4u7A` znQ|3mVn)4ZxWZ0cRg9A_76syr_nQudZpF;)23gPkY*gziY!$R$3}w z$OHzJFvhJoCn{A-n$HIb@XWvF7h(?w7?I$iSwjlntzn$&P;q2meRo4uUNjPIisp0y z>8=9!nO_Y_Ihc%-!?8~l8|!R*#Xr2`SYrU#NMn````Ig;ws?)Gy#uB=;4Uxbc~=G);AyyLch%?9?57C%Jg@kKN@r_;o6-CQ&LSAdF|L(8&$ z-++h69Z}!t8k(sDM&m!SK28Id+>dclKAi5y%E1HS3|jY5LGAB{lUWhku)XJ8!a*!Y z^oe{q`cmx(kE6M;Q#zZhWCMpg9N!tjHyqebE2AR?sCVOmV4PGOTTPOM>Vf&fm1rIy`%TOSq2+ z^A*nVbLUpUBZmg{SEpafX}q2n!>$;0!6tzVo=@dtbxvg>1n<;5==Z+wf$|F2U-3%D zOlt~V{<+w0Z$f42p0MdKO0l(Ut1-H^EU{>an<4-^C*5z?$bMV?Onl;DQ2UMchWFp< z{6&FbzJMrp#p&VNPo85M2}7Z#k@h(sJ5dz$$A`@MuAD)o0dlEjaI(~E%^fV*T`zpx z=TP*UaBo(WLVS;p0jUX<(rJA(;UaUwvTc>>fR?_&Ir5E?lrj?NjoBGsEPew%%b7V2 zJlbnQ^{)cgeXirNN7;=P^(z5F4>Ef$(`DFBEa$vG^jy1@_aLY|nrgh{LjziSPKj^K z`{>NWI#@2_C$auB#Eh z`d=hbJN+Ksp*ac1An9w?q{H3#Ryhykql4_Tum+d<1;LMV47u2>zWhLgDZ+naTAjYN0FL#;9PME&m zQOlded76_DNlWd~lR@d}4bGhz{tmRChhd^;BM-;F*6T9Z{>^bUA#&oqtEPExzGNX@ zim7LG4h?B$_u2mJBht(4<1ZD*!91*_r|T;Lu%SgdKMaTX#6FwNxqjC3uKgi1szB-3 z_PXerxP11JKG< zP26t}JrCl1xm4SoF|lp`1PjqopGObM+jo}#3Kk5^Iucl|k{>$I)xSjYktY%SWf-od zfDwacd{a_o+#dEksNF;f0EvowT&n4YEhzjNbX4{=gyX&zK}(v_gp)njJZoJ~+40rE zJ|cCXXW<*yWj^Og@?2QCT}koBm1}P&F9M*JkDD>Vueu=H8}3lO=1~tnon1D(_XiiN zu()3oS|wiZ9VyU0w!-mU4)AYKxDh}2&c8|F0dn$-g|3^;(-%=NEe2W!8`}8(PpH&y z!OD?^7?|AhrT{f{k0yVpz}e;fiC4Utu-;_y17(G$J6_{FRy)Mv@A5P*@7}^!^p-y_ zPge1G^>>ctazB(ifQy~WEG&tLI}N%+qZ$6>P2u%9F8QkKeJu#WbDpEh)HX|IQ*alxiv72?f6tG5T3xiRF22`y3X2 z7%42IjW@kqr^~d#Q7&#CWiuXt&U;olvYVsV@TDBIWHwtmZ@yTe@=!OFl`9$2fWGGH zUj=shOvtyHH&6+r#!JCRt>+I2}SeLjt^jR-|hf`niF7MkhYLhXD|S4eBjo~ zt9DJ=JW>vUu`tggigl>fQT>XOahqkX$XIEDrHb;wm|dwVf*Yp zh@jt0%*lMvOyx)fssa=eC3StH;eoLPZ=}UgC#h$c#v<9Z{&aPBm@Laz-mY26p7GIp zhJDE?b(5s!6XVlwI`w*<#M>6i4YbWF-3L3GKfVoC4dQWf=UoE-Rhlmy#;%=6*&OFy zoMhGK9Sx{eVb%;0J+U2mmgkDa?;_U&oJUeZ+z(2ggw;GT(*!odvl)ZP_rur2GpDJL z^t#YFx6o!pOZ`?l@Z<;-T+&!zlL~}c{3A22N`~F)ct}jS7DK$1e5uyEN*qIGo9}lx z#tA}qL7vTn$@Z4L?3W;saRYK5>JbZTMz{HNEg(m?NsAc9K&##DkSU2WQ2o*-`{$l~ zC2mpt$rbTl9ofCHqQH9-Op{FMys=`}6}+#dxzrFX)=}3Tb!KGL95ktFA*uz<4OSC| zt0ww~o`7P}?@lHIRB*VED*H@hpnfG=m7ZU)A)vxgOuEWf?DQeMLI*DgMb0BfG|6a6;bQcGCayV$d zmWh*+TRHUmW*qU-2|N1QfLjo!!j)2AAoq6OG#O{>^O*`cOH7)R5uUa3e0Wp>N>oC8 zmobi^kfG5Pv;Wcj7QgUn#a<6ST%%G&Tc!2XyUezOUy9{QIvnN=PD)B9Z}_1e+Kalq zI6yP*aVJ|Z;egWgZNSj$utS~SH(p2kYAOX?iA^uv?GdF=D`7R1LuCTG%JPn+#fe=T zrrJV*sP0uK4-U3&<50%%iQ|t1l0E;%wS2oYZ6;_m8>6G>zGw&JUHrPjq{}=>1?IE; zuG4+>B|L&5x#=YAO2K~`o#o11zK+4segkyCK^gpuxMmNzU|)ipLVe1oY9Y--K0heAsYOHS za7JC7i@seB*DGyB3jo?Jd>(}RMC&Zs-x*1#iU*kVFU9yk7k_S3CVbm9V)3lZu)^vx z6a9ln?#pFT#5%F}&D{(_cYTUzNM7#4?iU>8EWQiBWF2b zY>~JZ>cRdbp*ww|-0wT4nQPQPSE0U>i4vO?#Or;OXlINPbL8-C^N*w+$oj~-&j>SEb60;~ z4jMg{7u{ef%2tHwGQXmd8+u6NzjUph-jqT#UIc&Sq)et7Y>;cQpN-hOjZ2lXaPA)d4HBW?6{s7gn&1&Tc@`^~PJXavAa;3`aLd-TXRn5JMy{bL zX}N?6li`vp4eirBs`ro##%cB9G6L@U9#y!o5%&|aHHDK6v_4TnbzRdP*a9xnYVwLJ z$7G)Z^lM*J$Fi=m24frj<+1-!bl&l7zFi#twTiY@Rcnv7s;c&$kuFrNmKL>3jaso| zE2&i@Rceb>MeRL<*lO1%BK8(55+S_L`@cWpNj~>;&bhzmx%_2Z5tj@o@^;axEX znppn=!`OY&)%E&(i_G`#K(7=};KDgLHt1dC$&hp{P=nvtZPPX~G<@(g6kWJh4UrSx zRLvsVfdeZTMeF;$X%9$@-Lv}jyGtk1VMX@Q#-@%Va`iXgwphh3nq!?cr=*|!O@kGE zzhaw%s@n_PH*253BTf<(6K@W?KJh9JbJeNywJq{vzXMJZTxC{^3o5i|X7Ly)wVOXq zMT_sLOoUjoeeCH=>RaDlYrRr8NeIXx@3=#XcwyN#}3vy;i*f6688w>uo4c5p4+ zl2}X6PGOuagMh>R)!4Q~$G@!ac`iREAQ)YL6LaN0o zlOSp^F+49UBY%bVM8iAtEQXj%)yz2v+Uf@m+~Jz%`OwP6bt=DwXQl(2Rj-~>SjZ?h zxzH>tVvbIZA@gv-%6!v}iGmlJ(7*FQY-UmZZ}_Ib0qL6e>()0_<@LnvX6cKGnGN&n z+5{HgV~tHUXUFuYBm>o-dQ7+cQj^%V7nz!q?st=)4&VEIY2A!wAlAP)YR?1NoYPb> zZ?d`ird77|ECk*RUl9egaBCSQlQ&@bd|m|uO@nZ%QIQwaF+NLn59)mbj!UdV*l0gn zP2*DsR&;sr@J`+QwjOSn`_KM)y)C+rVie)6W{ESL#)zlj0^nVoe59?pZr8N(W&2oP zkrcsYGghtb{nRZhdm69Z*{5Q{(?vV*X5f71 z;&xD0&&jywR&NcEAqXLeZm`MuI#Raf&6?z8ie)zOY%GT@j6xM(y0t3|+d@D0DUtl=jG9s5x@hHV3dGJ{hugea5`I+5jCRyT_Oym9!7OiRBmx zrTN7U4G6AN)eKsdKV<=Y^nF@_xF|&q&{yVaJ;EzKuZ@>lg7~jZRGihl4@+dvMPz&) zdcV<|`9%3Nq`y#L@fe?~`oO>0nck z+Co_+53*ok@@g)`u9?NHy=k1vTD^oZ6U2aatIR85Ks3LxeY2V7FldTX*E!OJ@$NSf zM309Q@C_z?$C1E}V=`c@xv9Y4wz|6V@nYA;o>I1!?QGPnro)6@y+LK)VmpKlZHrB=G;I>E{r-RN6TjM!Z-MLb)$KE3X> zjI7?DyyxX2MtUf>A7=m%Iy{!|`AX*)4WDR~avQ2~N-+c(V@xS9`re4ycC{|5pTBLc zFz_wB?T7{0kDI+0d0qo;YBoaaT>LB7_ONPtBk4y6oOAiIKKv4dAzWsB9XNnLFiw z!P}kof`QKlqs{=Nq#Jrv{b6~YM@qoR%V&=%s3{(8#at6#)eQE zS3FU4C4UXF%9apcl~;CvfE4;Ti|zT+gAuI7q|7GahqRkYRpc zS`??fbn*p}5TJ^$JUHX*a~nZ+P?PSyy>x;Wmi2@$u7 zVK>*tnMj2l7$h0~xq%NeIoAmB6G?ZnOF;BXMbhN!wT3RIZ#OPNBBx;AC>QvXm$?s( z<%Z(Y!%T6ioWG{MpDrpdYjZvqF2o`@+Ineur~Oo;n(h zk`3LISZ5(A|M5pS#bX5Nl3#8haP1LVgL52!mmbP5V%m^VBA7ougbb-K8#im#|OAXl$6SY;oL^S}VTet2I@6 z*2<)r+I;^xVt)JkHe^)d23}7nzh#G7(uzL>f49tL8ef;JSX7a>^0ko15{50)@$1+> z>zuXwBWDzS(J-JIUMF4i=VSb6id}y4GgF^BIyvLRhH;5*=$%Q-H3ObHAo&rMk8;CE z?tBgbY)+AB#v-F7O9LN&F&)HN(3X8HHsBx^8H+rt1v7tQf;6_u=%TRKJv%co$ z*KwD69u2JXK(Z~-*!P?ECe-8m*}*kXbLjLKM>iL&ZbH*4Ip~uPM{YcnZts+uYEpJ| z;w`N+VCkSg7CPO1!8{z7vhppPh)b+@0ZHa>mWb$%7c9DfEf2}^z&d*S_8FT~0SAez z0%ZHgbv;wiq%RCx?~<;VA?@!qZJe8WB9)X-HF#x`+O}%MaXD7{aOfl_J!%qE=@oAa z?qN4)g(6GpsBm2=Y-yKQyirqyOc<-p4%XQoy{<>gf|;di0efMDTG(Cp96es=_xw6swt3vyo+A%Rmp99E-{q*JW5G6Cv^B z|2WKPwGGaJ$`yg1j95ghGXk+{p9tlHV#Ym?%9yf}*7i(Vrz~1MAoEnz{U$r0qV(W4 z-v^V=yv%t_#dW?cuF z9(ZM2Q0?ugOEG#`fv<)ypCDB+{}dAiTn}faPoMfsvY#Y;NEatt{?X}4YqI(eAE2?| zmOU#@K-lOSr{P7|ZII|D?LZFpBG7HVYtVbYfnkQ-_@rFYP3N+tvY#vNb^BwH#Rp$1 zx?$h=o04^B;n-)UsD!_r>lMKo@|^4b49kK|sJs#YtOJUynP7gcZ17FVp7u1b`o~Au zh{bPc7it4mh1Fox$ZP(T-VeucDV82I9&RS)h{pr9g$VEOwC&xVj6<&Ayb#55)hhiJ z_xCY`=eV0n6yYqu-vcfhx&0E_fW`${tzO;A{Bh78IbwG9V+SHcy~joEeI0eQa7+-} zRBv1D1_gIE(f4izk8v9*7HeMI5cdJY&c8G;qSd-saxm(#H?6dc2wcq2pw-SN_Zpuj zB@V0+|L(t?N0Q}=aWZ8qy@au0r@dm!nd6s3zv%rowM<@nK5+VQkIcA z7&PDUuetWT4Es(GovgwfAFn^tdU8HEwAO7lpfBiMMvK1uF>3F!|3AhCR z8!Aga{y6%Fb-84eL$i?-AC_6PO^)&eC)9Zo6ue_kV{p^BEhozNvgN{FNXm324bfz_ zlphD- zPT(!0N7^{!A=rxO`$*UYV1y$842$ zQh?B30iwEpodM0AE6>?7($)3`0UhT1{=jG4%f78?q=^WS6HSdfWR=$E@#UnQ7EAEnGu#p7VT0b@%s(Ag?SIpU)mUBf z$gee%z0Y>j3~N}>FVO9(RTE67Y@3eRbU*&5MJ8jpPQE#^m!|WaMLsDTPz>&sT!D_K z492xV-xH#} z<-m$r@muMnI#pyJ)o+jPIk+mYDZM+Su;ucd)5idvYHR3Yd~x;?62-ot?5p~Glvrit zx7|9PSZ5wf+T|02ad$(N`b?fySg}*Dn$cb!|Ht`*yW8)6ZF*rv$JGWa;DT|}Zh+OF z)%OaoywoJ~rS2_d%~8~b<~zyBFW|&td;`)=qy~#Gc`n$$p>_RY3rUXkof?kF^b0k* z0ve3rRb7Y-U;Uagx6-M5vANHs-3Hs;38ePFu%q33^SnF?Kp+Q=wL%WuB3vh8Pg}o( zR?YRZOi8a4d1XT-gGJI|G3&um=E;HZCj^d#x4PnY>TuG9cf|)-u=SgJ(6*+CoGV!D zHk$=X@0+9nFMQFwn=LiSlIBRa$}mXw#KYI5WMPEQ6mSz71;gXiv|fpwRF@G%ckfEF zJ|f(Si6Fo>R?#*@vOuYRXjw+Ou=rm1U<%#jKOl#ud1uNS2}9$JtBw}iV=BBIGsTkB z94LJ{4Ros>yQY(0$vV2}kS09oCd3ar;+?7J-Fv6?j(?#(rYk8PD3`Y=Vl{~|fDJ3( z=uu1AN+4}m_~C=VJzff{IqUHo)O~&_uNK%{KbA29YFqQOT$55gSId51wf&#?7(yj# zf(wsNl1_CKkslR7+Dwn-b)#p(O=I@>gR;0MFcI;sZtKI87vG`%GXPv$8z%+af_^p+ zR_w3)Bva9G%h#az16H;NF>pr*} z71$zU5}K1pCt*Y9FPx0>xUd#J?O!j2d}-zWo8O?uSEsgg?c&7fqZPQj(M#yD{KuQ= zm;=FSJq_9Y`!=-#+*0pd3UMe4mMr!8w(@63$g^ibunu$4@pfY?D>DGfy0mn@Sce}p z{oee;-N&D9y>fvVD^SX;Yf+I7h_qj|G4?+Gyy7kx&33`t*^1WCR2u*bPLx}6JD2_qyXmHumoadx9;c!_B{^zY))?rYt_VRloX?mq6?| zV;Rz4_i>wv%!}ZbN2X-6UUWxdw6gF{aT>i;B(Iwo`;z)nyQzE zscP~0YrjkP>`vbuCOz8_m}i zZ*V_@z%@RR!6qS(xThT2{{xztMscu~Lsw%{p?9u)-maig=y%6uS3vsU7CThC6v2{d zYJE$5FCIX_S=#Z?OeSHz5Pnb~OP0F*X4C?-j|v>+lVF|oI7^)pKcl{h-5bYDmxm7w zhrq-Fzi3=?cC(H_)IIEapjgKcbar|Sv(Zr?EF?ro@Gs>})BTbN#3gc)6i~2~=B-1wMFSjH~2B!nA5>3uWMlU|42T66R5t+cn936xh@=sjhpM zh3*WMww;IH`Q+oShLn!o7lqG506|ElZ-JH>@A?lFWmyUYDh(*{WX0YYkplsZT^Y7b z_Lt0ME@K(P6aq>xIV?Mzoc7>H<_xo4B(mKP>SIqW$~Wg#9_*iS78~-aRCKr}r{Z!! zb>8pjf`&x<^B{+9*vA3{FA^JlXMKr0iNJO9?&<+U!r1}6r)Ry86*ZgmL6OU6yovTV zQ#epMY7F~1KIIXi-){YU)W;+FD6pNiIC zxar9dWdLiqLk8(~v$FT&VKbQ%k87MNU2oO^UQ}#1ZD8wQkLo~>7Jh188O!N1ynY-E zOPpHbZz5S;X~@qD3ubZCDO#8EKY3keK7Wa94!BsoSSB`<#Taf$Lv-+il&x_=S72Po zNTs=dw0Tnw8QoSP0l(j6U50`N-7(&0cTF_~?t%0v3tE-tVwwWe7~%7a0cx79hQ@s$ zQm$=V+F5OtD|p0)sEVKJzurQRlk@=BdzmgH{kOW$l{4NSK4JYEcuY%6X7Dx0(OVwZ zVmdfu$P#3GJpzh}nX)X;w(DoG+0_H@rVBc0erH2ufdmp+5Cx*L-F`*5s|#2e=IE$QbvA`zWBSr z!44PxDZM|Fr-rKAvFP0H8GXKFlAgkPnPqH3XP#nD41j>!gC0+9<^aUvZIz(hprC5T zjuqRJ_%%y{y2mieau93 zaxAH3Nf-6O5>{@-)N3AA<35Eo$=MiH^p#h)yHqlyF$0EMYdjkn{r78l7%R5NZ%i>i z%2fO`-CjB{GGT)J(wroI%(t5V8{Y&tg@33K(5M962p!`CvqV<+s|8UihkZ~x`ghT? zQ}T=^e$fY9#}9SOJc#G36rFwh;MdMkbBY}QxY>hDQK#T6I8LHw>fN$Qtk1$h*<|p) zF4-@m1OfF-Z-6pA(v2t}R41>@V0q>Pzrti@>hoPF&I(Kk8W%sJfZbSP&kzx*bo4X6 z?uDg*7%Uiv%HwjJUOB=b?1v*-lbYr2`5}X9Ju_R2*36Srf1ep+hbmI9@|QgiIXgjt zABZ0bbw|=|eOurcalCBstF@5-*t!%7TQSGB3nzzaX~!1X-ijRM$h_y}$gKQ_k2EV# z3b{8Nt3Bpz>Tg|s)r6Ut-}PKImKJveMOs-uq`%6u&G=>e6TaBXM!6ErP*Sx1q`x8h znz<<89p+Fq6TtD+^OSlr8(qs}2VB6PX%Xm`OM1R4V>CIJqwN6ehc4RbOLK!XwmwMw za<$R5=VrE35k6^{FVh$`bLh-;37CF7;j94{afhNSqKcany-qsi)~Wx&y2;$*_8#4O~kRT>0`<>>&tTwP73+DHvUZ}5T0ie z|B}u%?snjyM<)r5;kg|~wW40d@~p2_tiasaWlyCG75hygu;DO>{1(Ns`2~=wH$88A zRnfP??TJ+Yi4U7nIO`;{mye0+C(6k;F`yAzz=|VuU50Yuc2LuG;dq~8*>b9r7x?bn zjVyViN7kGljn#KzL$x(UMOeir09I~; zxfT8!Ih@>wj~aywHH5>BJZLNn)dypgZklima@kV7eB}L6Lu|Sa7ESa>eCu%j!9~Nr zgL#M4&#^R=9xKMsgHqP`!J8z^;8ihh3Y&ExLRUK;<0PNszVXb*G>2&gnymXY`UVtQ zuuS~UF;DK;|9QnAb10L~A>o=RCw))BH&-wf>cv|jL+|p7q|sY!TIAY9SDjIqX|eo> zS|!yd)>-iEwxWa4Yi)BFO>j60Vu^M9DJ>9idg>EOOV27GeO_p@AKjFAoRff>n za4MijIbB9-4MH41JvE`@LhYYZqmYkrd~|e#17es@7&*BlfKr4|B(z@1>DTBT{V~3W zLo(^#3R386rhiyV$R<_KbFw2j5YDEZ8JF{1wu+a9wtAdufBN}XV=*WXJvms$G3JlW4v53 zx#5t{>gSunwrj8B&`)Mn(Iilj5;f+7u5iF}hH=MtiOOH~+<8p$H-V0FCqT{69iAal z206Jy`f@3=B<`j+C;c z*TR$~^Mcms5NbaXa8grwpJg{{U#M7uxAd4U>6IP>bPdIMh3_~TA5mg~ycSY=>ydFo zvUpP-Vx=y013&vhxUgkWP@^8`dwTf1NezWcs zz)-W>=22M3TOsHb^FD;~Wh0|v^!~*vUsr8d-^`lo)MqM_zR!DHR;4}#6_(}hUBeT+ z5W{x#*&Lmp(eP^f>67bq>td`z@^6-8x z%}svCn5M~PhdK)*KdmF0l@yt?q$z#j9%Q_&F=NZ|q=fKp-5VDI)2BSo)i$A9D;T;; za7sw^4iZZ!s`KRqs5oAG=^S68K`<%HXE>t+*r1Dh)O^_m1MB|LLL}=Ba?vAlHGbkZ@ zTw9-Q-7OsOs2et`cf04-%`c*koR5UA z>HH3pl*joNqXt(tR^1_a&2=j>%?l;#TzJil)meb8Zp1O<rOX2_ka&bjR0y zuW*!~yV-dod!zX@5F3i@yCICYt*~%qf_9KOO_O#E$BsJ@w2C>zu-9#plljlH?qD>& zDo2TjaXEap`&61h>NoR0Q77e$Mf<)p800XyFsv{(I&^96ZnmEGWOxyI{-?gf(&y|l zTPKOKry_AgZ8THB9VletkISy% zkRwKz{c;l&1LC9hRb2+Q75+AOTw@8S#EDHID*U=8G;Yv$A zpB@&pSrX|x`z9tEaiJzcMo*{Ygx1}t(wY$@6D?qjx&|Db%a*V<9sZWDB2I5Rs20t& zKS%qu692j$`#5LGE<%=L?|Rz)pyp=u^W_Jo_+sJjAr_A|9lkTR|bdfihae4IU1Nrx=$>3s}YDK<9c|1Wv&Hc|u9d|aQmL)jkI9>WQgjkJm z)iHKxEiCFtb>MehWD_H`M$fW0R*SR$!PVFNT2zbFfw0%QupX^>f-A4hUA;7X9c|ng z`4K!KG&Lg}e61lL4d+AS^~*TCkoWM8ro8j3jyC(EQ3~wP3?hupi=KLr;Y2<#sV+aL zHnv|fqWO1KTT`U45H*9>O@fr&c|YIb;{$j0j)YEwA>WwPEpOZue|2h?^wthOb2XHt(^Q=J?!#A1RO!}(Hk<^wkMmc! zi~0zHk{!+|jAhhl6QTXY6}oxUuShO?da;W<<=HoXp|9?=21P4U@jUw2a=Sj?vwR)LWqOI?b|Bt$^{S5Y(YrEKmn?*r3O}Fb!=}UiH=LXV~NRzU}XK z&2=_KX5d-V?a>nZ7U82h)6>Kxd69*G3wn-j_lNRm@jC{z3s0RD%+EN?m^nNcK;F~v zXJLEtoIk!>qEH8iTsUACro%7AsWWu{mw^LULk=;(cVB@NNmF8&#;#3WB0YJ_IJvJm zWYVtB+;f<@iTlE2nV~QE@HUIg9IXsyx{X$(LCzW5Y!Mq&#gmER06U}cz(F1)7~7=c zxM)`$*b49~WgR6*`O^&HNlXueKGX1v3ZQ_d!_ZdH%k{Novj2W}>u)cKu?S(k<{+OJ zEiVqn{$;|B+^32}#eqo$hU-jy-43AcC3^=*K%8CA(_JE$>YpVYff#p}X9SnF{U!bW zjTSs1iE(zhcWw^?(Lo3JG^#J|D7%AwmY(6H+Er)q$(JBG@>}5jK{4KmGqgj)UjmzA z+lX&N@3VN)QyEadO8iUZ-Mwp0d{y@pw(v&F>66ziZ6Ia4c=9 zuy%)Xd7xZSIuc#YkL!x4VQMDaR`@eb^gHBYl)H)*3!n{@2n72-vkJexl-qJ`9ZWgw zn&PUn4m4t=lUmXXfZvwVD(xaVjsm1A3di6L_!E>Y2c&#u8 zt%ai2pFl$W@PxuCAYb(0o!k2#ZS*^BA+jx2a7O9?p@Zp63rAvs>y7Tfhgn?( z#OZLioGk)}r9BGCrsMOm zE`L4$F{}x~Lq`}X^6hzaz4q=?NV-XYp>?jz zWjN|m?vc;Q=fkkjm7kH_fh*%P!p`X?r3^-g)9^kj^KY2nkCkL>yWPaW>y`g$%~W)= zvmm86-H^v{u=jT<}=0yW1r&}ooeq?Wc#laU~B{($6BE&&;HKda17eK{)LpyRP~Z-sfz0 z`GooKTEDXY{l+n5=Jzana!+{<@$3is5BZradm>AxC`H%j7dJZ2H_&72!VEHQ>MhF( z-c+zr9*!OKSW$?3Fozv+Hm>y8F#Cr5SxCIWTHWmQC`V^0lZIyz9l;@TIah)5%++v9 zR3Wqcco4u69vdXO_;>iB$jN_{64)(a-^PmK)E(Ilmh^1({okI7vb5Eh^M$3vxvAQp z_>_FEi9Zj$bX)dcdamY9EgV8*+oiY|8bb112||`0ng6?a&B0Nx$xIc4enKK_>rn)D z7a9DyXq@02QbEi!ruhShX{ltc{g;RVYpQ|5ExHcsZ0HJx)KSU9Z&mplS;B8K$v>u_Z*577e3x}}-J@3K z@E_Qxy?GnXwT8f)=D{?ww>{p7!;*HRSNTi->*3mKW;y7E~netvWcK6D0%{Gx>i!k+%` ziY&mS&nCno;$vbWEOpEQ)APZ~cHjItiA&?*TBZh^fXDVN$jd}DeBrwr&e-DRo51>; zK|vZ5J)XMa&OSC+o&2w#MlR{cP{Y>{>Di*;J$|oZk#z}n`tv*dUXM%D&5Rw24I_l9CfdGA=cjcw9oxNkZ&Ovb(V!G!5F;U)?Fc~`!GI&YBk z)RT~|IO7gLYY81>3lAXM#5easNkNyz78YWRL zKz{4MY5rlx@?YFn>@0(e4kXX(->m#xql_}0I<4MkWl(B(@{}POHN{imYs|PSm=$z6 zd%E(}2Z<}k|J`>yjRi++Vwu6SqcdZFHq?vA_0Q{FcvEaE80m6C>Al2Ji^s3iO)5o| z5`;XW7TnGQzc}=~3xD`aiNgOy67?pZ7pXIaE9t527}hFOG0VyCs&iIP6R=nJONXCO zy|iQz1323|(xI5$kBW10=T*dp`0-rlr?{M&BXi~JEfh|Va~a>RFq7gUUDcXbJI}G( z-$vC4uQ{u)4L$PAx@!hL1P`U>q;)NrX~Yhox59$t9EwAt$_~Pbe{X}ZZ5^(Apzb|t z$@66=PaUhJsv>}k#241^poYFrzpH!UyZa2o<*}BWfiRc(DLce`mvjpy(ng~Jp)g+n zq?aIV1_+0u-g+PJ1}e~LfySZpP!P97QFLUwXn**(@I-Ng`kUyKvQFWkZALElM6g+m z?+};ZEr06iMEpE5d9zTu#ua>vfbH1OsAk$x55p>o z(m{jtlf-8YlhAJ&!kYtq<&2!sr z%4+cxpuOq#7!*Q#oYkfY4bLUAI3B(ak|$K(LkgmXj}7m#w>OdFrVo>=@@s^6WTl>+ zn;

J|~qw%jX1mxNB?z9#I;eUADHj99Wn|m%Nxy`HNU-i{NX>tuF35vBnv-fN)9{upJ_tn@N75ku;^@*Gy*>GFE zzC*R|Mv6{-sibGS4(B;cVX@7v81$Aw0=MGTF7PxoKwxt95|#GV>O zk3lyozUJb`i>(=lgP(OkT~_VzMm8oR;W7sT_7yj@GUWBOZITxUoAm8k(%|Rylhtr! z+H(z^CY}N3NLWCsyL#Glo}u@44D_Cuekh8)>~CNJs6?~*;zD#>@Ur%j5-m~c>&S?j zevotkrx?JK2IN_6^0GVZr6l^5G$B`gI+l$yWLY}%BN2ZD&PqA~@Ltd@e)!SW)A^9g z9|=r}fXMv5r>7i~f&Uh#vr!6-zE) zDvpyXv-sZG=YmZ#r3OFFbe{tLF?*1G0?}9uCUpG9{wwE#*qs>Xp~-RLpWw{3`wIk{ zr{8f!GViL(ER5A6Ki5^Xyj%lhi+b|b)(b*n?u-SN$rn4XQ#GL4|k zar0SJE_~HxZ~8yQG~RTzJprH9zw+aPEDGyaSuVNf;V%G3Y&OA(QZDHI`fj*mke6L7 zk?d}PlEk7)J$3}#AO7&p9R5}&6se8V9-2(^l+yIucVy67T-q1GzE<7##v2!XWM&gR zsg`7i<`otx`Z^9E;V}k6>-K#&E@8Z4>9XsC3;C_O4*nl!#wwG_w=XFj66Cf!>CX}z zoIF2|*#uLXKjpBm(qridM!?OY4sG#fG)b$NNA%!`3zp-M!Qx!q8}?6I+ z10n2)i_Z*#=Q~9+49%(89?8t;A$i_w=i+JhT-5Hbm$r7HAANXnc0)tYZ}+w1%!*2n zns|`8L)#+9!wc3It!jbZ##&q)<5NRg5wr>HVh1FP{jni)xq2@wfeEs~C3xRw{3bE6 zVI=I&a`6FT5cI$az+hR~{1ve`>d>{fw(fvQCqKhTxn*e$d^WSe2`D9avt>Y11jZWQdNfZ( z3AwP^NaZLE?Sa;TtqPTvB=>B>ZYgZsB~<}{*)19cJu(TEL&o)g$gOY}*>+6lysK?y zM`LJiyhr+6_GpOHY*%pOaqV|$RoO=(#mmIMevTKng&$5&Ql!(k9*%SjnGSQLm$>;o z5dLLzphTc(T{!gN=T_wOSGygn`0`v?I_hq*xQG91kwE{t6N+6HA#bJz1=fH#BSc{K zSf=UgB~PjUYyu<51xw9yMa5dNaLtSV(wprODw)UQ*K`#`5Rep4a)6p9zIjR6Z2lt{mbREKj^ zJ8Dz^FeXnGbp*%XizU!?(ytbLzFS4OL&n!H&EAikk~DVL2?{^+M9+-*91rPIO8|V1 zTP&5`1_3+lF0z%QZqili?j3ZTgxlxv`Xe*!Nr8w)HKH@oWklv&g{z^?y~kTL{QdHt zd_~{!p$U||SahZM;H3-riJ;d(MLJDOwzsmc3i5oF%64z=>cP*}AFX1d0*BGveSHeZ z&U~Bh#k&i7vPd4zHI5!xp_`NSF9K>$hVi+rZudMZ8e{4He3IWEC52?xs#)0x90?99 zdU0v}e8@egk8eQ4Xq`wfWSbBckqckHJRV3Zfq$21zIPR%`W$WM8R{ zF-S8f@wkvIx<9={mZJB4b^@e!cUiFhNpAaDcoafnVcgEKy zm$Ghl^#(`4nCU#vFZQsp@5fKSe)z#8bJfb><#2DVfHZWePB857w*|^2!?{coVcOpp zcb1!!dqAqW4cE%C#VenuPt~bHKK(=ge(fgW@<^YDdb=peC^OS!VBa&E*58;)H_ZPDfy}f?H|B@vG*p2LICaAJLxx>QIc8CzAwzrxLmMSXYV_9bWpKJ9c{(=Msq2(scvD!_#c3}0RKx*Ga8L5wn|4AWmdt74!u;}w10G@|z9Fvu zT7`%AH{nlC?<FYzCbG-hTjVig}MwGi|LO2ZPQYt0Ywes2r@ zkeSh)Rs_AKZshbE{HL5Li1X&jJDl3Dc;e3I@oJ!M6jd}0CV+9*qCK9s^c63<7a{6tos&ZvWMOM-%Tzu?M~d|y1Q zp|WJkxIfmjl{u8}rCVNT3S*Vct{UywUR7+{{413;X*e+hhrn>&CJz3%zjNWx3Wpo6 zhroR4nvOGn1#AluK87_8>#fRY@$oQRl$+yDeLb#i|0`E;rmYmEnK2FWo$BdFgap`} zcQ%Kl#t!c-ViV&#W$$2Pce9w0{HsFyj$OjMb9~y$lnaZWy;%?ll$Whnzh4M{CUv+# z=S+)5D@D4UQLxQ4j4ZO(EZyjTg0{*UI7NV;5`kLUpF>wo7(LS8%E{;SujpHL|fj>9c< zHYdcyO?|DGJmsVtR23?`z-dKlZtCP(ZU-gxfYNWv=H7McMz2CwT7@k2Z?t?ozQQky zoFAQSGTRgI{#c>XOm-VeO9R%@Hu4YGu$eM@&jL!zm^z{>NFIx&mQ&O)CzMr_dzrgV zKjr1B0VoN%WZw4i1oWjfW6|RA@xBB@kKO#s1JOau{aT?l?Ce;`S=_I)3De2PT02jp z&qiEqV^#r(p4Z_?cnD>O-q!p1(ksK_iiHrZr7R@_@!_2NNnW_IC!7Y7AQ{2kW8VBndwbjHr#XmzPPa`tgomwf(7hsHmc zoHcCe#z4L8haSql0eb9bbeAqC-er*+YT3w$LYUprF56SPuq}uT(%P;02{N`Htzi4c zhJGM_NFX+dVzcg+Uxe0W7UcUU+gtXG==}*aC|6CYXW}o@ZGo+>tOhga?Q)Z}Xyj$= zG9>4`%hG8U-Vz@8hqq>c@_yrsr=Rb}J;q$YtOxpA_Xbi2ASxnUq7#NQ#mR0s4kAex zSgifA^UIHvjP~?ZRW^#z;$BUsIZ`@vD8;C^SlyJ_kRDn^jgv)#{)F{<6$KfcF=3pH z*GqMDcf}NC@AG@MbD(O!T`mI>wmDyGB6Gj+-f+XQ|9pkj6|>}xKTxtODna=g6kEDr zurLEpf?Z0yTRxi01GZm`Ug?Bgir0!LMz|P*6^P7%wA52yz#2Q-4-UU;EH44yY54)G;$A(G*X2L z)$*QM`Wxft+r&9Hdct|}&ZaRDSoBZy-zj!&T@&^C?b7Wl1_N)dx_TTYyC;@#P8Kvb zyas<)L(&D#{)+_5Y&WZ(ncZ9>gdeOKt!fWi%m1>Sdox*}h1nM{+<)HlNK((Xaaz3O zgNb-FqEmgNjm7OkLx2OW^83|!aOoJ`>SmS8+Q`ckYl`)o7mXRaRp%fZAvG>Pg;6)z zc8+41@lSFKu=Iv614hx3RT!5HiNKc~AR2mg7F(TBNy8%i4$Kln$uYK1mUG^3y^`nm_teuWA0magFeJ zaQhH~xk}DdF1)k8b5`72o`yww@}+js8YcW$j}ksxW5^Uz7JwVFG+QC-yDtnZ-Wr&hS*-!rwf{s(}_ zs5svox@-$vM}Cro>r_Nt4H>`4KZ?%9pXtZ{;@>`n zN+^U}E4Rumxz4a87DA}pFA>UZZ0^HC2$_)kkmQ!@a=+g#x5<6(cXOFLGnesu|Na4w zhwc4%@AZ0}bDn2*W%@telz<_E4Blx`s)bWSL4fHmCnBGP*%W^|Pyhurh-|-bZoFM4 zKYM=#_MYl|U|rhjT@;=XV@755VU?|^mCE=g4^n>ZNV6%JumIl5b(x^}3wu5_kTqY7 zPKS#dw?DSZU_r}!k&@C7Y?^T#>@K?=u2N`XI&Z+{ONCtC z@?_C1H(1e!1rOMhJ;(==1#-Ojhd>a_=uM)&uwuOLxz;}Gku=o#T;-RQDIGw%t1U##V$|%yye|aS6a)m3@IIGhQ+H;7TYqElTrA5pPwVxpd zp8q8-A#$BE-crMTHgg`~(#V zec3<;8N*RkxZXMrdYf%ssFwud*TQ&#rHmG1M~Q4*sq}jLPD~l7Dg#4eK>dRN@slr8 z(exkgFEMQqK)QyRHx4y7wLd(P*-an5F54V<(E`}tUVFw?nlbqxc5dWUHbZ$lw$^MI ztL%Yicd2T+Ys9|X6~Ao19zT&`t_N?mIq(T8F%(%M{77%{dikyT)v3;JZed0T^ymyx z$EnLK{g*K--SX!4y^=F7rOJ9<9ebkC^WUc0>+DroD&@+{U;kW5xtc?4aP{zhV4D}- zL?W$ypKJOA=0GF1qMN_dej0#$w4r}A|0i_xr&e1X zhl-QW#x3Clhs9yni5CFM*N=MDm$nT6rdTdd3LeZy5IGCQ*JLtXoy z*Rz=kglA_x-+ZhxY`9U#hPF7i-n+v*r@MUB!xiXgg~-s~z;$3D>&r2_I9=U`<++4< z>iup>6T#UQl<^ezDVDIS2X%&dJh;Eh(FlhrFZ@X5o^{Py%mNS?%@;;0mMv{f^1Dze zFyDhI4Y+}I7yy$T@@udeBhoo?zY-;S`AEbAT@Dp^sgXud`Qaj;qv&Bo8hG-TIP3yq zuWLV^;{5`?WF}z+$uR(ffb(oe3#ZLNx&`ygT6sss|E}<$2Gt->C!5_r2C_** z>ysHKEgHm418|M*B9`S3-ww|V=F9BG%&`PCZ~jBQvgN{$y}5+pl^(Obg=chCy<#vI z5O=w0Fjbz#^YMwzuqErH!~I>T@xfZ-0-6DC9p<}~1BV>++0JL>G-%z}FWq;UH%SD- zxtv`w0F{uz*rv9EZ}_^kD@GgU!AMc@{{pGy@gOe-*w54xT0dMn3G{4};@HH9ndN3X z;M_wmG#}&qhs)BAt$PPvKFAd^dDa+wCc9`_?lOou#lDiUE6fnlJ=>jg@!dut&U!3$ zN;(hsEK{(#<}HwJgB0IiNm}3gB9Ai;%dh9115BIYq8;g@vc`Fvg=l% z9xr#!%*#`9G6S1|i(6hJMhkPNXPC=wdab>>pZ17fW51-l-6lJ~C`~}ld<8?#L6YlM z0gHOwh)S*z*^TG5-}l?GWae}%xy8kLFEkUTyzvFtbu0g{f7qt_glFpn?>C`kho{L- z16=)Y@piv{EPehktw`mmUWVYQPoZwW*%p92$z1M(_!cgVfv~Jf{Ot*Lq2}*MYwul? z^cprfheZKvXr1@$Xx4gM|6$69BUbHkc{4|rq3n#ia!TGHUc_E^Sg=ya(MLO1!?{iS z=vL?mym1jd2iE*x=B+|5=fkRMoG7KpJHDiE%=%=VVXzElw#wjN&DdD8dJxaumxle> z_te~p%+o&MT*MFo{L={{A&s8uSH-oooc;+B!KiwDKGp^6kVeO;PY zUFVuel92Lsoj!iY;BBL`6vSAv#(56@LFz-KuUe@()7Hne4`e0WOLPDZm+t?#!V1zI@5crSt}ly(E?G>q#x~7CIE;(%cB}bMO}>e`dxB zyT^nf;DO-jd&{Un5!xM3-DMyg&O-s8R?RiYninYs^O#A}oY(hlmQF9E6OQ38vt__n zzUHCu^@Fy_1y)g))`>3hNe~usG0EQV+4!1f#Bh!FJi8O*Ro!eeJrRTnw+xmkwaHCr%MU`Y;QHL$jQbI(v!h?J8}n+D1$D)Ob%_)!Q9x`uk1?QlNhsquU0Cx{nia zQ`o=kOA^9s=4YOsa#+Kz~?=Vm}5Lnk3HWN?vWRUhOODx#( zQ3a02xkZcv2+vXD%hLn5BidM58i${rSYC(gLXl?jU_<^|pkBVo>Va4nk=NC4c)$1R zt*y|}Pi^}?2>aFB)Q*X}yuyR&qAD6b4VW=6#x{NZPr_-Z z5dmrK&d1KiFm_hf(NAQT8Q^7gq=yg>fp@F+&fRiy_lQQ9jn)I0qNpTlS7lWrdI4R8 z*us6YiV`sIDy5L5mh=eG`P&Mz$;m_QxjAoN?R*^N0O~sI5&z~dK44w;JvZ}os8YCi&WqFl*wOS@2lQX;H{61BCJSlQZ7kpG+E6p}xd7}RC{2liMLZ)(q$gm>24q|3X za#EG0QL}MT(7W_Qw`YC-IFt8-636J3k;-(co)~_a$#E=P%*I~k$mm{UVBHK03E_7Q zI7I39i5IBG;+6b~$h}ZQ9ta)2WZ$w?uwxqnbQE3t>YRwc<%QdCI1L`kGMWt1i+YEb z@p*`$L?_NST@n?1w-JB`N?>`_&KY!PJ7-stez%FlMF}>=!``(R2;Mc*J zi5e|>76}5N8k8Uu-=7MO)n^jSR1E%mrRR;jD}P1YBEIHvmT0(^sg`wsugoJw9mUa+ zV~Mfx8qOFrvm@j)+aTIHu4HvHp<9IX!@Z4kUFwkK8S_!6nr^uXm~L2mvo}Ikb5^vhJr*3QoeC+?W+d zD)6LByUibL;muK#H5&#rQq|ARsv}GW&Cxs?s@tjXeknn^^$v6UMnd0Y+L`C8Qd${Z zsSQwT{jXHzPlyUY_CHPX`Jupq5EvEmG$LG0cjv>+j+QB&y!u#Uv-3-Mk4I?_B%2qU zmH)?bhTCH)!1bSl$6SEqW9bI zN>Mb(lW(2Xb%MMbv?Z`d01e1f7uz-7=Mgotkd^17ldr8P+uaqjjg^{c<6j2b(K$Mi zn$2g47-!(ec;m3ajNdEm^cE^9y(}M(%6}(w>%NRF0QX8izj@?dY7k*njUFh#zs7X5?X`0agWVN0!|T^~nClE-&*(|zjEvKa*}<7#A>s0+#xb&J~z zp6F59#38%r)i3h*T?PaI5M69+@K3IEX|Qy00=My4D-YFiwjcR)<$Y=q?XkBL=l z-Pqrxkv}TEEYbV)j*jTa`1+ma>n}+EZYuL!WUt5Rh{m(`-ld6F-eNBvyO>x38) zliElmEOoY^)_!4^MaK>H@}_rQ(OS4RX626D|57i0OkXi(gOHz`2ZTcBis&{IVN6t0 zU&lC`>y}abnxmOO4Zvy$52o?*+L1gsUQCM*7NS5i*V&5uPCMN(6cexj62OOwUK%Rv35$}fx@X}{xoLxVQuGb;`&obg1)TSb` zFJQJYJ~b4n!|iTc8k(;4zIIrVDN~ps^htKHlBu`mF5HAJ_Ja8llh?uje3lu3*k#Lj z1FO{P{lh$USD|xUy^n+;6sEPo8?)UmXNHFXqfTxaLf100-+;RLCKjnk3v(1SvaB1H zN{n5({7^lbm#P}Ic8xNF-N*`(+50fCl9U$JIJTnA1!6jN+s6`e97}1Flkw_f0}s-~a0JR?gVveY!iM zM`JGFV9d6Ne4-$}<~0)_1a9FRT28k9(@j^`c7$p2-A0+%Ooi*SFK#B*Cf9xhB6Dge zgnQ9)F}o;@C0CvD7M*Yoc%e5HCU&aA{ryc;V}&qANv-Me!&yEdx0@W3_49KZaU{;E zL#LIG$;m&K=K@AjaH*-Qg!fxUnXD9}Wn%KOX|lI}HVdk}9sLmcBa*aswfcHfTbNI8 zO>XZT?>+MCn$ZEE`pZvidU%nhEo?x!ej$V!*VPruMq(h#sEHHg$9} zqoq9fakgvcTA?R-JaEWhjZIneyYAfdkZiNuZ}@9gcBZxmClT6SJ4+cs+tpf4s*W^E z>tluYp^Zy(T}(8Nc|7z@_jWnlUI~wS&nXcbUS1#lRO0M=X~?_EUqUkY^dk{0Kbbc= zn$XR8V4pY{%Us5-#N@AEcrcjj2br| zNe_6m>&vq~UNk`IhdVgxfl&~6+#FwBOK`fC&cIV5_)B)@L)@|8u>}3Rng6BE%JFbr zdYV}`i%lHBkK^tB8PV>Z&5erOGGyjEdeid#k>tjzn=2iRyrfZ(%j*0HcsVJL(oRRU z$|eL6lNe?Pdv|of&t}iw*=3cu114|j-^2EXw;)iAnb#c?Ibbg&mY-A)82sVeekDv| z^MlUXpv9)_j#V;+1#&JM`2M-)4WAm1UaYhf{jMwT1G&{UdJ?_!Md)5E1U$4d$yd2P+?-MdH5hRB}PKZ#@ z0>!^};MYkuQL%F>MVR_b57$a1=@ODCSz3ZRF6lSShD(pVEGgFlAU~IK&^NXo+W}%& zO&L~gLgeHNiLQ*6SG>DM(RTY`t?0O~t}4S)L$ltLpFyd5-?Yy3V(lDQS~*Jk`*t<2 z`1xaR+Q~HetJ*nn5p9Jm$O&fZvud5}bA;0q?!ci58yPJ;4GIjp#8jDAMk^yWB6(e= z(&I41t@=6)d>X?x75!^mS4=>TM@uYxieGUE8!{zH9-cc3`SUk$F1jzpX_mWTWSqbx zMK3~C#gmn`*0_Q19f$9tzM8RDlfF6WBH;O8V+jGFv#&F)=|BjM<{X_*P?z)=LjnIz z(GmYa-JA+LwhN{QMJtfAva@u(GAJN8_V`2H^9&Dow12PgFz4)>Ak-%fLmJiOnT}($ zv8RRmuapr{m`RWiO^H10!Z^3&X|?FP^5qD@Am%XxfGY0wiKJ>3qs=WnIcHxDgs+X7 z_Raqlz^Vk#`58nzoWM2DpDRlX3fZ!#5&S-lJ6o@G9hvAG{6wtvB?jle3@@ z_0Hv)=)-7V{XJ6WaNw8h^3#7+(^(H-ZelEAY=glN* z&T6FR?eh?U(cmZXiR$C;woB`8@|)xlZwHjo!iTe--#AvJ-S%#IgQz@Q(()7unfMF6 zS7!mxQI7w%5y|_O)^DT5Qtly7q`db$=G=3Ea|-T+v>LW&IoM_SU$5kOpEPkg)^GvF zz$XOwXpaw0Iu7<~<)WT6}5bEDplHN#5_RroQgSGkX)jp6g z)xB#3%6%NI2ji&si)~+iZ0_touRoVElm^0&BOP=;EVeRFVV9S3KtfUjd;g+**x-2&K z8NT8pLTQwL3nJ z=Q(|3#Q$&>a?ebDVTrSM1QD5%q{iBTiJ^UW!Qbx(m5DZq8CEY9hjOP7*t3-GxRi#F@2G%e{u z^9e%Pnu_zX)~2j4$Xugr!uHnIpCGR&NhoRGD&cssnNE-qID5!1@1 znRIfc5|%fiWrS!ps{^&Pi$6VGmM$@fd!cut7;0?;5#sGCx{l(q&#eR2CF;7HiA@98 z+?pLdleXiRdjPOA(eW1eWz|JUa`dkBNYb$hVE+J3PX4<)@hxTh+b?0B1aE&y$L6qy z1LHFu>z}X9MEaa2yE;VduGj(UEU8<^2_U8VF?_)-kf8Uo88x0&-1({9j&69?e`oh( zM;kw$@Rq@@2O;X7l(Z#Ms%u|)H$c2tDpysvYus+g)cl6xhg`%M5@eR^xV(836gm6l z%=X*9rHi|}V6>)LHP<0ox?pt1uj%w@CN z-e`q+7mAIpylhSC^6>NDe``nrqX9`uN-G2`AArIwW7c8_)b(O>P88E&{9GL5AgLaq zndVCG_)l(jP4JXwN7+UL``V18AcLXpjgEMU7=3zKGIx~H9Ukq=N%g39HQ(|)*V?v< zvX2L7!@|0f(h?H+FAN`(6j~yoZX1()lZaGnJ z%hry$91_l>{)1`gj5kb9r~j0Oil(DEt&c?9Gwe?r!sZ^)9Jxn~j+g>h5j;dxj!^AY zsp^jZQlyrf74Etn;IKcPMwsWx9W^p^7_e#y-We~`QjlGJ z-;Er86;QJeCv)+$Paq)(mi(i5#x;ed&5R2}Ut4bH@+?Mn z_@{0Q-z0I)eN|ox*S*B>|G;zGpZ!f!H5;oB7GQlhrk}X7$~`9f>%GCH|0L!i@Xs~{ zS0n%=2)@Vh|vlKxL3zW)Gz^iAqlGk%Iir+;_Q*e{P+L zPyf#S0OI|RfZ92o;nsF&)~KI@3Nrq8!9kIeJ^qBy4VwU^#B9)H@$nYAxv~XpdE$h! zXq2>Prw~CJ{d6`3^u^QoV>Bl|0Q2o)Pke%B>QE7-KnyBg3WGzwN1LWA{M#>yE7(Rj z&2tuLan%SYr~0azmPVFGGI||YK9&uK9Bd}enW>|pr^MUDK5d)EFl)4oK;=tSx<-0p ztnI9F$~Wx9o{L8#v@5j*@&{n^xo&+#K*!b~K2^ufR(va)(TJ^&NSvJ0_axM%iIcFF z%HJSmaIx$-p5yobfVOA0Qf~WmF@=U*HWTojd!U;@!F3 z;{VvVC6)+>PaNpQ`hU2y_+Gkbfi5FR92idDh~BC3zs&gT2iw`7fq>E4L;ZkxyDpez z>n!>i^52jOmy3N+XgL|EPEoX^J38pWVHAIVCi72%-!k8@mE`cRE@z2ufO$l!iU@{Y z+SsrRt$+8cjL-1OtjcuTj#b;z-?3Pz(m}BKeEVMj-L7JXL829?_uW+3{a9}qaVKdxeC^5HqJ`H#AH?hxM}fYw zRiOPrjzE-kH+BHKy*jdrVvJ~8iuD~vT4@3_C}H`e!NnHN)urTsL*}NoanY}A2{>sZDu9_kNYFL3wpA24(QdYb9k`qm*+tzX|D56%8}Tt{4%I=GmYU zuj*M);uix$J`rUHu4+{aX)jF>%;imK?$W7U`rFK&{gKFEN0-Kh1+6;pX_WKETf(yzn73 z#YEqhVxvR`9FOu?)sVTS2czt_kttb<07OXqT%=b0i6K00%3%4yO4PnfOR%->5W~W0)yQ+#?|7x}rfazO7Y@LjY)u&;?i>u$w=h z{ga2lrDrk8tGT3LIqS~v`m;rYwmoyCa(x2latYCP{sY{+E*JDf<~ohVr3rZDQjR0n z%|(R@8DIXzTE5J;e`wD=p`VqgW1vK_7O%p=WQEP;X?>V?#KZ(D8w2kA+GfIOdM=1% zJvvzPX@3lxM6~n^zE%|wIO0EwAEvO;I4TZ~gC?QC$X=i{E#CN!#~%EZu*ZutL^GY! zA4ksrSU$O;{n;^JPJX{^o>pjur7fv(m2*zTP?EkNZ1LzczrV8PBR2oTT{1u`SwFaq z!J6z1=))_m9!S(PID%X1k?+l&*Rp?xyzl0yuQy&7??HcLQwv7US6{+GEx#K9Xb(W4!*^cLQsRghF_-X@7|YQZ4F^jzHDG>uAO za;lFq4^}REj!diD3#5cbv@;HKhIzVG>(sqQ;6}NMDX9v3%e8AD99mBplV2bCJC?sc z$kCr!dz@28)Z2V2M7F={~{djf9O@z?7gsc(7rtq$Cz>Z0)E}U=R$AxVszqtH8I@7 z1j=?pmVRdRprRcJNnf<`4Ap-8^_4>M#Ps~nH7O&Fa7o8PZrQ9NX1kiJsF3+!jtV&M z%O1D~c;M9mUKcYE0kI zUU~0h$=hbd{&(F{dE(08P&--$b%b)IY%-WlYe9ZiR9?Kk-*9FHjF;bLYiP{s4i>u) zLxbP)+z`YJjYk`JCRlvoUPd=mcB;7GJ4Y5QH-%&Wi6e_%ShYyV~KDp-CPH; z6TxvN>o6~gK}b~>0IzmZW}mUzI4!XoEEt&HqT_J7-_#j$DgYy>SR_X$bKF5QOth!Q zDZQET-lZ;`&Q&k(gRskJD~87(rT9QE(@F)a+omfTQWDbCZuRl+a>(}%p0|epF&Ayj z%nNv3gs^ujd*27o1&O z#NFe|;d@Ok$CYGa8l;&2c$VuoVU!6QHyA$u9o z&gO}l!t(9FQ$BD@L-A}*8xAY7Z}K)UJxFxI#E|DGLT)`?`xLajd>5fUY~Lj6$ePVd z1M|~_Aa%R0*=R^j2zC|?b2WO>ZhJ=BKvs`l)NVjD`u3S?iA#D+Ig>JfVP$b7Bd*Qi_aT9HLki`<*fnSu6SF^9ZQ8rXyj`+P?^;v6bChTCrg*|jZaH^ z{(V?O&>iMV53^Z%$IeHv7+8JQmDSn2K_5u-|1-&(>MV!24nwxypvw@nlD7PIi1OU@ zZ;@ony$22^2eCI;_lKmYeXVclH4?`KIQa#GS3V@h zZsX>^aVX*bI5q=q&bYTZ?YfIT6?`?RlDg9&z4kG;5UXY_{@uAjs8$Eevi5M(1_WUJ< z^(tF9H|zY}rFGS`3w<#PW6|XhTS%*w)0@jL70&xP>~$g6NB_;_eB0r6Y{{m60(<5f z9DRyo=M$A|I>{rQ_hNv6@>xPz?iiipgB1>OiHgp%sq%YL?xw(19u5Q@)Gx{vs@rU$ z|G^ZdcJ<c z;6&AR_?(i~`u^l9SSl6V@Ogdy^-na$*Ou)>1&;eJV$9}LASScB%1kuVe9ZsGX0yvW zE+Z@9GlN4}YdB6Q6PB+e{Tpj~hkNCTybqWg=szW@b9+2%%RD&FE|5xLBZIeARK$IJ(0I2{-c9UsHU&B(qhh-VXu}agb88p72#44}z zo{kUi9mGr|*IK5A{P0KexPW?2Kj;hWE@Nz}{(hmBZu8kBrY_(SfvI961}tF6_aEj%HSE3a_f8_U1=s>(1Pz*k;kbQo+|0 z-Y=9f$wKL-NEmRRwvZ;i&%}o^vyWzN|6)e2ubEg{9r24QsK-36kGyd<x~BDSNH%`F(YrCsv{ zk!eSRrvBeMDnv?zb55f!^k)GM2hC~bzP2j+7jw%`>MPdkPj#3i2;P2ijWx<}AnK+^ymS^*eRiaJzuIHmf!ACBHaD1V5*Z<`C7Rucsv_K7z+R#9R@~QdIVm2= zzZP!Jv`;R}Py4QH?R-=6rPGH?huz$JHK9I%O;mWrVi|E_ymMeZcJ^m-j1Nc#6P;FO z+nBWX?&qO^G7Vn=mFY0g7oYy~=s0a+i5_S|-EkQ>tuLydW_paPUT;-9ipUVrs8};s`R;~Ft{VpMb z?%(5$HA<*>3#WpxDuU*aP7B# zg*!3_5wXzQTU+f3TtPDGYn=O=qzSItPbJ_J#$$QZHGqH+2PU&~_ye6hcWB@*tko(K zhM$u8zpm^ExK6F%CoS3ha35OM$}N@tJ9q1%o69vGEjAd65D62geR19+Hf;H1O*?71 zU8RR)*8I<|OMAaMx2YLN?H*@xdiA14XYh!#0b|6K-m zOr%e8ZP~zNcM(eMir%*7%dto^r55vTBBn>r-i{P-jE)Qswjc%^z{#u(M_Ls*hj|$K z8p2n$DGw++-*hv_nMZKTXd#o=Wj}v-&OXl(Sn;G4u3Pdxhp(cO;A9UuX;v8mNiTK; zybo%z3ySXZB(2e!X3+afR0|%JuN4g|PJ+$_OI3Cqd@C(qkaq4>82Sy9I`EtyWj(Jt zGmF|wresRATA~Q~+eF$6+h3!^l^0uX{I%t?)^VvusbAIY3Y*e@_EcFr7Ufgk{2DUG;*T#-02+2NuQGKF55Kh$s%?|tp>_~EnReZtxuL4h|9LWJc!kAS}XL}cJ zK5x2PE=7}V#_wugzl`LlrW<;c?dTlQK{?aDOl~ggb-{4WOZIrzQY+* zN3+*5e!Kb$$a@W6a|P>pzoW_TuG_rcjM)t;wx8P!Ai8wAQ_~F3 z6%*xRMG>2!SFH3g-=yB9)ASszn*mZ<5sYVPA8h2{_+^^3D3^`(aht9YK7pp`b<#sj zJ?eH`fR57>AKMTY*SR5pb(?66`Mv$4=An^}$2ubVY;{emrD7CQnlapt%>^F~1XpE0 zEq?zqsQs+FN>rIeyhruGcY0wb`+f_j<;RzDhL3|M4p>^dxH4S&Y0%bxVooOK7s@hL zoc4*vFWqO9{S?;qgmfD3s=PG3{IWK8-?DjiV?`o8e4_PR=o40OT}q)LP|g4g4ur(y<<9UX1h`^ zdwI`)ERROPNd%W3gNWfOAJxt_Ol0n*okvoDzT*EE|I$Z91@N{b#3imcJ`U?F)O#mU ztHYICw->)phE-s~|60Pu$LDfA<{$a3)z`=+P5;EUT|Y(}4lvb*D));6inA?pw)MoK zw2O%?v`3$C;^Z#NlKaK2Pc(JKD&ts5dWKY;*5dW+0J-{do^v?M;u0inoe=FatoVjS z#kKan@f@S!C+7zH3;Jr$|IlRvw)ye^%|lDMb9B5btM-Gat%u-#DPLk*r~RyP|_~c)>T&yHrj#V zQ-NV!UrS7ZdK>75AC9qVfbQfBmS!J|WtFeQR z7H@CWI@~`KCoj^G-7gv8|06cB(w}Q}b8oA@wef0oUZqpA?oTlG#qvj(%EnJ@a4fW1 zwp8lKU(hHKh^%#af>>K9o~GCB&=nAj)|?ADNF#eI3A>gjx9FmPL;@M@`O&!LxF0@- z<+J7UINNlv6Qw6=f_AbIyApJ3Ln(Szy4GiyDW+u;d$~XxFU5%`x^n_Sa=?m!`-WMxRX4;sSPnW(Z{Ms~LL#=A&JU`;6?2)F1CzqO#N3 z3b(IOsyCa1b*lFjiyD`q@G;bKAH$U@(o*~5v5yizHVva^LR|X8cHXIj9L+|uY?PI-l@Rjr;B!=b2f(mRoKMbgX4rgnKq)SSHWI9=$|W3 zGuxOK-~JEb7d*i3hjH#Oupr9eFJ>f6TgBT{#FX^5gc-<8&=`OB{GugeGQcwSh;C|o0VlCyBD3* z^mm{GOLPTBEmAi9=qkU}hOI5!XD8daWi&VZy9C% zMrT}>`seHUKpXzdT^1+T3XO7ex~ae-;plw+nQ-^w{V2|Z2Fb4tIr&hgl=RR8AIb^js`CQeV)J7EH2JX6WTbRY zooH@%p-?ak)fl%O3HvLqeb(~zPt5)%>Yas+nSGGD1#{}x6})P}PL&Ms#~p0WcNBK@ z=)!R+EJOZwv&sm2n+YlAabejSk%}?UFa<47E@x9{=$3pW=7{+*^O!Mes{>y%71j8C zG%M$C&8HGCJ6%2`us=8kDJ?toef@UTt6{feiPyrP&%A5mWCg7mU{+RjerDWplU zQ0C%?7a{U_TU_moS!q=lc~V2V@IzM?(%RdDI35eW!$gjg3H7mugRz85d?S=k`{cdR!Y}8|!o|Kas*9X)!CQ~67xoL@zWDMw1~IO2{tWW!t)2u5D>L`+G$;eG(=mn} z;zfx~|7L#>)Rrt-f?8e)Wmb)31tThj(-hvhg$JKxQQOS+p<|%)gaD?#j#l#}r|@9) z&Hr%ItA0?x{V-9-?EiYlV5aAcWl7>4E}*GQOtVwufk5IgR4CQQkHBroSo-`hUHO6J*2fuV@J{QAj*~IFv+1E8^J31$vm!Tzlt+eO z7$ZXr{YbI>|6jnAcfp~fv^}|EYUt51r`OWBYJdkm z`+aF>r~W|Af=K_+#ok>+-v$WjTQOqAxE+5HWH&ZlpU4OS8R2~%8;!h97Ti5~wSX;X zc{kxRWj(S{#_6TT*ODHzd;lR?4Hj{e_BrPt#@LTN`r0||LUan7sNsCKtk7_Ebc_#K z+g5z(NFkBA8N`^@2EnaIqJmLTE;IF#&G|Fx5Gzk_WM zj6^EyegqasSgX=l66yzqy50+vaORVX;!+#=NMYnTHOFvj5~KZsST$Fo{4Phz9R&%6 ziB}{JFQ*=E>snf1$bEbHE)bfK+@r3S<$culvQ{WncEA0V*EB}<;Dvi;jz@+KeTy5E zwR!Tl+4l?mFV(Ka1~3lNu;pt5!605uj&rC6Qn$rzan+x*7yI(z!n2v4pg}VFU7XDh z2+y>EFh0q8iH%%NpsPFboH0WX z(G?+(91bdknJ#J(y^M3OQXsq6t?y4BF=uYM38W$JtWelp6;8_fMDgzHdf|#&Mz#AZ z7T30*B1K3uVdM#ypV>ihDAn=ka$3QAmrEwML*x^Qo`X%OreG~Gx06`%)dZ_a2stjdCkzv-#8lX{a5sv)|#Y7nXtuBzZ9G&rFF%taZ9I9 zmCxL8q#w8&k=x5=cK66eVi)&JC;)GFYk z2#kbO#3|Esy6;NWhElq3kZrmnDS3GOBpv-*ZlS?9TO5bf#vS+y_n?yY$S7Zq{MKQR zMw}sIh!z)oN7C-Pu)eST8yj|>SaZ`I#1Ub8&MejhxNkiQV7x)z6I#j<#DGUlj=SDM zR)Ydbxaqmv8MFOp9+&9hqb%FqD*oqns(!&c!OXdbU?ze8SY zkrWQQN%&Q#VmO&!n1UWui2T_|Fdz|1QC(c*$?YFox9Xmc$@7z?UpDONZxM`}J~sFED?Apj&Nh(aNs@^Vc6Z$@jxMJE6Z^@uE*QTrexdnaALD{0>%fQfuixG)h!7cx+O zu?@84uw%-^RzCc%5Wv~E%*m6WW#OI-zIbM@g3vGR`g-eny1|YTYujguCC#f9=}Owx z3VzF58@m!}+{(QYEvRD?L~FrPlj1eyw@DLSJdBOX_b3u+BmLBe0T=IfmgrlKVTc86 zf6#@#&i>@*v&5r$lytVs`q~2vw)&dEh_ijUGxoOMY!4q_AL>Zp}&AL^k#?NlZU zc6kV2^J@r~OC6_sA2qb}bn_pn7C*zZk}8CISnNNAFH6$qeY5+G1$DsKXameKn?dG} zFE0#`heg2hFqCX9(YLZY>|GRXTwdg|0<6iPG?W~vCc!L90Rw$VaI7}X`cjAfLH2Jg zYJxX4y{)&&*=n1vVyyi}M`uPt-ArIohMZjc5JYX!@<%Xe-P9R}f1H?AoY&Hge+iI)fZb z+Z-(Qz!Oi_=<6VHhCujdnYIl5y82*D7I~K(r|3}fe_%rqY zar|3~BveA~m5|(XH!Oroh|2x08o6u?bDa=EtjOIcaw+#P=CT=ML__ZPySdE$ei^^> z`xAJaea`v3->=v6xv(XTk_yQy`e~Zfx^Ae!S>hugl9a}N!r9`{Jb!mzN%t9NuA*l~ z1-;rtogDPw4`*n<9CULDh1j|gHZ^D^-H74Cn-jEv$pJ;zUd+rsx?)hbiCZYe8$ z0mhCL)=h#NHN;qqM;UT{105BR+AGGkVVT7ICr6i0Zzmo71t{OTD+RQnyM8y6#wB(S z;_84oIQv-no$J9L;4S!1w{;^xBb6buVyUQS8LsaxhNsz++VqcIy>YW(La_ZreNS~~ z$6!?n-N62{5P94XvUvLBUQM4XtoHj<{x*950kA_T9?<_41cQX~sz};qctXze_XZdZ!-oY@27B&D40CGMQQ0>YUu0lEi zjjnIKdVL1J`2vH0E!zD*d@tgRDsL+RYc0bQAN!7s+?w)ZA`!qQrp4+{3k+IR{AhAB#U7WlzG++)2W z13Bmk!UXG9GO>Tl_GM0;mmBrS*O#7O2bE{3HUHc7%h=a6$_7)E2e|B51M01+4R%UL zTdLvcZjN56qqi{MWZgynU>t~4Xl~@eu6Uz|wmjZF`4jo2rffrMjz2iZlInrB0s3}} zv4Hlo8TnFJQgy|SUNBUx1;T^R+P#7-xm_MM=mJbZV@6OLewK>G9|rz5j{{Lr1=@!{ zqrW7ET4aoX$Idm;?GEfOWAeKPNP*hB;cqJgTuE4oAn0YB&Fj+_U>a>fK=rX zm6T5&g&2CMPsHhV$xFNrV((Yvzmb-77Wgh8|6rt((q2H zSH4G7{KEx#vB#@)2-h2VehVL(t7~N9lT??ze5dr3*EcYUSbc8SB2oJ!*rQ3pNJ@JdNsL7}@9H1|Qc*US-yj6gGMhMb?nL7gYAx1WFqc26pGt=~{kV zD$?VL){JeLY|3q*QzH%OkmwUJvPoKO#hL&5uPL$F4#7266qPO4BDd59VF4U84I6CZ za4!SZnsxO?5tPdt)zy8+x6?ewvMgex38q!3IDuZjsZ`adJmImr$->P3Y)QuTx$evy zQ-%_k`=$Bs6H{YGNcpw_{UVVR-GIkpQ-)S49;ar|#$ zpE`wSd6RvBto!v^?Txu}J5%2et36ZLg0Eypns(*ls3h02u6DcGDj+*d^2Fb9$#st| z*$pGEY?_l1H;g6DTQ-X_ko?99=kjdSmbK;?%qL9v562q%awJt2$I6)j+MdMe9_zyS zP|?_*(}2HWG0NjmDv6Xd99ARUG2Gis$h^;>E?zbG4yM4<)RKkm{u!kRq|pQ|vI?P; zu2{48^o^@=!CYKLMo-E&2ZUT;jcG%qnzv)m$g!)673`G*YB{nOJg!Xw9bAXs)+Tvo{=?{!>GD6YM`S2 zt6{$Rkz!lG_ko&g;x+DmE(z2Bgdw7NJ1Hm0&Q7auz8zM#MTPy5h5vl7;#n+xxcYD_ zf`g27b)c_4xc8TmO-$0_k4)YUQ{y}mcNn^rGyEz6q;Pm~$IcY!5}=oRM!6n1Tc*^7 z>JVXujtc}k=D+>TlTQJZKVLkh0PPAd<2}d^lQX~>Pw=i|7GnGM8@Ntm!f20se%J^> z(t)ZqXXlh92}yNKDkYA5zp^Ri*4{!6DW_4X&TR8m!^(oM=w;whfhDeDq!L!fJ+Ep{ z1=JtpOZw!ru(vw@$~9Ut%!Lr`NbzQ5J!x!sc)+x2{ITRq>dcEnDfTkQ18O2dc|AA2 zMP19ZBa>s+)g?Os*|*8OK`@du)(V< zm9IGcBtLk~wM;;4ca;^$oAMrx#cbr7fXZ)RHpEuhSH;Tv!gk~{L)Jfg!5CcaWrE-q z=^~R^0;H~n`LW#)Zq%@O#+#*!^}^>kOLBqNr1;BisS%xxa?$@&NLO|N3jT$Bg|nJK zUA-gXbTH9W>1^J&Okibh9N0I!WAtxOA+Xl|IgEo+1HZvE18*o#$AwR6IIeOpmbd7* zoRq(uK{1r&k49DTC?Q$aI8S7HtCL=&AT?d57o!I_vV$^)a#V*3#cgU*&#tdi>ql`I zl+*()oTCg9f8B?An_`9ZsO+=35v+Im+fAoT#}pzA2nG$hexo&E}nV)Ja}AB+&jTBEVFxd%a0qTuh0@5qYn2~_8s4p={%L{GW#hA72$L-aKqsMv0+HO=m_{Wh_!}( zEE8m)MER|L5chM0gm}6|quK2UZVU&Z;orf>qORWwOw%I4kHxFX90?;soilP3E`_17 z_$TfvIpJ&~h|s}&%D<;&#Y#aU-izBs_V_UV^#lG`a3+U9e`e-eX_7G>be0 z3jbmp>M|IiXmDn=CzpS!8N9dRPx731CD@g^MBv?4#(Fh<_Pl*V`qgb}nAJO-c~IY# zd7B}Y6DFp2?j8Gx?S$ktI)%ZJGGd#Q`M=;V21$1|qgf`hlaQl5tJ0=foPO5Fe(S&i1c>=rJWY?gjzT&I@eXbxfa?7hK9dFn|5 zR=q?oYyuPU$E;wb;R*P<$Ydn5Kfm>fk0ggHMdyA#C$4X3b5XPbx~@_+I9Fl8aHK;9 zEJb;??fodwUReF_Pp8T3Tkgj_qjLAk!tny${!!DvpAFdbjQa==3IbJSEd$=l&UczR zAJ#wbiX&*R%UU1gtLs|b%%8BUv7OH{L~{kKb5LCI@CCE>QK|pC8bN>`EH2A2Gkl<5 zFtjwekj17(Y^Zmg-;>NCAzutEo)Y~P{GY-h&F#mf2@qQdMCy^w$Z)7ju*iVTYq#6- zn-@~zQ?JD<-_%cpba%r1i>54FEuDf4l%la&&r9c!FKdRPs&ashS*Lt*MQmKCVITB>6I$#4CIGW|PdM(L@VM0$ zmGqMh!#J?mPf#9RGl2d$Nxm;=1|%?J=E>>D-Q>(GPu$aJs>hqwWjeLMno(E4(J&UT zuhkrM?0>KVR#K8Y(1jF3VuIUUp1RjY*T4#Ap>-g&zw9l#e45)(`I`9#0ADBIRd+-a zxG3B9-%41P>ZT-! zb2IJ3ad>IQvuA_wXt?B}n_8Z)eH@X+Zg$Y{&cYc%IT_3wx2iZ15hrl9RllK4cSzawF_dX||afeL11+6jOrX~xuHt>y0O}LHC z?)U%@W)^7SCEfwN?{TL3IE7q9;hE2zfhtaFJu~f%I<&1G3H!b|Bc^D?8G!OF%7h#C zj9*&e-kx90H`*2l$fb#~xn&wMM`HS}so2Z!J@i!8vr^b1nq1B+z6*&=jLceUk%60y2`w zl9s;)ymBL(MviwUgXuv7mjLnaPjqE#iOZD)QDmHoJ>P^?hbS5Qtg<$K`p2%67P6%T zQQ>nX3!U<9&+(VtY@n{d!Ac>{D{$|}6tW=c$xGPSyRlx*roI6r4CnZ*Kc7iIzV1{; zLNy*c7D6p09^k?kE&SODXmH+IMhAZIc=93m42d z(}c=fTzI>u>9O&xD6%cY1axTS=nqK@K0?hc&$Tge5D*7LhjEZbj2EWs_GUHeeQd&H zQr!@aQ|{MHUxhvpEPj}YzNiRG4YU3xyP3QvG~b2{G!%e|E)TycracT+JN>-Z<;@x3 z&+d)7Ky$D}`zy$fb{on06WDb<1_MGwf*0l-AffUTK5`xGvNd11-n_{Jd3Zt#ZEp?> zZjux{%L9HoqxY3Id?s8T542_KxD{VNAWekswgz8DIt0GlY(Jn@O(iV>b({XfWfQ1s z9kcJ26~G-)R*$aLb(wb&V7D|&t<{xZPITVGH&z)?y8|qY9T>Kfj~ne+oGETQ4s$GKjd(#r${MjCiSa4 z_ewpm+@f7`TnyTNdzo_4#R>0USwIZ$V}$pBnekL&(xkcCQNg>{+3OohShGnjA8>bQ zTrU{n_37Oyv-@yp+JIr)1O-aqw(OfcHKnQ`f^@+%yZKa_-Ncg_NQ?Se{JtiOT*0N2 zrYzp{lfbf8s|H8=&1!~e&d?wqr&qUZZl0MRhp@!(HS4+shj1HY!X=ACK^TqW5PC~8 zg0y+UNm-p0b5vXo<`VXJ&JQ_eqx}23CR*Qh!7q2ZuWva#0)%@|PmDSwU6_=4Njvqh zoD81x_MH0@hvLq&Fvm>h49O^^?Hy4B`$Rdv;p36~c zvNY>Bb;GDD!qp9%q3)$KWaUIo~h}P4vn+jB_Ac zXYmA*?B_2%y1=xiWe9gXQqxqhf$+ml&NT=G|4Hv~5FX@&`CEdp&Q*4?4D+su)rnCw z-)(8{IRVw!`@4xgEH;TEgjNJV-5Zw3uY^u4qjIx8IDSy*>zg1WMwI$my^jJ=$=ad@?A@k0{?|3?H4>mDY zNC@`RD>v-F_3KOYZq>x>Nph`8`t1jgPxaLE--0XXdDX$(|H;T{F|+1gUe8@n!R1tJ z@8u8$uIo9k{xD`MQ?ChmC8Fd*8@7wRp*9rnX$ZN_z<0sc5V6L<{VP$Z^rfx&O{=<| z+krluB;;!bN~l5Xv|ggM)~Ru*Z&0n{;Qj@G-%yUT6v`{qE&lePN{7LaOv*K`e8$nv z=W?08?uzS*&GAB`q2r(1jP2a)1c}n)#G?+Fh-7^S069vs&_BjZIr6cQudIQmEDF19 zB-HD;t=f}&QV$xVz|lG8C1Xi4q{n>SQU8Ab4X zuB&DR4Raq%dxHabar1g)+I!jW%AS?E^~u4FN8Q!+un0%Px}|!y^!3Oog3YU&B~5ar zT}__2=BhW~#?VqkBqePx;cutR-L(2WRW!CBaIut;NxuXVgFnmS%^$fRWYIq>s zusRAUG37=6PBk)#u_~f8PqhQsJO!;4evCkY1znk;XKxA{iXAC_!19hGkKXDcdZIOl zu$T`Du(&Ci0gPvlwiM!H)S_(2w7peXE#W7&l|3O+Bg|B|WJS;~AW*}BX0xkm5*yTx zysJSi`$w?PWE^<>BKD(}Ls)^|M4&`Q+JKK?su*`x@h(-;6KwE1-_DiEL@D4hXPgax zujywWF_}*LvW#3G@RVN53)ooFjP1w6LgsAfsYn26(d}uY_k*g#PSZuyvZ3L_0EnTK z*IQ3U414B9OnK$C9dIHaTC>&J(TVQqLF2AkQmX`prw*|9nlp1QN0496M!oTDTcGRGxw9 z;~otam4FY_C?Bw##!P3LN`^4siNJ0eK@4LoGmRI$ff>+{RiIW@kU?N=WafW=DHj|I zQyva7p6ncX+UV=a|0*hZU9Q;n#pQbxtg}2{L!C1x>Gg8;{NUEY26K3aiu!%im1+}c z;lGeR|K<}=2JfX$61jW#k>KNdsu(MrV?w0cPo2E^y|3R%bpi)V-lUA}rHV#B(RI0m^k-GO?iATCwKm7Un|fGKA49rp5CMT{ z-RPWp9Ring)ZZOHmGJ0B6_vB|Dvoa+57JK(0$<3k+!L{#{LQWeq^>jdCr8Y%`LzP` z|9(QwlFb#~WWb{?B8nn2S7i=al+rz;_}w;E5h{!)gQ)uOu(!{NM-~dM}o51=t5u05^?0^O|UtUyf+{CeJR_0G8nb z^3&qc4Fgn7qb+l7rSDNez?uLgq0Vvtu8-?^-Vm0lnqzYW-s@$w-Hk-DQK{^QjgX4p-0HwH?w^L6AjcN3C2N{IL3PKM00Ym9iNjD zNq}=9M$E&M&xszLgo3`NJkGeHVDly$PD%+bJanu14HKGvg31xuBm}G?yH^s&ex>Xv zVOO*oJ;{XB0zh`Aw`4ka;D{yGbToPd-$jkA5{)gZgx%M5O%nSuvk$Rx%+VuC%2qGR zrs~QyU@@E%bAhC;kwW|3p?^ugb)Z`jfQq6yWIY?<8q@dQrTI`tcj_GEEzgJ~V3K;v z;R|rZeoJ7F`Y&!DroMQ+@y%h@@7TKW3P#DVS#=kfIW35PGwHszmP{fsUp#x0H((>y zj5}>|Yk#~{YbJ{_vq)DD4=S_DV%mtnr|Ht( zuRI!`Nqcyf6V+N%D{$rr&fZ{BR5@gVn|SjZIMoo_sk*DnM1d})O;W90>~1tC=JQQ@ z-UYii8?PgS|73ho8Z(mREW5txob$6!Ef1u8oBK>eelpkum!n$q=Bj0D*FG?#>L6gR z0yQ|{6G8O=&Z-1%fH+C?RLr&pVw~-&F#(&yfBAr<4SDys#XIb7qkVU+d8*gMDhxtT zd`3t>O;aSpBOmnqq$`$(%NG<@&>t*OFY)?9Ih4j`oVoSJC7{8ayp)dVARMKLpvtsx zE}cIudu+FG|BJ3X0NfYqIE<6KT6ZcmV$T`&J#a3NL1wM0wv}W8E?Dl}_yJ@sR{7@I zmiIZIWU8TXrd!yUKg!6nptlb9BC?O#?KlP7^%+j6#1V6hFn^ke4^_~0+HHfWfgiej zti`m5{`>RMl^01BZp#O>h7H44XR|(j)iI4>ixrOpji;z9O1rKJYy;W+>~%b@_2FUL zlW)AYnj+`oyu<5cm?x)}RE+RJkKBOm-uF0|a9(2v7xnLVjjo4&u7(}hBD+&P4w4T01<`Z1!!YyU(1pm7! z#NEBWDYmwqk~To z=3GZ&S^hWqLj2kFLN!aNBO3XBa$f!zFjidrFF>RzzDvfqbfDC;RFT zno&HRc6XhxpURZ@CNj+2K>9XF=aj>+~YEGz_)ZN zyj#YfU4I$Riw_RlGaJr)Z(%*$TR}jan2bkxSc+8-jr7*DHrm%VvHCZcuMnkeT_lz) zfP?X4-?B!Qi6tZ!?xWybliv4UZ*!p$Q=&R+M+hiNdg4`HpA2|{n3swtsCM*I`MZ@k zus+ov?n~dd&}-{aCgJNUigmX1gYO1XFM{C&wXh*% z-ulsYMsQw40&L*@AVZvsT-{Tg)@eLjAc?(!m#306J^N>P;NuT+beHP#(5nkljm+oG?u>H+rSJ>oOpBB$r7K7o8(fg*t3FYQ}Myef8SH2GhhXDje3 zZRolOc>(blcyxAyT0#7Ap0X}dzM_B`d)9U7_}bdcl)xkd#S`6{KeN9bA$ztb82A!O z%8a0jZ*(iA>%OvK5y-1xD+N2PNcC8U?oRLP#u6t>JoYNHSD#!#Ust_UTqLrdBdO4Q z$~ob7Cl`v04+IL@F*aH&h?H$UMNq}P+BQTH34f&pa<)p;kfL`P6GA+bAsGkiqTQUv ztQTQuvdd)s>X(8H1C~Bct9NMk?*dIJ2!6& z<6NE^uVq`&!Pl`Jrt%eZ%Bw9-Rl{AWBd6%VbnzMpZSnpZa#T2(<$d$^;(Qo2w_6ZYw6{D;-dY#BDk5^THeQ?_PtI@@)BAgyz_#9uY=uEh^R0AqEO&quzE8y+TUxqfk zd3yg%?19vzGQ?7&3gvd@Cb?Tc6t3L6A5dZOYQJO4P|&;4Zv8H%6R7-tv12|d?pe_T zUu2=fcn1qY3?oMZxNCI-_v&E9qu*>(X6u9Gd=y3b?;;wOb9T_K45P8C+6VSak|%Sa{-K zwQch!DUwHt-)fnUglvRc<9X zlUkih+<_%5<(Rn%i6^-V07^9Lo5Eyw zRPIw{4|~V*m8>#)71Lh6xc_9aGk*}5s*~Z$A6q-~=aw5X;KMhIzRPN6_Y&9F!v_&y zzvlZ4jyXQ@P1o9hDpCv0ms9RW{DJkMSE(NFqd3(#EK!WC43+F!=8VAK==@LI zx0PqdWZ&y#%tp6v)?*Vs$mTLAsObH6NhVpz#O#(}TkGt4BtG&0Nb;U}LuZN)W)2tuzg`d^s@mr06dyVmt!(cI;xuExJks%bRtM)KcEC(MaaA z*K`GEw5NNjTi3y)%+p1pmu;a!Za=@cDf@}wlgW0?0PxiPyXw!u2%D1*)&nYMS^EoK z*Amj|d^Y{~&GbUM$S^T{$+ui3rGy6aB zpT?*E-<_baC#&3n#4wMXh+sC#W^?MfPJzSlBiLb%zn{#0U=#1=W!MqL7ZX1jpN^ps z(SuG^mogL0-T^^=+y7s@gWvc51%R6c#H6Y4X5Zt%z||qmBWR?H>tQl6sV{`z^4T+r z)3vLhyCs7oQSaJqd5g;D#5eu@Tu2*65h@PKi)@piTX|__7PE_^?A0p$M*&hb#{cIIT^v8lfoGwH&-LD^Df0tsXy)N zc8-|2D?o<_0^sK;qf?INbUofjQ9uw70$#*7=)k}EgnsYL<3N{kEj!hIcl>%wQZB&a zE3coeB=3M_v08ZH=a+8DkJ+QZYwt;zFZ>hBKzQ~F*<{6NTHe!;z!cErn65%-RxdX3 zHS_HKSL_Q<=<&b-u&oV4DRzO}P3P&DkEFH`9V^H_-Cz9BrIzRZ9Y~mA`ZnKYKQL0s z|JpSAPI6L)2{$hdWQQS!2*7UAZAAq>gqdFi2&P*t9?)!o`^AaS{c^g%6tR-f{lh#p zPS0;1PzlG_+TZLL6b*lzJCta+yV|!M^+Ik%5IW?)xuvE+_Kg z2I}@sN#&!Cs&Y0I07Pcb=Ml70@-3?XiorumW8Rh4Np0ABYge6HtpyAwq&t2Fe9NWJ zB0If$eM%1IG6a84z&9d3R+;d~X_Axp3%!Z$5@Z#5yBgT9UY=9ynQv^J9CKFuwARD8 zDc9NB{O_fA)f?XX2HlX=GQj9HJfYsCv?OJXm+BT1lOrIo+p^x;q%Ja9UcN;FU z$hKnhvl4Vg0SVif_g2J;sSI@WlXckfm*;`vC;4*^&+=F5n|(?~rID;CwFg<0a>X}^ z*LI^ncSelS{p|c)RCHJK1NG~d*Eh_W&7HXtsSlq1%hs;*?eT92K2eXGtw*iYW}RgQ z<4EhLaV{Bye&|7$p>nOF&De@o`$*R9Tq*-@IyZvIvb{Q*UwSLmm@Qe+)Sgp5rmn#J zYlX+vjKVp~_%2b~x?5HwT=mJ$ExbI$qJz|E(byZo#}_G@Rzq7Kw-@r1Wk=GVoLrl3 zcrTJAKHYC19xNVMI=4I;mB2~3=1V3Vb@P-Kb@G9534U*|O5uZb9|4AP)9Tn#?S4&dfE*|~JcOMBSg0c0Mv zH~6?gA4b~(l-pG|CFbBA8CF3*`&pywC4B&SSfRX(J5hO58#X1M|U` zc1I}aotww8`)^lB?`I;}2?J&GBq3g}i@Zxm(h2-<#hIxi} zGl=1RO}=}1RyB+0(4bHk2;o{={U2q{BmExxS7gOx^eK(rj(`So_w0cTY4fe?oIe@X zvu_=Cob1%vN;ye=qv|RT6a?|z91V)2rBF9KNYVOl2ObU8rPLjeWy(gsUGIu~z&mWn1YB~I( zSa<%O#@eRDQ8*ripMNEH+D{*Ji}IV5`A%6(ZK?sw&ihqVG;jRmmXP{o=4=^+3O+Y! zz_uvwDLw9YzuV6F65ySE8OSDy*SrHA2v| zGV|?UvB{)r{C@%$OZWmtHispOIE;7HIu0`j&*5HnPRLYp#f#F8LoJh<;u^vvPYwIg zDQDY&pI+ucM*W?JkM>iUtp1bb8Y^xRqC06-j>Vn~F3(im9Ia-0iRsJG{U@DSsMF+t zrTv;FtmE8qz}?n<-=doy-ELig?m|UDnZG_cepxKwDRqO>D*OZ>^Nql7=jr`e+?f!^ zl<}PO&TmNmQo=}YNVPvr3s4osE&=(%6#~?G`fm}dlFnwe{J`2RM3IOphG(hkbYzoR zt2onZv9d}dv92jnd3{c*iyohw<=O3CL3032i3~1I+qn`~b}KW34E7vv@#bjs4dA?7 zx7+}M=q``(-%oL!?)I?*;Te;^^&p29pNcQl%+sNO<^KxRnd9WvybEVyok5AZlOm*U zlrUI*f#RvNzvE8eJ2KYITkG+zcO)$;AHP^xhR=g88{yR+PXMKOXLZBQQl)2(n^FS* z3@>Hjb+1t}-OF~dFy(gJj|uCRakRD-s%YAM%GZu;c;Q*Z{vqSR(iM_$X=POcj1BA9 z_oa{!&Z7qKcx?!oYo=#gDRWZzuu_qw0PlBCj5c~Dql0Wd!@mowt3GmDy~r>au`c~& zMXKZOLYA)8W9oCC2**KNNA=GG?g*3s=!iyGt5K~30vn7Q%VlKJLv^@FZ$Nh-;l zl-Y#MmTD&^VHLu**XbzG#j#!MILQteHlHZ%(q)uYM^+x4_%&`1Q8WFn_+ax|)#51n zX2j{AhGl5(0$2NgD|P31UJi`h3iMG82OZT-jqng87s7g~y~<)_e>p?lJQddGn+vC0 zRg~O!lI>!}=Pgg~A*i?1>%`&b-F>J>=7kkpBO?2b%uC!yRJ3&avsmXz+RJ}8y5PJ@tPzl5(^@@(W8NA$3wh76qSa{6b}`~M zX8a{{HSvHD0I@bCgPydja*J7@KTCTdvZ%#|h4Ep7o)9`t0ydL+IGSnGJd~y?+SYtj%YS0W|YQE1M{sOjLY1#9(UAChtKh3ELKt zFa7lF^S&`t9qy_m^2rKxX%bbKsqq5~3=9)dO=o79#wfn2C&4)$_U?YiFkHth6p9-K z=!@MNF9OAr4@S2RsIhj+0M`CA8;#<%xaDF0Vg}W})9owI^ln?WGU=s0`3<8gM(RLf z8(kk?ot0fJg!M0A2Tnl(2In!+A)L6lC!ROmR$~St~x1kFS!e%+t znyH49jU>1s!>CQqV`i*lvP)oCqX)_&;E!wB>z9*OBIba)cKdNzYmh!K)uFgpFftco z;-?4|n4mPEhU?;3o;=7U1yl^ZrjkkqH<%GhGGKW6yCrcl;3qt8qMgs_S_Vk$(LSyA zzF!ZhzZQ4YwL8~$Hb3Y-gU_4aL)BZl`>J1ATW0@^P#(_?28rFzl_t z86Qs?{~CGu}yyZ*L*ZQe33o#`QUmG)7=)6W7rm!e5d0Y})y{UU6>MHakF{ zP(l>dzz2h`ojthp7vIqLUI0EYRZ{v-F~8jBilm#1(s_Q{Uj?#*R(_n3Q!ayz^k{gX zf~>d65|r!CDMmT1&uYd32+gz6)doj%H z=|y8Ri*_e^wtx)RV{OPQk|eAS5;<71bQ=G#pn`uB4up1bIygtU45*U)?yvmS-ltB% zS}&EHh6f4Wcapd_@_|uFSgcsyk8R4@tEnflwA9)jF2*Sr#_7KLBl@x!jr!g1lz~Vvzc$HQ@&FKj$Yk7>5C#k*p6h z($l3v5r^m8rxF*NePvnJy%tQ)gm-CgoLD~2x z#1<{eb5Idx*wwgXJu}ps>WGO>6M)a@9PK*z;gLFJi#GN>syBX-Q! ziPl#w_U@$+kOA^`ca|pgM2nQj8e$JPNTRv9xIe#T74e}TK?_D?vdEK(W z43-)PToAV@lhi3`_MXJP3~78qjKsHz=j|gh3(i6*&A@MhYiySr@{>+&?SOXrtH(`w zGL`6fb{LbU?Lt|FFt~{Kz(u9}nkfWsTFIpWrQK>r(z}(6Yaog^U8aV%|2ik1#|aah zY`kEK6mn5Lcjk3jtx%9J*fKQL>Q7z4eVMh(TcZ-hmD~Ai9tvh!%0=I+=Rue+y4H6m z_kB6f==bTEujTZnw*=17#k75y^rYUb2pSNLJC2{rBPLmnWUus*qwKpS^?%}@m05)s zPR+9HI{Xv}TYtau+To`s;&VXfYm=2y^6=WjE+ZO%CTXJUDYze{zqVYD9k%=D4^HYB z1?zX>-=~zsR_Nr~#ok}0d;oE;YOasotWir?MM~SMA;TB=v)ZBdNfUei2csl(eaK;( z)0Nd)&WnD-{*SH4kRa4mD{X&<9mhgnUvM1`tfN zHUse03MEHT?lavYmM7y%^~I88KG4mgkfeG7>DSmJ>V|xMj4;4N@@}qolFe5ZLAX9; zKCu#{Aiv>ljFcOK+Yz76fx|7WcHVDWW?rC}BDbDk^XGIv97zKb+hLhey?A}Vfo{P|{%kppb5lPB!jchHM?t8@Dm^_1g*0xHNW=7-gMj48! zHmTbA%N6>`<5t|%?)O>Ed~30rZP-Yhu<8j_3H!5mjuMf-v!yuY$itg{1>xw-jZX8# z8_ha`Gto11%Otlf-yczPaL(@0KYtOOfLT+^!EIM6pV&oUQopiZ;nlVYzsM_bczcG& zX1*a1#dkbVE|8uvJh(jvx^JKG6MY5YC6q%<`XwZ=EWFO~%(>BG;xupPz*(%tv*fx! z|8;je_GNyAG9K`BVbbs~ua14EpVXjA1J~+&8t{CeT-KZquWl}pHmWNAb%{LdiS&C6 zOBp}7_ij6tReApgx)7H(sqlGh_DYpJtiz-b07^M+@cmIkwa#TWr8=di+w@!qd}hr( zoi!FmHq-Zs!M7LAdRy~}?VHto^!?X)^F*LvPG5Tn#1M#H0LQLZ&K!SN?=~(K*;`Mh zEiQI`vc9wD#fmK9KKaJVD-hmAFD0i|2q1Iwnz8q>x(e5o~^}n~S zyf0VUzZh3k4nLoS3)7EN@d@%O6M#K_rkcdYKdKv9;OFBx({!7FxT?ox4HQBTC5ruy zvAmXMH&!)*s$=E=_AS5s6&nC0>YA^TGOOi@k?)cG+k$YdfarleHI*Bt)3z*^ze9&J z{J-Y&MU?dRMic%ZAE`9S{?{QI-{l8CV?uTq>`KwyjnGK;u@r=*Fd94?>?Oa8C4Z48 z!zJeug9M&|CIur(D;v1&f~2z7pHIg(0HlDMRu-~_cLfl%Ck~O^+P!-LcVEce&iZ6K*6c6yEJw1(QFX|~QfW^#Le>BklU0Cu(%OR3wVVLlq>IXcnc^DvnX8#jOO**dO=3;!WRN6zwSTaw;Z|-+RNGI zGeWz$Zeu^)?}IgZ#Kigp?lsvNMv7(z#tdm5oD`dWa|uGvQqEIl4WzySi4X^H#Qd$S zfFVCPcC|BX@g3F?xQTnWSE#v-mNp(%>1NkZ87L3@ui}1}I+EgsQ}ueT$FrG49?M^z zXfdgyAB!ahw(z;f%U>rt+U@w^Jdqvjuz;6RkoRLUWyKI=L=3pO9h#cRVPth2Is~L+ z5)lme`ISR}@T8??3EvI4P}iudkLSbfLCID-KH ze&>HK#&)jyq|-G^e-AXJL^5k0+x?wRsOq`R_y*)64Hwlu^D62)!2FZlx>767#2a*T z;V&CQYM`VnP!iLxr`U-|s)pdc9wqmh9Q!`>SaTL3;XknsEEdU(pDTAf?!NO4^5b}P zDIn^_5o2c{oFb({QtFU^k^x~o5F|C{nU?CHRs zvP*xRAP>7&j(C1a*xKu8)(Bv?tQliwr2>FWZPlfHuM9`SM#7v9}@ZOF0M z%KM{F@q}#xVa;pY1lO2hEr4dqz32<{|v}(ZD*?rqf z1CN)cfzp7}P5DjI&*>{3dtNtd2mX*&@0m>obh_};x9%B@oKlCX(;$i*$D4czS9XU|@J$}+LPl4Rua*M8+eoiyOcO*==y(|f$I$9VV28CJ@*#% z!6&h$H!OswPSAs($!oy!-_GxtZ}=)_JxBK%Jbo_s;%`2 zucMid45&w{RFVSDG1SqpN7I;ZV3Fbw)_rwpPkkHUHQ_G?Tpk>mNs9St{<(|!7oaI$ zBXBcRuK)NPNaFS740dFaQrQ=5l#Dm$24y7Pe5<@qC%KB&&Zt;*+I_CcdMT-weyvrd zCZ{C>p=bCXcWSHROY9x9*>LThfFcY<^GvS@_5XYae6G5FbgTh=^X-olf3*fr3lkl;qrefM!;Un&Sgodn zxVYxJfKrvTWac9k_*;ACVl6-5AbT9rs|6Qtd)6@&&w@c|B9EUO&3P5{&j$J1y9gg97uMdK^xH zmdJ*_iQrJH2kaqcClUb`51vT0_ZpypV6F-8z6K$8q<0b)T&DA;bd69izski}S`J^Y zemk|V#=IbdF;qSIRkV3MZ9eP8tk}xX>jMo2`GrZLfFma4+U=R$EVOTf9MpDyM;@E+ z;f1T~mi_%;wP@hS){$lt6D~9ZcCUh7@{;XSnAI%hj>N^fMpN7tBV@GsPy#9j>7D4U z=W;sRa9@Yc)+hgt^BFq-Q!t0e49k<|Zit1aQ&o%EjdgV#^Hy(5`$L2e=TGldf}Y{c zv}-~-el_QBA4qq0)AR?r{k9Lw1W=oMSw65x-Z^H`Q=i{<$`a)Q>!BC%D;aw8Q`M@a z@?9*~QT-u>WdOtZ)2wZ`bZ_SS=Tha4ExzzzLiox;psxOCGf&B#a=OEgk1BHx9cbFU zl8RYZsAkD7(Gf(bss=%hxl?jZlPYGQ;M@BLaiKuYrm7RD&zM zFZTQPoEGRt{j1JH&kQIfs9r7~1x%-JG_P_Dvgu5P@=tLHrNPZG&zZ$+Gt@w*;D<`k z{jU8vboUJts+f03=|FcyD^4HROKw0J07ObAoc)7__YJ_fnSC>w15!FZAynM521D~^DhH@bNGk=_&QPyT(x!5V>T z72NGM{RElu-Zu`UxNKXq|J27v$%to+Yd6bt{ow4=*2JHF2L1%|oVYL$H8};(+Q6u2 z&ot?^MiL~e;^JnY`P-He&94snu`A<*rI#RkR98-| zin(JSZ&|+eh)at=-Jhb04srP3dn@S?PH7LBDtjvq$U8I^&i{cL8Q7E$IK55^O@7fg z{G#&N*I@2f;`tX&%GsPw3=zQTmv6Y@d zqDCih`{EP}W7i{Gh_)Jb4WAY>&84Mgm7MS(BTV-~f)s4yT zbgW&o0KsVhv)j4eCxy~?9jUH@4Sze()@o_3B3-B|YKs`ZR?*f-jn*EewMQiOh+0(?wfCy3+SH!0 zQ!8kUn6YEW2nmAsdH(~SN0R5huj@RI<2@{>%9QwlcHXUMaJL1A9f3tQY>sia%=foG zKb3!Y9hk4=HwMw*#b*q!WUqW_gC{uJV- z&@=rC5plXSmdf$STiUZk+1Rol5nVp>QEYt}Wf@=ofXOGpcZ0MrpT{x)h!d11u5B6U zo{$k>*P9Z*ow0QRi8F^X^K_+Gi+HKb;zz!AcbTqe8cR1M`6L+-K|Lm1~mek2yAK5H%WZp9o+azb7CmHS~aPm+=xm&qe=8lCt@eNh6{f5VlEni2C4@R_=~D z3K=_L${^ zIS_ybc7Xgxbs^K&$LR>ZVpU5oPBZa;x<`_IR2DmmN-lvsbMtKe$87c^@8rz<(U)V8 z9DZ}*2?>Ttk}2T&x=_VZ9`ixz!GKGO)x_s)ZfGigH)xD`LlX)4lcKwHOPH+B@gl-x(W85SQ znRWW+mb=DwDhCdMpd*cf{4UWP3xFHA)EHuK3_ z%JYY*?F!6MJ0E~n^L>`nSKjTuU1bMm=fMg*kd8_0%L-MiQob>^({@kCOXfpGt6f&X zL1)7$N+%&RF=4}v4R?)k(|g+6?;r!?Rgp4;L8sL+&zjR)3RY6@9;h#GvqC;<%VbuJ z?=jX0_ppfwANOZx2+Qd!Wmns%Yo)wA#ckOY@~lBVb0+-F9w!RuTElGUd&c8DeFX^n zVL)=KoonLvkfHzpm-2D6$R^7m7TvvQKaEA33frjTsg;|(3fv4y-VU!%G&Nmby!N^L z#dMWs2sn%X8be39C6jehx$r75ITytb2sPG)>g77y!o>S@5poX8^|Rv&9ni>_Ac)*P zvt}#0Dzz8H(G$1nZyU-f8cEXpB56l3;*)@5bUxe&hA{_nw%LY zqj&Y9et;)RwzlHUE)T1e%%GsxTY-(!wbA8X*c{T_hOzwwzWTqsq9?5jB803C35uE1 zzTV#C%%MvD`j}T+`+BtOSx6A4-hHi|YMOzZFRbh=5Zg08Qq+u?JxyNU+ic&-IcCWR zmV#WjAYI6BtI-QCgjSoOP)mGdD7sY&^7yV%N*Y!|!x3uE!dL^7dI1 zX5U{wszx2D4YK+Aq#+EIhrZ^8x)~zWY}Qn#BJlVS+P42K=Fnj`+WD)YLZhni%J$K! zi!aH#f01+wbFP+1-I$^ifNsd#Hi38F;g}ggKN=tRHL@2xHgWRnlqU@Ob5WD(qC5m0 zX0&*Y0Sc8Enyo`rzPNrxqhYf|EMHW?20)&E?kwVZmpcNl?VoS6qPMB5ash4s<3M$j znh9lZ=04APWur0>hIcd6`yAUDErWfqWFH8TuiT2hw|iA+d_rUKg%|Bg_%S44rAr5& zg9gBWHGgPv-Fdb})dp)b*r+Mpk3+QpK)vx4ptCf!hb!^A`>0;^{H^K;c6fH;wvt(w z9fHWG7<_=FyWx4^%MRS>8ZPb;WiNz#yEk-%D1k=p%twx?bQvkd?v=@WU!JR%Zn#PQ z2bY!p>TM+GHu-n37L88og9HsBweDC4fN<(irx|Z(rlE4s2 z^$T6DwmS)aQCbC}3zAB6P#U%lhlU3$3Vu;t^#BS!U%HIOxTDou79JmdsRD39az6iX zl?8gIHb2Lj=Z&=Q>M0iQqto$+smKC?U*FGTk~cIUIbQt;)kAAKrY62%>$j!GGay$GU7zM%_g z_%Awr0%&(Sm5NQh^1JQXvKg77&O@lndF}rer3@>4upCkf`TJC>Rrwj8F?;{_lx*I# zcUO8feZfd31%pGz5jGZf>3d02fEf+Dhrs?G+;s6CJ(5&{ac@`jjh9K}DU>N(TA*95 zV-P4`9#k-tZppH`aY0hrH|A%FS^4R)pT~+F0jV%&jpzw>PQGt2ad>J=l%uF+_~A*d z?*w0GcgxqqCXXP$S$n?5GeQNc88s76c3qpm1RX&N(_HDoa$*=%=GXnhhFch4L*}9X zEyb`dx|H|m2dOi*EYBPo^Jop;jguL^h_ekmKLPln0`qy2werF)J6c}GVI$^5;_@&2 z-cb!+8LXIc!dLsP56T?A2S0HE za4>z311*loyMh9WDns)jt95@=vrK_=>f5Ew zg%6Kye-|k@2_8Gq>~`q)n!lGLFY#IP2-bO_xYQ+PJPa~kFfS9@=yDt2>@D{`0yluVrrb9>5d(m9z)#~CG;(R* z8AU+4(TQ#?E^FKBU|B8pw=^90DTli_F7Ty5G^wMeG9U>azOK`k?T+3Sl^;j1PYiC*#>+7(Am)kW>=@ z;5Cm#Oc+&(lQ}WlPb0pUXkT;OEQPGIdiq=%302S0wOSoy2d;qm<@ZK=8$gG_O^V7j zIh#02-WXwx)6eEik-GfyhKsy9JV!&a=+D=6ID{yDJHzSCg~=}}8zm`h0r?KRc=*kr z)kAN~ho3vn%6$zhw=z1OQW*au@3FVXc^y!j>G4fnoxy^*HGeVx)L#N)R`g+oTueI^ zs#5QOn0-doh}GQ}Pv1?13zL7lR2+VJvmC-)))sxXY1apsD@LerXn*jC=Z{t;yx|fP zHDjuBq?UH(={J|%Ey1&2MM9ixphOz!)~%azs$0NdmK5$2s z%C+)Xkq`fzc}`-fa&tBV(V%}|Jgpqxk|slUzPI(XsbF5``q;~_j<=nmDJQ}v)BtEoo@u2TgD{dAumy!)v-6qFRMOJN~H_$X#_d&k!=~wBbpR{e?`;|v_I^Ts&c$B zTt3%)-P=P%Kx?&Z=(Pl^qz(O19v?Wjz?@P!b+5Si?a%u@U{r4C@<66a=hN69>?XQ% z$otko?=MgA0+O?iKKj}tNi`YxvgUFkXzI)&%HWN8yGn!A@q$UL%zy~dBD&mgJNvC- zIL}w8K6$mSd9CZ2dJysRgbj&4(gVP*fV_sa2rcp;Kf3z-1wZzd5S~t2)4P=@8mGRO zObwe6bSwE~$lFZ4vgL|0;$C%}K1y@RGGUrKP^QtG&;w`CueqElbev6?`e)vc*1abbgS}%Eebob-@c`wY1wgsL(}=H z$H=3zj97C?{bYk86QL8bODMDsi$#xtRcbxr(wi5S>edgZJ`m{+Vp+YV%*;hyhgtkq zGI7g`7-UzeGt@Sl^4MDOeZ-IF%Y*j*1NOaYC)a6>!|?m^-oc)=w*95UUjF%qiJN6t zH;Y#&U&Pxz<#WK_N4v$tdHCz%}S66P;B$5s=P~_e+`)AA#T6c`a?JRhE#Z;5IdA`^*w;5WXV2e%GHcd%i+4 z82m0J9tTxdPP5Ugrc3vmT zW8DcO9~rtx*a7%Mj|`T2Fh@w3$X-A<{t2*^1rUzvT~knFP^gy6mSRmW-6IcMO_#&h zyOlhc=>oE1N!qnyntr>`?CHw|b$L|)&M^Gn9)eR@4N350|OgR;Lh>3=V!>H2LMn0R@1q-PxhADiaB>c zzs4|%Phix?egcI)<5`p{0IuKU`O9wSdh$u03$&bYSh zZt%LrXV6oz#r!NwBGp8imeQ+Ue->o*f6x)!` zkAei27{=HXB^i#p6t%L^A(>HA#;nYdKp$Lor<392pXGSE>Qc$W3{OA z5Yu39HrH*|7!yI_5hI+rzS=y~)9=$=n`km;rPXUoj*}aG1mIq>F=;^y>@n72U?|?} ztxEv}ZjhAe=HH|x6G5hnhqB2OP*kb#^0t6p*rO-jpWbUD>HTT;{%JAR>;FGUaqXJ7 zC^1e=TR%n^ws>#1!<0*X8*nk6ttnoHc$6b*>3U-mCB&4e+-Xk`>YeV5LrA(~6OEeh z9oP3x8-CmEt^Ogx=1f}Vw+p(a$VSbu8y+o(k^<#aVCXLT&isksDF8PA`_aCQ9lIYN zFL)N>-bL#a)-QhJLcGs#iDxSe{;iA6TH&+HD{;^KBv#0b1Nd_6HVal*K!%6Wj1qCM zdNSD{G;$n=$`NcjvR_;-$n?twvzSWCB$_DX@ex=ojQ6m2GR+PGgbQSwF2iTKDQKsh^1{J}hhX zdx4q@P!VZ`Pb@^mq^g^F4};mOD|-n8emOzvg;L}HTS6ru(2ZAZjP<~(Dl4{WoWs_svfOyAVqOfeTh()_lhLn$?f7q@9e4;lNlJrxgwy&2!iT3Zi4}OHd zlyrcbp!_z}qVC1D8XK#XY4`^`|K#&Nz#WdAYv+1bljN3(6FY%Ted8nlU7rziv)5VW z59y|Lh0>J;#WeL}wd&kEcFiEHdBk_N61P2D^HO`-mzqy&ZebO z-=wqV7;NZ#;G9kJ!jiE%nIhEg8cuJH`nFV7>v}Vd^ZJgQ54hIcAI7bakh>1v6>Q!c z3V8_oE}wonf+{^Y+6-)e!;t5HumHkghX6ifCNbrsRika~7Tum5>apuvkbqeL#(p;B zYP`s6-Z8p!1KXDA%})dsnFPo<&AA$~o}g5axy}wa+h@uA`T-au zodN6{xR~GLFYTs71Gj%+`Zm`x?`xlk;outN&ae{6Mk(PvLiTxi!$K6HB~vz4)^@R}7OR)I1nX7&Yd#A@rugC7j zfZUPli55|TJ|gcNhbGgZ^X7A~MX_CGx6A=*Uz|+5{!!S3{zNN#^)*XkA!<+{rCok8 z#-22Y0#H9L^4-YCB8Q+kMG9Iu~(5DUKjMQ($#Ce@5!j}QTs0I+Tk^CYo>8*Fm-hnv}J?>JqboVPXeSIr5 z+@owF3e_GanCQW44iBBf^8YDtFO2-4WPLVNxmgoT4#FgkC>P#Pz1T%3ntN;ykGf$ zPTkvHd0vcgb6tGl;<0^`5_)3%CbFCwao(3)VMWN4ZFpNz0F29GJDPHKDsK$rERdra zpQz!}7N6n!COuU9ulo6`&XNw@)x>C2X3U+G7f?MEgjV;*>z>D1R#lg>uvD?_cu zafsYHfGK|vD;jc|2-=wt-px;v#qR|!G9?8kWt+AA@@$`Mo+>0}zc-66&0KCsl3JsC z;{JC|*IJ41L=b~gsc7AyOqV5tFJl_oW^MDOe@Ehg<~ohNY$pMykYAgGdx+0%j{Md; z?`E|oH3ZwjVdfo2^u#KGy1|NJd(^^mp##ca9%E`6)ZuK$#89%-2A` zs?K)&J1Gr{ovCh^FNndq812HDvk>Sc z8i$$U$`w9CtE;&80Co0c65qj9nK0?<^btA@+>JwuE2hdW^{|ynj~eHpv<$;6=NS;IoX<;pBUtygRbJOV2QwA#zN4hJl$O$ z3x8`Sm*=t=BI^={>jODKCYfStqY#rU#e22ME6hhv!G_UN5dK1fPy$EDUdH95DM7%) zW8OP>`XaR|A7eq73rz~Az5fCzO z8ufymdypPNJ)}Mf>x&m`37SwTne(C7(ReLj^_KL5&53Zu-Tw=)058Z^(SC*Bb_Ie9 z!_0c1^F{=EP4jEP8tu+4{C~ejnRx<(=rX;&@iyOPq8`9S=BYBEf&k~LrM#>gtxNpf zKRx@9)bMiZ1B1Nx1L4OghMklis|E8F6Sj^|;cp!Pt;GaH4k5Mdi0}+?Ii{`oDYHGv zvc#WSW$(ixw0bFc_HKz-O$czp3RcMcN&UE98DV{3JRei@bc>p#Uka2Jiz!}{=~Iuqiyq>-iZrj*c`l_Q&rFujPG!KW~@)A%xOfA5|vZ!fY!=IsD+%4 z0h%;-DpG)e{Kho?b~bAbu}Cg9Tjf~DJKvX$IEq&B?aK;^s&hi8-z9cUk(vugS7!uW z_r)#cb`Mp|<%lcn{Q!iI-+SerpY*ZG^l9dqSNz zwbMt&Rg_7v^_l`1yeC()#$_3-N0yho2}#OMjk$2QY$O0H?_bEBl&%80T?7tWiT(%Y zi}xPG@6=Sa^SVR~W$jRCPpaYT>G4y3$K#`BGDK3>>B=&8})`h#m-=DQeus6GkBC)q2D_UcGxrNgKuCiI4eh+ z%%X<&gI~}uJGR%>ZeMOP092w8^I7)gs;_nov`)qqIW?nACV}^&w6CDzQR^-s%xme( zWyW@UBL-qq%1@FIT__UW1g$dX`e?V;X)oc?FI@({A;UQ*Ze(s=?wbM76{xgd*o$3} zRX@4{&l)Rw#PD<%mukVUyHfP~(<{^5D7-i&y8Je%_z_{BnFD~&>CvB>4gb^<_Z;7a z!$~g=Vp32AKwO5L>Zen~d7e;zlWDUnVl)p9LGI{MHi6@HcE9nB**5y-Wa)M9=rkL( z8`sQU$xFLP?5(@{0#I@egXocaH%wpeXfrG6Pd5}42N5Zn_*R(RfeejuYQJN&6DB=U zJivUf^2MJ5o4+oR?cLBo-L7G|%w0VwYa9HIitD`qEpx`Jk(BhwHQ1<(FweIanafnj*QO-!yGnJSY`M2I0JRGJ`QI?!2vdPH*HQUk#&t)c@iDQk1{%V{iDN{_}#&%2Nz zVzUbETpL0U$?DvCUt5Ff3hgv&_c-Khz0{)e;r%@QArlkK=eTERS{^1$sQfgnOk7cb zH`wYn=lXj4l+pA0f@W|<>o14-HmLg!PIbGq*2nSKC};%B`po-lColmdMG7ZTLuDpT zuE6@eF%6Pfj-GwR{(#TY(g)pXcmRg~W1Lpy%hz(?txUK&Q$BuVGF)GXC zkN3OPKGCo_h^YiMWk_++5%XKRK=#n8!iDNCT7`e;Rpm?O|9vu*gME&&$YXc7 zW+lj7oy*dBJCxwXWNgq8PM`X`=6~BK9N`~!E)xXGOAf-9$iUEASKc;gv?}0*mFKO~ zy=LH_2YRQ!$Gn$FGymu5&mHXxS^{!r8OSh$Xw8qQ@QV2wE$Dy#<(UAwR0!`%V}QR4 zGhBuEJCx%LZ^wFe$%Kp)_Nx0e_Er{*a^c@%LYk+8eA_0{&3l3X5#Vhy+hxp#9jTpNfr*=+j_SA%Vhh2d$- z_zRVExXet}Ht;pPiXVCBw12(#x?1oE=mC5G=GrK=*vRmGWX{^-Rl5ZjR&}0$=?4_y zqKjLlf~_pPTO3~gliCE6luIKTzL(2xH8G9LEFvmg3tXbSUst~I5t;o6g;-2%-hyPf zT5`zRl4Md$N~n-!Z3|=ij7j>@AMq~0-sO?>ntes&9TNZT3eQZ#$k!E6Sz8Ze=SNt- zP(OrBdR<&_+y0&l6F2$Ov)~VErNUjPE*Jy2^45Rq6$&DS^u4QI zOzg7u%;5$WYv0eO179|SPXKN^`PcrK^cGmtw#&8bgt`D4GD&Ecxjfk`wbVBRSyjcJ z_48bOMHh{{$^IksqZe3vZhNc0=246;whhC19mFPoE$jK#UBJo;aA769MDGV5?kOGi zU7b02;VK~VGwVz#YGS1>fvRLmIIBa2X3J5YxWp*Z6ujV#k!rK9v87dw2hZ z>hGK4eMP@*MPC|yeet9!pAX7uXDg^Z#Eh?-*sM1rc%NO#o*M!<%LB95ILkK@J?R2Wy&|hr^}TuIBLI=d;az7n zeCuxxajgAh?M_sFmz8M0=fHC^mE~8$N`|n6&YjIjjRZCi2_|8IIO_C?OtaR?a*uX20FFS@5o) z$3E;+(zS7eIt7C~Y)!Q0YS#OICTG^(q9hglds@y*^Uq+zaTA3@@0pD5TQjyX7b(v6 z)Kk@Uhz84`|1XPAfZA-5-L`PNYE{K4xMlBo9l&tn>`~$B)js9Pl0??w-kCUn09 z%*r>3_)Q;hawzOoo2zK~N^|l^`x)T(qJE*`V&bU%QcIb{|1KW?kPXn@LxhdY7}A<= ze61?jtk&;bfOM@HHzgl4qNb!$RAL{IpB=>A*j*LrzhXxDRRz+=O$Nn+gDQpZ>&FBK zY{9qC1lwNqX5I~c#SJFMg`1Mfr?`OULh=ndC}qnO9m*Fny7MgV++X)#)To`)`xMwY z^EEdx&_SIEYjXY~K+(=;jx52t)2@BgQqWms|?cqJ)%=>*xQmDjJ?X7!< zZzMf@dE6JpFdkK{XH}Na{viMJ=yEsG`tYxBVWh!9mYFz;mDI7x_}O@LEUF74l%)H@ zo-L{#wA&*jj38ND+!%i=yaqEa^j@_@cG`LwFJ<`l$y*Fw?^F+&?rfe&p1V3RXSFRz zQCp;25j?CEn=L(@#GYmnZFBs~Jutp|=v~Batt!xYZs#TfZ6C5c1Yh09bn=4;y!{ek z8FvWg_q|77ONRLdI~{sb&xhwB_I4ug4PYsYwn?BaesgQ0+(8%XiWFTO@$aeU4W-A( zvQz{VZK#0Tb-a6^{~|pXO^-pfJy&1vS`R1I;yCEC0* zf8I`I#d4SkJjGBMILb}$|cQflQYkb5{Y{(t? zsRXAPgK11uv+fRudqdrG;6sx)zdV@A|#O%4_F!OHy-?8%Dius|1 zqsP|IH0+~bhDWZ@iEr-koVhjjKIG$=)(sI#Z@|di>DS+qEtAT!=P!>n72Ce}9{AZfX_y#h&3!al~~u;-)K z1AJzY2-zV9V{aTeA=!cTx5W;Xn(sO9Pl~juy>`IeM3~>PQRg` zOSYf0Jwmc5X)@q`PgL%bqxIzNCI)VHr{o7`SPZ}BW3_t^D)q{uNp}8M*qx(+0iN5I z0cSgu+=2GzmiGqOCv`y7Q5<2H47-B*q?APGK+0U`>K$OU@rYax5d2d1k$ujjfKf|c zTK73w^H5o5&z58@N&QJ2+lWiyTJ%(lN=&q84}^tHB{4bn_ccG zkJacKmw@?A$Pr`O%H;ASPey?EV+wobA@{k;vxGAs3VKa7d!k*quvh{;ZM&(T@A0qp z$x&W3LgZbLln&KNc_F7#)k9==St;|(LUkk2XzBE&WntYgcPkAO^=>r&Vi<#p8jUBv z*xKbFlQzmTJ*RsXXq4``-jto4LUuh@|94a@5Mj%+rtgiw_QuA14q&LXiS#g7H1)4j zr)f&*M)qR6u$LCa4{Aj5F4UNQmr6ML|a@b2MS7QFqHk@4AQtPJsw~>V& z%~B;BM(y+%j>ZYMA) z(#d>F^G}=8pv(_sH(z@J9&V)x{PCb$Z@hVC%P${1vmC;? zym5y+-Q+(7gYLI;aflCdQ-1?StkQvjt?iU~?q14x)kx!U1rs^1b(WdJ)SDo;V5*ZX z)H9GEI12lLF-2!3jn9zo8!o+*m9p?RFMTs@%%c`Fh^uT~TaGHefrtN`1qQ_iulz@E z97nT`YBpF|?c<0!Vf{Hf^Z2#+z-mPwODlHRC$~=AIbRniM8DIg zj*bh_cZhPsAeFTRO?yVWq5`*@uJtQ0x{8$N1lRU^*Ck46)uuu2w85Dc2&$&A{l}91 zG8dg+rJnTI&($aR+C6U;X{rARc3eTB(WfnnJZPUDGM@a&&3F)+iDI* zzhoO>zK^u{JyH@Q>xWZMRfPpzYgT^|)fMTECK*6d>#Bt4Sq71Oq!K^*3g%s~=}gRr zBjo(uIKf6((9-)=ldStgt$RUd?2`Ynzzj6Yvg&ACV!P+nz5V*d+PO-r#~-_h6yIxc znP{8bO83Z8`Q|md#=iPXkzGJBvt}A>Jnp59TB@e@Tkj_$2FSmGl_#t)X2m2yDd~($ zaYM(YLk+_=gSmoKnR9a3K$wqYD~z@pyX~7a@bz)ABbfZ6Bm6MweFg0$3+M(2(g!#u1LEc~DMf*R+^{;wIlzbq zg%D||RzFuo7po9|$86;P2Lx)s$$*T4Ur=j8*YCF12f|eauc*vZ?XmWn@?@!B-ye$J z%Qglwiw*5rzjoh_ziJKmZuAd;6V77Cg{%h1&)g5?nRV69ulk+Ml7Pb`no)}VDM#j@ z3T}DY9$b4BIg0e2tFf+E_@GF-#t=Pf>axNL6y4^4h{n9P748mr0}e5==* zCwlg`VV(_7m^u9N-bF}9Wj{F_CZqU^u*GfzB@~)fY-jgdD?O1P;PTJ#dfJAzydr6q zEm9NoV7@@O*SytZ@t$l;{2h?5(fJDPk(-kg=p1z<0)6}&syPGlH zI@Q?h?=x2S4js?)=dWlrXR%WI1=3_l3FJRftwA*&g%THSR@#l68m?6;AHN6sYvib^ zf`VY;t5mFs&YYsx!l1;0le@=ajA@b*Tjt|E0C%^kTL1J@ro#57?F=JJbQ|BxvU-4&)DwaMzNN$e49MZG)9k+Zm_X+oW5>W z-ddX)BoE=vV{`|R8Ss3`eBvv^&2wDju5i@SEo`}ry(!HvTWZxy;XP>~V}!Rk<*<$i`k98glF*UG zpQQ`X<-pT~c_d>#+gW*4!QCy-m%j97^`FxyHoy~yxF|t^9l)V+1Bg$cqJVu~?vDFn zj6M%$OopYiI?!fUpaJ&+ZNq+j{Hx6veOn!HDFyVT znKhubfUZ$CRaCsx#^Ews67oZ|Xglx}XE3Q)Ve_zWKMed(1O}!5u z7Aak%{JyyAP@-#w-wdh@TpCySY)Y1uB2ICBik0~YrDHAc?DdsRJ`|mQUU?WHD3w&T zf~>Z^rg~9}5J64j?!yx)085CibJMpg)h4j~+t@p$3H2SjJBvA}5gboet$$D;jSY!Nd3*zO}_D+muD-FPe+E1ldngV8xMZFF*;UU$8^3DwvK7? z7oaftuzpj0x%X}@#+2TL3cnlhjP+rq!P22$oNona5*p|0C9h_!{d2TiwYOoEb|Qws)h1JW1&)0YHnOaps}HON|X&|mvrGIN_Sl9MMd2tZ1MW@5Nk02$)x zNGRos(gaxx_$eKEcwh02)XRO-KL!4O6>4S0G>nVs?gD)MW&aKBu{H)cgj`){KQ%p< zxTTI`<8a*61wPkWVtkRgAH`TnPE?b!@Mwi78i()cTmk7W^q!8q;9(VldD4cwD{!sa zmECpU_@Bfdto=?G)WK13&o2BHN#E=qnbLmBUaZM^qD-Zin%BQrMtX6Nzugrzw>?ww z`(y|!{6k{Vr_422!PInpSbx3Z?RF$Z)cr8_14iAe9%fcv(aRyYLpjpI)1gg^ic9>N zws{K8k&j{)TO7UbiZ}@q94kZ33sPrw(hv=w6gd1v(I~%P3Uk2ik8^GY{%rk{dj{Z0 z!yJV_A#-Ov?~R5HXP8-T{O#?Y!Vjx?8P{R05?}kt^*30NzA<0{){2A16=+WxyN@D( z3^0(1g39zaWnde~Ce4h;-5i@#3AIL-+-?dq3u{fi>QnHI2!|oE2;k6fRs?i0qR9H?K59*{)Tyw zKd-B$;Er8{8D2h|UMR0BRk?hv0F!R43ScpTq|w-2Kz$SzwrJN7_U9zRe>`5+ z`%&v3VUr|8wD3o*&%p5y_+|^zDZUR(jj{P>pCoWl^nM&D;vwp-7)LfrHgP%M=FQ#C zkt6`BW&6=N*jI7wH5%!refnXjR_^RqWhrH=qGc175r4h=ADyL#UM)f$o#L6 zm7s*%ib-Ga()gz8#mpE6rKhJ=J{I!r=0W+@x&dJ0WTm+lsinVk8jZ`9P`CuiFv)BX zBKf4Y9>Z7K7*-EN&v>#Gk`?J|tcb5#hnj>9FP&8mWuETQR{2Y6otKxY3I8~n0{pc6 z67f|3@cb7SucG}}TdK_4FJP-BK{4HZg8XNZ&FuB&mC$xv8SE$+(qkf;7hv?CmRb5l z;X~g;@P5PdqV-xm%#o2-`~2pDsvSX6fLGV)&BFI(m`Hz5`}Q$k=@)wqMCEYQzOz6D zNONJ?e_=+~vXGfnM!(9@!Y%Y~NcLU28PTuql zIj2Oaih@WK^SG?XNJGKO!aw_H6Mf6DAlN)UpRHx8T?8nc+`{L8;ju1->C&|H&Wlv~ zso<`p)!FyieI?z*dXOQe$<(qzVZ@!KvpEX5|8BogvtebBKFU9Na~$2g3uTuMG~QYV zb`7i2;hG{$=0&}H3i<0xQq)l`^C>L|;0 zAE!LRVf!VS8edp8-t?Cpt+FcM@pHU`8nywZ%IhsbANC}nhB`j?oKzrBmtEF+GR>z0xpep9ziiVpcXXB_$IPKv znwnFB{D!PU2E#bVWN#L|n8yB{754Y>8Q;0^neoGoKsas}+ojX}leyQlV6I}p+lw|d z)0eCHY`L^=mIKfOL#uQDx~Th}O->Kfzu&H~>R9*Z&LaH>6D*H5nHs4cV#%JptYyY; zQV-2kXpy5NM?_RI0<0Xy#hl4Cl5_2O5}5^RXqDdFaD?m7^+Wrh`DOBy-W*H|b;~Rl zXk8O|=L}HV-PfG{85CvUVidaSm4eEBo9A2FJ#S;{D@wYoViOc2DJWJzmv@ubztK;L zUTK2P#6I+ZXGpe6K>u&nV%5a?C0a=L$z%K1*9WgZTr`K9<;&#qDo950X!s}@eM>9W zzd7J~yXFz)`N*OcLp-|^xbzMn#|lgdnCztX^9m@Q$x@;Tk}hlakJaycu@mEL0I?QQ z7=URD3)@8EK`L{wVr;PI>rMTGv%ju}R=f(~?|yr0A^b*vSTOp8YnmB4$=CdRT(hGSeqo4yO&eX)z@mL`r1{)U*doFU8fp8EVQ zKv0P9CbG{i0624N;DBjV7Fu`fKmLM*U!)~O> z3?$;$nz*WxXE>p%ZnCRi11dph)_$HwOuNDKJ9Y5)Ohf; zM0(LQY^DLQ*a6>Mk)%77o;901;n>RWYNCyDrZN&?QD6})%z&(Z?*o~Ro zI#z5h=;ztS{mB>;=#PuaOL!P??%(bW9JSGBgN#RW;U8|HlYykk>r#CqMGcIbpR)R5 zj6jP|?bz(sh?t`P?YM3`EHj>FN^LmIb}klh&VH>S?24k~z;KCTUDhHOscq5Iuq;og zdC|uTP|*jr2BRH=OZEqpFAK&%8`Y!Cd(FpN6w=;P8H$C^Tg5XSfnx)ctSgnZ*EM-TlIr`UGr@fNmopcjcKuhlr;8Ba%OSE4t#XN;v`C-N` z`6<)8+~S|u*wdIbd3sFkv<%=Y%sBh(nA78%xXeGQwePUZU58C`CgYveWhp`4@x(NVH)eO_PU z%iy)F@wM;E@O{AHI6NhRdw)c~tj)a76P5uPe{7)aujf{siItDe>e@;M!j|>jCodwq z)jrUR5j4ov5pl*9NaUrMdZA? z6;8kKxGbY9WA(sH=})H0t#gAN9N1cP^a^xtJ)>U*QtxV;UoY>s?a66_!o-3mt zSZcmjfcS)XkBH_9HS~v13<=eKB3E-s4W*uie~6a7_y;Win@Esa^_`JB=V*o_tM3P* z%*AYZHJk4U{{X^%bNdolu`jELaYIPj``K~7q^JR|!jubmI_?li2Jt|Lq4l4e;k9Q>7``m=gZ~i?p!;X;q&wAa z72Iz23BhdMT9Te^$INb_b$6{(?(QkG{#)`s)o| zQh4$q$zsCj-0qd1$Fc}@2D@eFOE6EPb@*MTOXAu~T%H^w=8>H;tb(7kzZ-5m!7o;Y z)0fL#Kk{y1#fm|j%aG_7Kn1;H1ja`{yRbzkQJ-4w4CHY>3lME@mAGOp2xUM}G_XW5 zAbgxus%>1nW_QM>o9R;gJmI-Pe(m{ z3%Wx6zoJ`d5gE(Nj6A=K9fV(xKL&jXuKjxEg>LmfQCJj|({CxEU4$@;-Q5BlH&0{{ z_?@ICEfj7eZug|j&C-dKf8?Mj;PF&np_&e01=OP&t>Q->;C}ixn!scByL1L36^}~~ zc)F4b5+4q~Yz>x!2Lp)(=Of2(SJv!J?>r*lb}V`SQ9Ym6a9_UG0CP6TIVQY@Uh}i4%GR@e33Qom!0VAOKJPI! z@(q3e$I^L+Q~CdY{8K_@6(RFflFH6J4o)Q$A<5okZ^u4Hoa_~{a_l78dpk}J$2>O2 z$mZDFF%Q4{dtJZ3{pY&R{eIuC*Yo*!_}lOEVXfNO##xQMP(>~rSFSOs{-t2JQcTka z*n|2F7K>CCIKLQ@z@EXi!^FYWX3jev2yT*SHP<)aq7*iKKkL8x6?0*|No=$740uuO z;j?)cJk@Dgu#?L#u_Nx&WRCN9`=XX#ogl8&X5XrY$tSVTI*;IHV->iKpcHh=x}sZf zuu}}gtE!s+LSB>=ts*DOP%v^m{+q| z?R6M`%A?;mD$&%L0$&3PY8drTz8-KK?q!byTbteugqYGOSL|6PB6hG=T>k)!&U=1D z4uYqi^=J_L)Q6Sq2kM+dPo8eC&1axluSQ(Av9=I89ye8-he*m$BBo9;UFJp;4{~B^vajRMgO%2VL}vB|IoDXgrW!Fl90brjU%vnC6vi1Rll~4m5b2zLCh1h7 zUq*31ZT=af6z#S%!=&lBq*WRZJ~lk!pvV6c)!?l2U7E_v7!`&7FOyAcgS`y70t!fJ zuOf4VYf!E6OYrsRrLAF@_#OUnXAUf?X~p_a6ORXpKACCSb=1WQ%1QyKg|s;-~rD`7f%~^Lc%KRL=M^h z?hv;Ls3Fd_+$$;%*DX$UPxrn0jyo=!#A{NJ+ff5hdv!p5+v<;*8Iwhp1UZ-{Bs3+% zEhUMInI<&54@6K87yZn(=9)19lO+K6^{sD@|NY{k@mA{2+}8nkv4J&}Axithvj`+5 zZ1caEjXwJg>&2|M54~&82R`PG7hXK(QEU;z$9Cu)pNyL6HxH~u+q+(JGx>(%(2+N1 zvmZB{c+S37)fu>?YMR4e8-+5`zT2iivnG~ewJ#TUzdzS4(O4oYkk|fCB&%kuEbD+6 zD&^w`|Ez{yTNl767Q-y5E=z<ORxB(2giIyzvvP5N^Ruh#u@3TbzH*(HRK8nY*V@&{HU3bK zd7j@dEB42E`f?NvzJX=^TgW{VhMnC%nzBMl9ETGlCXeGq61{-Sx0oyti@F9O$PDQ( zWSxJkT3*0XPKnLMJb~H0XHMS9${^irHsW8O5NoAcq-4~1&ZC3Vty=E91p*BAuVs`L zk9ISe5He8;mn8240JVDSD5N7pUFaKKcc%)f<`kjXy;>vPNjW4nYw0{OtHB|JvIG>QS(M4(BT_0Fb*K@uU>nZyn;|LnhN@>SgB|qVri~JG zUh!kV+MD;D)Z5lE0Bc+ck}uZ68FUo*4l1|x*~Y>udQFQ;>hO2bwUGTs9?cW!F{N)Z z1%h)W$Ht6Tc5-M(&}jVcc~O9gBNt9J_@Q|3SvirG(A@g(?R;x#+|CJEaoVrxaw%eo zhzNJd(UkLRAkRN6uJ$3a1%N=M@ZcO<3AHe*Qqv@(=|O?ujeA$GBqO9?QpXg#!+M9_ zGuzWg8NK$yUPU!UgFnt>h2PIi;?m#~xG0+FcnQi{FD+zhR$qFf>;uWEXMbu(@iW81 zB6Agzliv@+v78?TE*;_vp|?3lf=;*`QDnxcA9^25Yxv3mZsfB3@U&S#tm3e|Fy(&~ zbsM=wfg|enGvz23)~~UksbWpAKM<7Q9{@a(o^@EB?X7{%k5d{!MCQzf35Cg_o_1^} z>a$Et|IGX1@(hGS97E2UrPm_(q+Uk*hTUh;cRgz=s~1ym;SI)Tw88ry}88Tq8PV7P%<0dbeTfNc4|a%{1Zw-AT9-epX5g=Sc6+bi;@{*u^t z--`XgC42tF4V9EID-Hmj;pZ!l`Y@=bYe{k(-k*#K|IEhi^kt!eFZ`lq_F(x)DbwRQ zdrgKHZtD9=&J9Pw1C37sVfYlFXFLTZh9hVV|C-QAm3z2EyYS;OX_%TE>5dm~mnP$J z&mz9ZiHWPvUWNEV*P2Mb#A9zqCpG%tHdq(-X?`N<ITf1u+F1zIcpXl1xiJyD3V=e@a7X=B% z0_HJa&6q1dqh0L^XqS?WqH7uKD1&MUXJWuJYVk|510%bi>01m4I`gwi-kLWeixTUd zxtke(Yv218ixvMd!_IyC+}71o-?KMyOmQA4BlaU8dkw%~ENo>un@RaxJ6>g_Q>Oho zTWT0<;8$UeP@tII`*Ai^O+PGi!_!T`@0|-z>1WHdv0GgK+EH!@Ds0rZkJ0~9{{o9p zzX`fJKB`$ohV0r!;|K~XwlSlH+Q&|-X#b^9E1`+-wGOEtj=Ya&u}oU>Sn%fBx24;c z!Txl>x@kC6kKS)ExB1j8ko5LfuYb4T36}OGX?nP81KCJhTZcSh9<}JYi1MT&>cZ*| z93he-uiBYH)DY2EoSSQ@>BNi|8ayF1FZ2fL1#B)D?2P@>%&{}q2;;C*4c}$WlaOWn zaG$E`+t^y$TclpJgQUApV)xOe?|lqPt5M^9CvCYxPgt<$ zRmp2XO@||XP1Jw6y9^FGfWD#0-+GOmmHkapXQJy~YxVd2;-7{d+&}04Zq~u7 zix(Q&7SZ9jM*?6TBJ_p%v*n*`eTN6OuGJznCV*6ISe|H25g(CEpvQ5a6vNG)#=dFu zvHGu^;Zlj<6BNIS;G7ROhNA-3oU^=ayh?r{nQ-BeXAboe^kzKwHQc8FjJ_*#`8aza z(H`@yQHtiL1XnJZYll0tdnvH-(C36HTrn==M$!SDEJOwiZW&LtD}l|VEh)x2BrX~& z;l1^;zb>txbaz+I6Zza`WGnSj`%ER%g2PNH7}}_x0$ag!w7<2%{fJJ_Z)8WhfHOB5 zrY3^exnIbh`?HB;bnR1dG)GDut?bOvVF zMah<6VSHgVk!K-VLBs0Wv(Ak7o7>czzVFPIRtG(&Uu2>bSq_DUB*m+I9OUXR})bClAv&49qzI~xBjv*5j0{T zgb2kCXV1OLO&61;n^87yAMere3*B=@ZbZ3kQ%av1{F!1%ghv>nl2RPE6@WUEE`*5{ zaH^2zX#W8?=3*K%qWkrznK_VmI2GYC_T{<1ZO;nO!n9zeX*?WJ}1)ouO3j-D4iT9RUuYC5lM5Aa8QOM)~CkgL}_GC&A? zSehB|&E@2Y12DfS`xa1mSN$EH9bT2oidKLF{{%B;O@^mR*-C!Yp#aE%-UYYbJvvdHc@S^Ii=z_Jr2i=_%;n=eS!G05LgVY{YJ5a_#AZz{|vt1DXV;(-^fqBD=?hEkpQ>O1a=Srfz zmp7nWbDP+g`GRMf_2%5G>HJDNo1d{e!)@oOW9=n(;b#wo|M4uXD?Y zK|$T=KLTncfCx!pVPktn$hoY!DBM(Zx19Lox{aSgduBD7R(*5bo$!pBFM%UffTl+2 z>GbW>3nXRZ|BR^GP9eoLYp;WI;U7w;Ph)2;g1M=nA<_CL}Vv#ZVzl&uuJaD$J zt66eJF--B1es9sUJ=q-N*qJ;kue=2IQ8{2;xvv*h| zC9;u=!g~+S&$z0sv3M77%h01BPMH~+xOV4ASSv?KUFKxhL%2XMMP%~O^rG4xjo^ni z@Y@UFo=Yl`kLCe3eK{?7Vfz6wCymU;-f~dBL#(B!qVsgYVGCMqd$F(e>&9VP2Q8|{ z(1|)(9O|2LA+AbM8#SzLBJ};a$q-FTe!g`Gf*eIoEbtn5R32QI+84<5F+YU!n4R=F z+Vn@Hia@xLs+eo6KMsX7!G&dPT?@~Xy`DTt5wdW)nHeOOVr*m9Ks{rSN*BhT20nIc z+~THnND>2ZHQ&fo*cPXU1OMb&AIY}$bsn>|b{)(pt86zc3F;l+~q3^0_WPZYLIr%Q~<|}*JB;? zFl_P}L}$@_i*f6Jr%Z;X{fEY{m7v3Yq}nhnNu_jrgP}mTDXj(z3CH~!eA)Z8|7yK( zca?2o=Or7YUVSEVB{47TwAAQYi0j{#mxoAh4WH%`27NDx%bn^D;ZbCr^M92}ZffJ* za2q9mD%`Bu7np!HIsB}}?2v1@8DOWaa*C!ZNFF239Bxy<^Gv|C^SqEdlzvWE!9V2R z1MI#}$}M6S8eS9*D0cu=g&@^s?VYLWF5Y1c8)^S#8 zk2%RT|8ZX;@>IQ+UYVPDqVCSN_3P?qZKhquoyYkqir7=YBQb4fCpj2~aT{j{5S=&H z@}9&ViYm`!?I~vO?NVP}-#8xtZrq%oGCux{o*qt~lLQpV>C2dWi5ozE)kp;K=SIp< z?+x*KB&_D4;`vG0oY2t(ouw(`#M0&(Y}a)pL&=_n6_aM3*MyW$A5G-#id3&$l)|{yLr<@Z&(xnOonEP9+4N<$bu5Th3;;+yq|v!Fwz{ z@^TyhdR_2jbIFZRvg2l!Qg4Qk#V9u4tZ}b3A7`c{B9H@z;>#>dMT7niQqZPqjdJj7 zKowqsSanc*62f2u$1OmpHvy)mZ|FEH?gDM>{}n}as{8^u5#u;OM?1) zf^yq#GnaZj>QP0Bo;{wAyV0ORK>xS$_*bvf?`KXWck6w4E#pz!NUCZDAis1~qvuDw zN6LbnOCEDUB$M5KjF7jkRzl5cV#hUZP@HGG7F)gD-g|Pkv6R@1ldAcKe<&|_ViB%3 zoBPD*-t2CyId%beK|1Fan3f9|vDw5b<2dZz+ZTA)|H0E;F3Vh8F74Zx_joDwmda>B z+pfNxAC33N7+THv>b9FsMr3j^v%&r|OnQamfIrgV%K7n)A26Fo=-A4L6+ctmzDsi{ zzxO|8&#Lw|R?n=5jeT=rb`DbYi_!6!)3)@Hy->~R&Qw64VB-5!k&gz%dl!e3{=MJ> z06{24GuYCxSV7_B2(?P{!iMJ=X++0A@cBiO#?!?0hg%ZMPbj zdj49*HV_fucI(n2bz$RAo`UL$X*_bEE3SYMGxv^-)>pmGn86aA$GT8r(JP&vI|ah?^Lyg;G$fknP0~xcq}1UW5ZL(LK1sOJ#RX#*ci z1<1sY<2U>(5q$Mg_ypKw{K7U$U6hxb{}g!QuX=v0nILu8j7d7w;a{+~f-X6yM^M0( zt|AAMsAS%#G(C}pztNL*EDARPfUW5XawRQ@02T`p`;U=5_GL=Og!`UgnegScNdIAf zN*LFo@{n~tb4&2fe^cwks01>ZHETIPzN_oMM*c{&WTzbvc?xTg>0m==nYs~}N!bAs zuo_y|o1qJr4JH>Wr(T41q(UMC!X?Hl8R4wga%XQQ=ehSE%6Q3$3fz-5EI4odpkuym zL-21Ee52NN_&90%CIOJA{d`DlZe3HkP_yGXY6t$y^`Af38LVUK+JhQ#{`dVtkv`70 z6bqH<^1#j&5z{Hk;ekAEKU-yB(vN6zc{J?}stgkp8Nl?SX_rk1Y7;7TIlt~Z za))5QH^D5Xom|P^Gkwl9m#;0oHGM=?Ly-9?R_w6~$+|0C5?`4w;&5^I`2#B|g#dR!Qif~Z$3!16)n-D009e{fWp>qL?c_O$G<9Gfu((H$>|PVa74);-_|Q< z??S|bGUAvu{+(Myz(s8#X0jpJn}p<5|$xOy2dAr(Q$3 zn#uC(o$@V|8mzBo%Gxfe*yG&^yWw)}A8C)xln(<=X;9cWZjTuD>@tvzD9`93oW#?m)r~y4Z?C89G)=X_m z{lK6G({(%udlS&xYa?*GmZv^)#~MhAiCa;8#Z`nOj^eb(WEPfaVuzD|R#*Q^5>e*@ z$#^;G&%Si}ToGw|M}^VX9xTj(m#=<^lK}=qN@_Vv>Zd@TCn7uYs`+4rGjAq~$fa!7 zz;viUd?Z`E(^P*Oo$;|!XwPTwX)`YZ{h?c`2?;~9I?wkazr093Tro!f@fEwG$f&) zxT~Pt4Sz)^?*A=i+m=VR_={utO07gU{GmskEE}i3CUEu}aBCKd?5AO9mte<^`5}wF z%;saTN5O*b>I)hzi*fM5N6v??tq6K4D(N3;3+2jna<5kAUF7g{6r8%Xu(UF z^;?p=RE2rX8^X9T=X;ggzgD{Z`5J*S`u2#ESSIg7PY&EM5AQs)mg_~&*&IZC74^nG zeRr((w^hLE3HYMNOjqt;DrkCmg}lsM8@y9fJ*@Fbek@B>@={9l5mD;grFAeV!HZAy zE-HXQ@=8Q?vvvAcyj11~;k5$ic_IU|famra2b#54Lag$j=kNiuJ`+AGlAHs|OrAVM z(s^*754q!KmvV{+)RcMX3E4biRn$e#`QeQLNaG4u>~LX2ym(E~M}(v|q+XGVCrN6d zw?u~9gPLYVN*8~WfvayS7P;W({Iq1aKvy@`9tm;JYCyBb=A*F@66E=XH`RRHC%u{W zN+SG-494JVI8TB}G-_PxDjsqYBW8=}0GJ}T{rAN!zgvK>Ds;fJS^-5PJ#!m`Fsz5< z9$s&`4WCizy7a3@l|IwMW%K?dG?Y=T=RNmmi-p=Mqu`6MQopZ1zX1 zL}(WQ&u-?o$;r{VSJqvMr9cNsjRLTf_wSPL(Kyd@Iz}2gEluZg<4}9g8%i7(p>;hR)@`BPn&u~tl}1%+p~V?;5yby5tx0SChj$3 z7*#@1c}JIwr5;D%fI0vvG0}I9Qjjr$(fRDskMIHh5w8HVOCE$6lUH+&i2ckRKYg5s z=vnZN#-g%R^JsoC#ml;e5sY>mmzrFxe-Lau{|3PGICiVY$I8utPJXYd;p)F@(-v;U zcFXq$$oZM2m;#^OjfY>%^mmjuzm#aO$Gj{QOs|bqcyf@VQmP<{(1Aa)n(78n#Jz9- zp!|S`B)@)(oOnn>+359#fWph}MXC5=-wOGZ^4v9mS8NuvOhrVd)PK6o5&r`>F*NnF znRou$-}8%Gy(ZV{vCag0{fPz}Ne$exln}lVh^o2(oKS>Vi0xHRBE7yqF0@e$(2W!N zvdK`IBmmWV`r1T4pv~O}2TsP?14gXh7~0^E^{R4Il5ih3l3+x@CiDAe(8)E7xh5@S z51)xf{aghMDX=a?NAJ!mxrE1=@EA(Hwl`zbT$ z*K79#>%*!eCC^>d%0kv1f-w{pf`BtEaiXJCvV6q8y30e{2kf(JxtZ-a*|k=B!G$0G zF8y5N!oh!`TyMl!3x6JXX@k_O3O9|gS}<;fZtHJ0f$Ip-ZnCbQeA}efYe(2@!PR2x z>$m#aA8B`S!2f%{CaHsyCzOnv8&$O=v!611=}&bqlu9^{rOfXpWPUq-aeHgX0qM|r znmmX@eu-Uz%zJ-eYG2Hr{&kNSvB0fw?bf`;rJW1anGcU@cTe?awo<5& zClC)40xHkU;{;phc{&`j%D<0N35>_-oR=+pEZE^ziv6|F71t*oQolTF z61^-ad0Z6^RFxcfyzaQnH>j0wfK?qXDcRb-hICC_hNwJIb*!A&qnX>V2C;FBy;xG` zhJUE+tg_1rrAKMlm7?Amd9(9(Jhbl71aeds?XE?aHVVS)om=zz8E*Te%p#)8Cwtdt zEsF_QUGt0t)O+~=Lp#Zh$06aZTN5`ymXQaJjdvi{JKdTUAZH2MnVXga;}gSEi1TYL zj)xyy)n`GMPe~JfTPPDX^AW!HPOsYu-mrI<%T3jwIgra}b&S!&@;0e$Jj=pg$0teq zRvn!2?5q4{%G=n0D`%o8eUbW0^B(j*5okuu+dGRCn=1;~& z^Ft8+`}dbAO722xDESr4dWPjUCx%KnA-})_0_X&67TXEAmHv1*2kRh&cSrtU%9+~u z7G*Jp%+c_@)jHn$;2@lTe(7j+=Op>HZ34fn)|Rd7(&)$-4kDhaYtufe*vH66`M$tS z!@1`NaVr7-c;KfvtEQ&-muPMIMd*sjkc7=nL@}9WUPmn>PP0}U7}^r7HJhG#P`8W# zsKVZ$j2h%}z#IR#x?P%WY_fAy1ke=H7NrodIAi6_q|9IRuYy{l$o?IqEPR}o-d|BL zL4>WX@3^#>zbgX~LG!h8t(f7oov>!WhGhR zWSGmL%b;*Xww;4*DPuU6C==Zx=d{6_di-PL%)u)GBXknNNVN+a9X@{i>u{hd>G&_{ zH=Y?fJ{F!}XX}R><5MzL@Vzadxu{IA$4&r1T`O+NNvg~e2G&RV9Qu-!+aVoY`OAG< zrqRmmCyTV(U!J&klkT95Tb{69VK)4X+_%rRv`PgJbBoH^&#&#kF0?cJE6fhXOZl!I z!>m_%J1b`ag;D|Mvpg@akdDo;tJUM#uW|?=xX5#@~OmKOopEqs@n9WVis2YLJ-G#(O{9@S~S$ z^Lo*1OC_O_Q)i86c11}~($QSTkf5d4VV(y)55WxDQtn9|12YS40!Q;x8Lh`#V2fqwfrM8a`bldINe$hde`pDG-GN?vu5P?Hzk0Q^u(`T9{b1ce{DvLy#&cT zq)vON(5R6F$S);m+5qgQ zIP`^?pLo5`$1Co`?{jraotlM8a)6Ah&3jpzJv|+qSNaqePe*-GqPnhg;!L ze>8=|!?BXpiylQZs?}7!7Q0U!KO4_b;_ORwG?VI6p`!9X3uwWeI}sXa7RT%2WE?j< zrr@8syOK5^xkf8Jn&_fd|IRq^noRwtsI(fl4PL(DwNf7a^YDAwAJi3Ja8cCIu{v5u95npNbV{6=6lP)VLbWQQFRs~JYzCqUu-j>=E* zfX2n+{2^?<%e;mDqTRPZ3iXi^H1)q5XBP@PkFerpCRN{lwJfb2>Zx>E!^>Y8&hupc zm%l-nE|05Gd~{enCv@Hw_b7E{R_=w7BcAauI&dvBtyv~TJ|5JChd66+690Da)y^|mvl(xdcJ5D1oo`Q7GqQ)I z>Np7?kDmz}0@8#|Cs2r$Pq(8}HywYZ2B-WU284UOVQXlk1^j0a#}0iTf2)k zsmvzt^Y7i?rbJ4oTis1E;4^2bwEueuI1S7~uS-$(n}OFR2Jf!Q7yTRa7If}kix&Oy zULM3#^M+D(@fMaTr!UI~olP4=zVoY}f#$f;(aqjfOjL6uCNZ&*HnbX6mcKV^_t`L0 z<5KYuS^-*>q+3%nN_F!cIWvjYVx<(jD{IJ8hIFfXt_2Ziade3wJ>~X{YRV>fo@~mh zay$)lVNe#kyn}>Brw+4#)D>seH*H+1H<&=Yt~W03wRr5=$MD;KJ~#fmPaNh6G@K66 zk{2Un)Qp|A6f=JQ8_X+vzvQ*wxlvd(LwEA+%zJEa*hMX#$arN=h|Rsn?2I(v?-t5C z?--BdXzQlEzfxvz`Mze?>&H`_z;T$~w1sr|2-8sHDW%bis?Cyf{flOI%7W?(*Gw)D zT7SY#u$*TiJ-XcC-%no_Vq&6$YBjH^_W58@hc347dX_UvfNI6$(zjHGm|0w!YU)kVh zQl$;&^x!kv&?PkhOK?=<%CQu~h@jJ$)?K`3;Jf_n-!p%dbd$^eW=TCjBJNf6N$Z{d z)!kI@A(kR2-nl2Jk$!4+7wAVI4x(cQhi=6f2Ha{kX{Y{m3pY!p@?;y|nulY}EnZPw zf_V#ytSzt65Y|}<{sy3;K+ZI@2`|I2A&MT71ZWq$=k>cehL7V(G?F;Fw)TLDF18>q znGC?-iNt5+nq)frSoz4%kL%H3I@QbbGw&?6+`4KTeu=zOwD%*UN9FIotfa$3fhq%( z=fY9A7Mbv49aU>`Z*j?g&F&RNitTd_EDp)8C&`R$Vbu^R;`h}1&yF_r+nH1!7(pZZ zOXj8lbxybNZN}vLwd_a9r_M-iDbG#ubQU|YM?LLtvDvgqwj zL5y9M&FtRgKoC3Qo6b6|=yr{>fI|g_W5HT3Rrg-|pB(;U*7~(~z?m)r({q{L4Dz$g z!iop8s;cGBe9N4W)pP3PFDKJc<=OVJ1jMcr#YV;_B84n^Tb^F}2}mb&iO6t2hITM~ zm%rS+Hqjl&bYb2|$VWDG})ZGMJ6fe3GJ05Jg$@U*dz z&AK22HQx;2ylfD2`g*@Z;C>K0lN-KUUD^=Y=X5@cQe=;w*deb?1<{F|g;jQ3m-O}# zkcwnL%`QobTW6SK%U&f{&N&3rqR)|k4WX+=aZ~FK@^&{%1sQt3Tn)}qQhKh=1NjDS z@Qdo7)b{hkkaSoVwOK>(r1pRgjtQg*icU@AisApNSgKcYHykgi{L?V zB?oTKhH}&X!4%~hryLpG+=CK}qtyndl!`{ZnPfgkH)A%i ztqF9JR#daE><;dh2V0<5nFT|rB*uZ3>4&_-Cf@PzT4;c6nF1%!MuG@{wcN$^BRTA- z{e75yLs?X#>8@T=n_IFoSx3hHP&M!hU1YPBWc_!gWDou_y(oQDA5aAJg!qAC6+?9h&d=Y3-T z#F&~88>+$e`0Q4pxsh18?QI~clHNo-$n6! zTkA&QB%pKTC>k^Rw1aJ2ecwt5SbAcYFqrbLcStXgXiXnb88kbpm&x9?~_ zDxH35eE5J6@ZNp*uZr3DJj4z3Rkd$|kI=%c{Y-65uz<{uHX};h0(}-^NEur2$A8;L zmu$L%b`Q&;2}J)Ua4TU|i5KJs=dFyWfSL0AjqC943yR!OdQzMWhZr=R1gp_HsNwh+>bhAn1q5^YIBl);dMTkyg-XfbSSf-EbX9pz(T;#H*o7)PS za`*LY_}~VwyrYjhxU86{8l{|3taoF69)P$1+}@MK%Zu^+nldBU1oPYyXuk+)k(ocF z^>ob=U;5gey#D->Nu|^ASOelcbee<%goL6J(UGy&LGUz~_n{-!fBN2Z`B&F@3k#|5|lj)p#^`tvivG{;Ec)%5a8FnLhDbeD`TEQNqNnwglBbq?`QT zugb~ZhfDt6xdS8`B%`=T`>W$fzk|1#y*=~*Ug^x@lKOEE2N@l!q>9^IJCjo1qZT<* zWRbe}6X~-tG;6xKfKdxAh-Gg@{bD9}{hnH43fv)Hg z`u1K*HoFO)j9;O|GKR&Els}{5ope;X6bCfW&ddmt6yi}6R9h* z?NzsM(|aPFWXE<>K0vh83BP20b@A|&{nSBm;cw+|1@a-oM&YGL@mAdG_2lL9a$Fj3 zJG|>r4PXD2^}8MYt5H?HL`!$1oYPz1h*IC`JJqW-x$K3~#+F~`Wq26tm zbX7MOtn1Q@7U)Oflml6o_}7}4h1QtRYEhSp=!PYAl|eV4UQS|5Z%`Bfq@k{Q+`BL; zBqRyp_5Qpn2~bD3p5nr3q~@EZx-g*bTIuJrAMZJuNF0s_RKjnEiWOXOeZpn*{L!AH zOoxq~h@F6He{)Pdx4ZX+5)xBamevf6Stb2=EXT|)fv22qXjUj7v{C_W5}gxqbi~MZ z$m#ER+ZV6`;$0K=R{<{-v+TONPZLbc1LqN&zRX6?$1@bv*b;qF6J6P%|7Xq8DxR4v zpEs7KVNsY3GLW0v$vc~a{1LS3z~OWATzw2YMfBL#Un&Du{6YD{Yu=ul&qP2BkWZCO z8AY!y%Dw-a&ag|Dv`!fvi{<-Pt5)h=$%|C!*Os*w`;-e?Hdt+Ak&cu69hW=dPRsVw z!#>jFseUVhQ;|y~4RETFTNNIQK9W8=^y$@xk{eI0fe|Q9LU(yvQ<*?tC&|yFDFKro_vJ`XToWy zYxFdLPn0P#Lib2uglD!u4ZZ%V%Uov7!L7EfrM`c+B)&~oMUP8lI#&P9o!|~RO}$KR zOmS*>+B5U(>rCvx8#vY|Q>`Rp1xe-p*^AjS$%$L^G85B38i1LIZK>g8Ok@Y|TsxUm zGe-zOoJyi>>Gb{$8h~8XP-v^GRs4e$@oJ403s^yaww)m>+=l=M9<{qggC7sNK}#jM zENANUQCmPWwx+6?RlVz0Pf51tvX5B`y{b{YgqPsesN^Yk7h8zNEG4W+y{9Bl+=B0? zaMX19VPP1yE$BaQ2aL*rZ!M{&2C#AI{%3dYnB!BP^mE z#ozMDr648&Sf0vUW#ku<1e(`7Ld#ogNjF8$^6_Jd;8guKE=}1ui9P!R6 z@A3sEoI@6NhRF}(|4DIyu`G)e#iEck9()aNHt}A-*XUfVH#>nsFR}(Esw_(`Sa-dA zSsgh4NcRNu8Um$~z5bj0uxj{Sa(R=o;UrB=BAv^VTGp}p4)KtQ$0NnWN+xuyr`B1( zGsm4_#$xCG0b#*9G}V8}&2_kgj>3-bqO&|WFUaZi=v23AADr5 zQLQ{ro~Fw^zc&ZMVMX={4gyBPg}u$gK$%$z+-QTqhwIJ)9LdQ5ZO@)^zk00$ELU&s-t+lUs53kv^D~GZmH34B%RmBXqio{7EjFud%E-%kFU1{#$tQteG`@Pz~%d;I8Vc z_hyrlov`q)wMGEgCninH9sG6#2m)q^kRXV3VqV6prtle!Jwfg#bCp-uHGJC3gEjbx zEV8CYY7oDdJ4%k^vFVP%&TH1Fk#<)*HJ9w*1w0cf4ICy{4n`#$Z7Mt)9UScE%zV_>{X;Y zSBq9WmtQiYn5tF;AG__E&X^07i=g7c*UD?FW7V8Pql6Ey(*jul+ze1EFauZB+5}zD zd4WO31;q}Y+d2aIF&7PUZkhvkz^_WR)z2LVHzH{?4W6eh(a7(e2hv0sv(HTr+lw2~ z5h}fbH(DaO7UX#Gby*0}Is_;?Lhf8u+y%K~!t=H@WONEc;~6#=Y{%*>!?BGYnyDb> zVCma_(`zHSNf1KNr4*~?N(>|Pn&%=2XHiT7t|*T|1C1rVDLi`%yE-k(Iw)a z#vx*XAj%BapSjenJF!l2XIsSNSGxmH8Tm;!+_J)DsP-&~y(rrt|EUmdKvZ!hkYwoVzUXz=4GnhJ1_HOP5I2A{QVU z7JtB@kJonRc5wQ9k8`Sd7hlp3Xk1+BjwbGowxd#~4~3d!owoI30RWMF+WlH*ZF^TB z&t14xD?}++VImr?QqC{P^kdg9d1(QXw3LGi0|X}@Vl{x zWvWvp+hQFdnDzdB0i;xf@+L=A>1!p=_ndd3A6K{&lbue#NrcKYPqeKW{U~-FpjuiSG&a+x73bU@rR@N`zGN=pPtZyYn%oC_vGF1On-8&ZjG%%rY$ggZo zt)c3>oPVeY0=dVm#>!O19v-j%qX? zyl5d|M52j@aGlxlSkE#+!1WS41OP2onjODga6_k~;qw#<=~sJCE*?Zl*IsMu>hmY(N| zqbSas-mq&ZCX;I62*dX0D9v!e{RE`H=D;e{0cKt(2Y2`A^6XKbmxtAr?c1qJdo<>% zu*6>pe`!z@bKWxEYP6^^c_eRF8ka6y_3PRW5m50GrBa4uy#?jacwj=-?<`cK804f5 zWlr>w`^mP4FWvp%G2z*R{POv|@EP5*{hJ#-G!TyYwB^*waL} z7K`ucJ9k-tRW!hV-&!^7+D7(lnm|7lJ~~X;HJQ)qn~hSr92?X;NdQ}Qr=I9~#q_>U z_5UJiU6Ii502s?1UA&r>)R$^S{^aH{!DhB}3w1f;uhbo7{R22<*R{@}tv?rMdq@Mm zPy;pr+1Zam$%||$z&OU=jiuPxBh4WhlzwuED*X$*oG1B*-KlD zRnEO)EPIvNLY0XMTg**)mFFbjTZ{>|syFv*{oXL)sk~#4yfXDsP?CLhIYf40{wqP7 zsgix{?R#8}fNv;e9Voy;hFM5{V-d( zxj&Mscw4(JxryZF^>inzuWUB_v_M;H?82g=X)0tFYHN;FfRxMam_+A`X7)Vv-)5ST zC8=8|Ncq#wkV}av@HXA?{?yhuZ@=QQjgOz}v-u|~rL%ojJAE{I@|!%S-!em9DN~Cr zygJ-vqj=H2O?7i1)`+HEEx&sTq{`{eI-UIsCIF4+vXl7}JmR!-1H1KFg*O?74RQ)E zFf#s~i3z^?JAu5WIF|#fAt6X!AMNZww_0e&eO`*Uw9hYP7rds+7^Uu`(ar{WdxVO` z$dEYr75>F)#B`L~%)l22x>fNRA=sq3uDGW^25J14)j zdVLSwbRsG2o}z>dlX#bTsEWYr;80Xj=7J$ZZ^^i969^*{7PFGQGKoy z1qrLPP)h^*rtlto>3N=P@wKTwGmK+B3pxgLN;fH8DpCcRCg_egIJdEdIF82t{c1T% z!1!Q##+hqe)L5DSZ;KD-EVDO}sgc&Nz&Urx z0oi$c{?0jtX^u8jg?bUkOx2fk<-!Jxmfvq0jGf^9o6Um`@<}w}GjuJ8Hbis=@X=pX zGN>fz5@KhSmzV7XF1k-zr(sWv0>s(4oe~VIZHZ6)Yl_C^7=PR0nMWIKOqbtX z{q~gh;71d)&yPiwuH1F7)787eQI@qQ-fe{@e*ZdUY$dN2%i8ge@-eeDl*Wq3yo8ma zY8K+gRo#Qx*J`aIG<$-xQoz1X7HUYe*Jc)_y12F?)?HZI#+{clg*#WEMF%5RengSJ#wDm}^t^tt36 zT9NqdYT#{U9y}}2yfX3E`CjRDL4$RZ#ijL~o{2v=O&|I7mnMGZPR_(!tJma8bG1ciVwZVQt2x!+v;$oDMM$n-r;@C# zG&<-L!pH9o_dWf_%m`c1m67<2Z(?&iP$_y^Jw=}Xqv$;Rss7(TTnUv`2wCT=lFCZ5 z$N7|^h!e7B6tX$?F^UjEHgO0EnaAG8vFEXmbvVZ17{@-2W1ipp_b(iehxh%u@8|Qn zx z)#pQvUIyUwfVXDok2E!G9{;(?5lo4t1A(1V10=kOkNLEtnp>hqp zT|6OY=J2E%7E9OHHKhol63W&BKLG}A{USJjvY|p^%JE;9xS}C9d)f{iA$AC}1|!YT zZ^b>ovASi#i5=vN((Kb>?Hlv9&iP#cg{UHI2^36g`vY*@((Ont9)A8@>I}1sJY(Gc z?_!kT)R;ejkNoto``8b$iQj;c+fw!c2iMi3XL*Ek$zI{b$E3P%NTr?eN*NQPWYw#E z07)Dsdsv_Vr+y849r-sv=ZrUi_D(<{jJ>Bpf48LrB;Q^-%u31cI7?Elx}ar>`-8cj z%hwV34%VF6vUYb9-pJpvDKViHi-~L6zwWnFwiXRD{z1R>cK_$vNVv1%vpEpu*z^ff@_qMCEoNN4s<3JlBA>B= z4n_RKuaMFMcPL>7PEMk~9@Lb}yD$fx65kO_PP84yTM}dhyPD}m6Q+S@EYL9h>zb23 ze>kTTbO+L8u2S_FZ~8|_!pH!MpWi2g7%{2QqW-J2grJTET49ikh%$_$S`}Sm^`O(TnzJ9$D#r>I^Gn3;-H2)yYV44wfK#ud-``pNtXNfMyNn9z7 z=6~N}j_!SuUe^moGry64{3(D$FlTXKZsKsbVKJEm4ku`lmgz& z^HwKp_m8+aFJfa8W|p0fJ*F}H&V*%)3ooMK&mlpEhv9$nr|?=Gy_*H_XCB+#QUJfE zl9raGPwtmL)p*;F-xgd`0Ms~k;xKI6zS=D-qCz!_f8?c-!{b4)2E4onjks^6|A>T6 z2~RJf5B(tPG*R|AT*Mc(S8pGps^08==TQB`1r`nL!6ccJb&dDKgt^p(PBgRJH+ra3 zl}tf`7lMpo?r{y_`AmA~G$DSrAcoZ`#O>q2sXgeah?>Mq8`%eG#<5jyLk|2B(6tNw z`@lS-DVwZ2US(drN00dQwmQ2l*z6DIg5yrO%=Vz7>?O!d;o{m^3J*6TUn(OtW}4S? z9LJw16&7a@7+r%!0+h=|Qp=q9)T`&f@Nbnm$DB_mraYAl7*{$T{#?XoSShsfG4b;PN*yyPt25ekWK-jw^mLQLM3d&({|7m6KUv z1^?~T3G7~1MWiR^P9r{}Q8AHwU0pGs=W zWCa>Foy&a-h$HRu9rnH04GDzq6SG8Er2kQ-G%~h$SNEy`qkz^x6vpsh1o5-&hSe!* z{i&kn>!NiI4F4~ual(@8;xC{%o8r#yq||r=J3`UR(D+r^m0lAh_Ec@3?qszVsbxl# zI5lrQPWWXIW&tGnKQH~(SThDYY{@H5;pJD1HyxK_Tpu*BDiC`b3_PMS7W;j*q?KlW zmQ4SdOrUG=Z9f6XF9trL=INWeHo)MO0nz{v*sJc2E!q%bsw zYG5;Ve%I@q-DlXtLpps{L6ya2>4%j`)K#7=I?hs|X2s47sW5unsE(Y}zB3d99EFZ= zVwVE7h`SXSb0q1WuiGPf$F&}K{FV7&n_RhUwfmt*cnjwH z8B(s=i;7Wdo*W6A5kJP}uW=lO-5Va9_q31R8~ev3rPi{-unVl=rvnL@=3aFcwUI-r zr$SyrO)ZNtX8GoCL?dLU(R2@0vYhq@swQGbK|bOx<@xy)+d>_5MqA8Q z;heY-Lfw!rbQZWeC?&qubC`5cx&&IyvF=_Viwv8dyBvdJgM-fK9>8769`67=AF$cJ z8_4XhROzz|cHY>c0D#m(y-l0Ujyl&C&LAx&LesKE11&CI2iE+MGWEIc#^k#wGO3!A zp1SNi7n`#$x^ULH*~;SA+N;@UU($-1=s*9DktSxAFjh=h#1-6TXj#?aF_F24V zN?vV~$IdnM|JlHncm9 zlZDBTV^(vm7@%gC#Cf&0-7sCfotgGQDuse;qv$^^7Ly3;VhMA%aFvSueqh?U z;%G`r2!+^s{$TE>uF=?(^NIcu=LL48f4Cg~RAN~u$u1q=^D+U8pbb!J96KYc>@kr( zn*mv0{aC0cZvfW>HC2pD#MkTd8FpWW$i2|J$9^7bw8WD$rCUBE5DM(AT$IzE9+{tM zJUH&J(8<_hi79jB!yfK0@w~`e$yBC8Q}0r9a}Uf@rG7p=_#NzeyA^EnWu?Opa3Cgj zy602_6tSy3B*E0>YYvl(nL@o^-|jeGeJlU`yas9^bn#zNg3mxl@5tj_KIM?IW>myv zgxk8)Q{(;5X?DcboK@ep#~uo&%ii7L;ZB-R2xk?7l)rtE50HE>wFaj!KuU1Ue zn|m44Qc%jU+1gnC0Qahs+1vZ8!)HZbvWnhMBS2DBVb*S`XJu>$1|ez|sOhn4VAs}S zNeW+I5kSIEvVk1Zk@X|&lHR`g(_QT-K$PZ2oKjcI|N94TB{i&q8iF^@&+GaGTrZJQ zy{N*LL7Zv9C2Ou%{bu5SaywRpMJFc011^LGjqCr=IxZ&%0g7N(TUHJO9e}A>WE=&k>uqd$+0~ zuv(R?S3M35=-8o###nJtpN=3v!25|QxwdS|XI*`~>SU282B;Ee=2&kCQ{$&T-0*i= zYHMnTSI#ZEE}ZtK^JvDL$)4dQ`HxHq#l~m%NLQvPT=vGXGg8A1Z&vl^>oy$Y)5QXA z{|JO1hz^XrH#=M7s{pCgTkk9h2h}(Xd&g&p+ZF`~C6(vv%3pPOOP#6*4a9B~lB<4G z3fM?+_NyVy(|bvLpZ;d$TU@h+PWTc(8xc&x3W5;E$WIN+mHjt4$xuvPi0tblk{}}A zav9otJ!@vU6O<9v1)2~P!m`M?K9;|d&qv+=CK+O1f&UL!b}U}Qme2Ppp-rf)S_wYH z$Yf)l{Q`Zh3{z!8>%5cmHmh#sFZor`N26mX#$nOYzY+s>sG9GPWtoH>3qV$7m9F+G zixX7MW)|9J7dq+rB=Ikb`rFIOCh>Of8<#65&)NRTN!z8hhw6%5z?(SHg4TZyz%Av* zw?|x7g2shh3||zVH$ovYUlr`k(;nF>q{AZ5*LK$NQo1oYE7|WKGY2-@DTy3Jo8@1` z=WOj~;{Ub}e=lIdeaJl^tI0}wK(EzQ)AJJ_TZO+Mn;6~;e7E;oed%ayrI%9BU zE)scm7N|*TNLJK{!s)+eYrB6PI)1N^DKK?s`HM^PI4O9YYc@Kn=2)XXt2H4!9!G|@ zgx*mx#>Kw&H|8yE{u0bfPM|FJh-TP#ED&6 zLI+|u0XgVxu*@wYTRPUI3_6(>ryk>I)5*E^b_ixPkM*I~ZKKP+?Oa7xA1*?8vHGff zAT>FxsyjWm<#nZ}i(&2l$72+ar@r0sw%wU;iJreeKaZ2|@>4ClGrX;Y#ODF;@ z58n2i-wIm@`m;v6liZle$6I^1y808dDz$#%BEm6cDqgt+9+Wd72X?r4R2e;Jx}=y} zK(i+rl`Jc_KZxSy)(C}0B5A2yM~`;$(hgS5Sz2h#gh;$wZ+{FnrCf25^;QCMDkXx< zqg)S!yoe!@c5_u8OCNU+JvWYafHDCie7=7nKeL6#S4Bc8g^iVdk6eq%A)ow&)(l*K z=crf(A*$(K&@0{ZCL#c-xXjE6_d$>)p^1gA)^TneCDxN0_^!z{^enb*fc$mmNkthH z{9P2Bs5D`o>Db(QjC@Ww6(%$@R`6E2^821z1{mP3h)s;664zi8lxG#H+g$a2u}mHL z{T1VVkwJn~6^An4LMbt06rTc+nk_-q7rzT!v`2}uEW6CMYY*&9y?CPbtZ~3J`o_4q zS_le#Hip=&50Tof4J-P&%q7c5uA;P~&C0BNNh6HwLjE!Jm7wKZjDqa8R9|hCR8+;- z!U6SV0Iv5dCAkj$_WESSOpQx-tGhDUL$CznLaEsOQ#PRB%XhXcM+jnn&Z)H(-ZXpG zRF8(RF1Ks|eA?jw*=G%3<5VnB9d&o8vVo;Ot~Eu85FzEqJQCFVq^SlM*Cm$KU-=y# zGH)CsTF8+MYj1WuDZOAin7j@YZ_XMU0NFZx%KP;?09^)09{1R+>eQqUgUv3-Zqcbt zu1_wQ&STDd9$b(?yLg^OAslcF)LeMdvLK1K)F zHE6f@l53l-NvaQc{+02H$N?PKlqk|O3-^{#qlMXt(#a&QqkFDg8>bUP3f@1C#dq^s zdAA1Ex75CeWXLsF7djCYsCbm zZH=2}aVlVFU^kL=_sXH*VK@Gg<3L-4H5>2&GQb?lvdu;0Rh3!(#`iEFda2hjK1+#} z`F2mdQ)VL2KYM-C8q}@@{*(-g;eD8yW4l{P>AThOWUgnTUrzd=EpVBtdhGs&mvq}u zD^+fwTbUDl8U^$TM-mDUhnc+Ouq zZ!K3IRh{uI)EUU4l`>@0xZ+vc4AU2u)Y$Y0b%)+ zS7H$6(5IvsUi6W;%r}gWamtE3aehuFVcNe>zNo(DBjin~Sj3y|(NzE-hnYI1wrPArMW?`1; z^Gk%-tchQB#LwuZ-MpF*CwLVhm@f*Vjr~yQ-_MY-g(Mj`d;6=f@HnWI0;FKZbEeK# zUI&Gma>Rt>H72%G1ZPH;?D5DcypdU4&B@&(t|{dJdw3seaPo25o7LJTeLB|hI9Q4w zwZrLVV-fPEd&q7eOSe2~zhkqrm#`{F&An5}Q4K19cj%B_KXdL1G~L9;a-bcvjP{*l zb<2u9X+u2EO!F+kfIBDZjdCquV!LtvSB?)EWae7q*L}D9BRK3`rDZfnJKwh4$#W;t zpjkZ37{q)X=WYw>-T~dX=yuy$cKDy$hvy#f$S-Cd2Y#2+Li5gIA%d%fIrQ;U!{xOS zEye@Mx=$R?XSr)aF1}3Y32Oiho>D9+4XjB?IW`%Y$SbLu1cUa^-*Y*RgM;acl+*lMsf#G&wS`b5}c7Wyr+ zKt~dD$4(NI}&Imf2j_4yQ{8OyNB7&aoITUL_D(GT-Y<9>2d7uNt_j6;qq zFh`U9f&Q04HkbFh8_|3;x>s^#+&+AA?XR{w!(m1H)9Cj;^rf(F8{j`b$rCTQZAv(c z)${85K&fg<=}yy4X%P(SpM^u=F@uA@bS2@oqICpUyeox7oAF2=1Tyl6r@jyDdaG_fAsMfqPMBOc_UXn zQgq;(?pUZo&D?SFWQdf!{akKrM`*~%b68X=dKsbT>LF8_a7O0YNV?@wG9(AQCMMV- z5fSItK)K9SbY^vv8K!*EX*l+jjk|%Mfc}7ixE@n{2lFjgr_Mj#y-I?~k3Crw4a2R! zCBJF}?In(f^| zU-5xGed67!H~us()aJ>(X?RB6O>9N-{FqxCPnXIX!fxs7Z2~mTp{X>~exyqp0|3^|PYNQ!1HT*y0BI$<@U^m3; zOq_j2yE9}`Bn@epn|do54pzDI&a+yM`Q#fr?TN`j?5EmywkQ8*3#m08kYG=$&Lvo6jlFwSG_L3G0OUq-&|Djkk{OZwOnQ<7sVx zf@)HoG83@Sw&m@(&s735)I4po2sR_;OH+Zy$8cW2i_KFUpgKy|c$dW^-#X87qR2+V z{Yv}&`PBE+tUQ#ng7{hM?=lbLq@VOo%@t4lL1{}~bN=8;jOIPD`$+giR}1H=RF{s2 zG%mRoq68Zdrxci@Gc#+TMY(MEnP->*wUz6|I+~hlyN9<^j+k6`$nd7|=d#^)B+1C` z+CwBeI9fCu-ze%Id;ok&92pvsVQCcN=p`RMzfU zZAGG$_%;`w#H#<$nBSd}us`@<%T(U-iaRSg#l`3wW=G_#Kip{3RP+|?AGWoL5;k zHRFoWHX)d-9iHeQU+u=;l-gt2t*zauA+(7UU(L8acEJAuyq(IJsW^7QV$?Qzv_^dJ+^T51FWku`_zjg_R9HKnOT@ZwKL@^-5I zt*Oi}O$Wm_>p8Vtyt`wvof?C;e2zX6h z?)D9{h8$gW;Ek))+g2@wuLX(x!R3}5h&lvIaXdcSj3=&hP93hezWzI_BuKCR*y1rM zxhW;T^-u3t?qW~kqslkkkGhW`d#9kALLm-EK?A-(8#I!I{mt{zhSvh6czb(NSeZ=00(;bq&1;DY% z@M`(|C*Ev1baM}Sy^)UM7c4v7RNq#K`q1EBlV)^U;AL#E^Psx=vg-n}trW(6ca8oL zL|$Ii-IF*)(cV4TH^N=Q2{7YEr+zoV7g}urlk&)MGV|_KRhZ=aa>$bq=ZU@PA=wMB zdbkUBpgzUAeqn?_Gikmx_^?v;t;cT)r~jvFwFQzsFf~eL#2aD9o&vS*eA?5!cB{sG zQYo-kYO=U#axI9MD=XCk^2@>^lC)H;z8Ld{aov837<8GZBEJlBo$z7F<+>` z0NtrV*CS)EpbT9}=}Y|yYYTf&cT${fTi z%`Mwbs1W`tSR~p;Bz7Mn)uj}kdc8;^)V=iNvoz5jUUqzmMo}c&wWi|N5o+ z8}6HrlI|ytI{tWeSDj{uWvJV8?$mhmj0Sg3+$j%(&25@nk~9kqq~+J~wLw<_>vg45 z3pO^hss3_@2mfTlN7wEfkxV)*DxKs)zW^BzPqeg^Cyh!sehUgAfIAxxSB+Xf1Q-*3 zJWHTfFkGw$x6;8K2$lgyv@kz&V(QZKPVoOO>N0+HUhRI+?P*h7BA8d3H|fAB3)dZb zz!{Z0@mcmt9QT0#8IMSQDio|wcRFH@)|WHTGpBF-54RupMr&K5ZzJg2JUeyt$NaQO zt8!Mqo3x>0mL=y5Cp<1T@S}&(i;@h()Bi_e;*%&OZdVQW!#-HXFN~CysJzNNAXo8u zp+gx;Tk9mY z8{)Dgb>JmnC}rFA-CL?zn(=^*!|riN50x2#e5@+Eoe5z=Nw4Q(!dqSB_W8z+aOx7 z-M%CiAt+~sy6%Vj(PcJGEw{E)i9YU*NFW$xh`oPDCfz*yEqk#d6W$-JI^lnq1XeeH zgWH^nT{N+gmv|cjjOdew|Gog;p+zUR?io2>!CxzT?8;OwlvtNFxU2Q63-GdTRTKOr z+(rK4`k+9{rc7{1Y@s7xz;;!~w|)}{7m6&+)c_lZUwxuAfnWzgE_HAFB?Ufeg~c9A z(P@&NxS_QlFHC-P`_YVhgw0ZJRgf5UYnL%h6851SDz^5<`+W>FxnsueLe!?~10ozw z)d5q)`)U>3Z(6cPX?2;vd$BG!fGAiMuTU+xZyGAS@Pr>kSF)SPt!3hS z>hL`e^EF_8jkq4M5GeBgbnhoc{Ym#?^V;4;pKtA=CB)(NS+)baK$oZjFH;=jDIW<~ zTicrvH3|(%)ryw(6s@v|)UTXfWTL4(9s$yUuv8nQV-gmHH;KEd_ZOLEtHQ;VK727b>ZoRqMbS@mM zG*{qo?SWYgH@Zd>|2HP+xy56zgoWq7aLEA-ny=@vJ;!M7Aq6N~U(`@o?5WZ7Dl=tw z$D0yj2U!X``3P&5v^&yiLZS#8?F*76BHJRP#VZQoArghDvrI;eO0oRL&Dpm$9hE5ml@n7@|46c)b!a_M@qaB9 z%u;*T$Avc)s4MA~(e{2~wb#VyE#y{ZR-ehZ61n!&OwYG2MYtubDLkVAi*6Q6=vCiw z900A;s_ot6jgRG{UMX!hk{T!ldIcufSoy^x7kNbcw*>|AXHAU@4L{8jZijd^xZAv` zmurpPbDm7pr;amt%qZKFUH~J*06cT<18Y~&FJ*6qynH%+#r@SHRsW)e>#}?~?%18B zc+GFwklduoGVawp0Uypj$|%V_52<)VFMaY8Riu7d4LFy$L#E0Eenk;YhvPpRRsL`(a zE>UeniEsN5eKTBhveC1{eb1h79g`|O6LIH)li035*H6VOYAv$)>E`=m5V@Nnr-d!@ z@d8uaT)T-9^qI-1hMw#&;O3`@o#ct`@!+P6sKJn4lbr&gW}Sw2Qt zxBuLJr+HvdV^B$#GgWMHsXO`Y9+4>3zgBM~zKs;S6DngC<4YA^?W{U3kV`q;G zjhmouPKOxtQF24<%YM-Yuv!V+=LXX9OH=huVK4H<(0K@&`-sk)C^Z)gjnA#@Qbeyr z3d#)`KhE}A*7Fq~iib#NZ&!?L(@RxT{_}-uBP>>&L#QVnyL`H6c{f9ZCDZC_M?EL&wXxw8c+5P#vh?3!ryz&2fo@>@8pisFjoMb34V(`>qF%7I4X&p zh5L8!*nPq>36(d840=C^)in#hvcwkoMQT(**XhTyEgQ+_k<0&Y5;e!2&BKHCbFGJV zZnWH^rP;pgz(&!&Wx=)Y1RT4oq#1L!8?j+ zL++-ceeJ>OjjOm@qyE{!3);&ICAQkO4?j>Dn!P1D&2#&&8c;8t)jVt2hjwR@C)0R2 z6dtj&V0`{bE3KBv?G2@9L4xtYpIudDzC^v6RKRI>kmtgzDnM$xOiqRM%tP8migB#e z0rsH&Y4h5vjQKy8EA!=f{r8~0$Kp~853vMOkQ?=#Nr>*pmWp-Q{_UO60SgbZxK+JKYvnC`&O8T?u!+HoEHcpNI0rScH zBB{6r`sE%pG@T-Lk<6vgzr2{k$EtHNGaG+e4jRiPNjXCILy^^Dwufpr2=^}5RJJQy zTjZXRts-e&HS`2s9=afjNKNXY>v{D}2dqZ2=f;Cp7c4Le1oyPg%6la%F=pQYtaEB7 z9U&%(p(VE{v!BPkMzBD)a0=p9^CaCpKhe zkmfV~KaH)xFEoO=+*yJD4}1Fi5ilTfW}G5~3`6RM7qo9Lz+yJ9v>-91Umtj#X?AJ~ zsVl0U`?MzD`E!edK1jcQ3wS9e;&E1!-65}VyVYz$A#Bq6=~(@i+-J5h@l;zZqIVba z>+yyA%cU{l#a7QRGzP5^AuVoI#8=)T{x=7f7|Pci30vJGA9Vdoi{Q|w{&L1<>p&8F zOdpX@Fg2zQZT*7kkj(OSKV*UPm-$zyLj1}8OTUHSz@}JZg!fEkK9I#{Q{}sx67yEi zLd=RTGxoN-7$n4CK3voJ(~$HD#8qrO`$wR5#Kx`#%hz;f*Ru;nc=g9>7KT#bQ{6#; zovo$AjeeVS;41RP+o2C7y6Zs}|F**?bRH>u;qsQ0vQwksKD}j7YUA^rl2W@M2+0XN zOSA^_zr?Bg=5yxp*TmKRq*!-J%5C6*a$)B9gS{l+D_QvIJR^CT5k2Mo&$d~eNPqHb z)8NUFL;8V5Y59RiZ4M>h4S}`F9JWycvfxuO5r*?P)_=d3b_K*xGLj)sD&*gk^|kv@#PYF`FVb|HY~n ze?2+hw*r3$Cwsk25ST?(@)&PbycUR9pI8Mof_%pibW?=js74Rw z`y-cK(ukjCq-Pe%kC@CyXWU;Y373Bz{iV|Ej8Se_Pp)gGH&OQC1J8Of*NpEUIGXW9 zHSvwS$adc3rubT<3%8+`ggA3W<#g^R5sblgvx`6zzPE+(nI-VgrZu#OqahvE|9|Tj zHO$R9DOlgPC}7bleo?%2hy}SnQ&49A;iO>Om_=P0w9T|W&1pNo??SniDM)^X^JoMO zz@xyqIK;~fhAI7inN*P5c&6x-ZBtwq2&v&%f774OB262xudnakxUDOHza{=?pIdqj z-48!vWx`y_mxQ|hbDdO+QSBd0H`0if2;K43w`%a79>W33uj%tI;pwkYYX<#%!mnA} zocF`pFvww=)Yt2@vSRh!W%#7_sWF9&)31TrZ#wzdbGu`9tRwW&d$! zo1X~zwkM#2vLR;YrUls@AXuv?0+iBhjRdCIGyofUA2-6o^KD+WD1q$QTbaPJMr@GZ z=bIRYd@C|4M6#9XYK+Q%@`%D7il9SxQj^v@p4-i|{PB#v9Y3TgSk@HMv?yu|9$pp8 z%{aia28sOb=8eGvK~HW=^*#12vaS`R-IA_$nWu>xB=^)*Q#YaP63BK`2<4qY-r!#; zTr4mja$0f;|1A(CNbxg*O^#G*@s8D&Ro|DzFfAH-Z*O&gs8iD)1$?2jfvZTxZ|C3T zz2HWVI&|p72VR-hEl5(9EaV)X*{U{KIUe-}eSS$Sza&ZCi~j?;3cb z$ZgOkcVt*N)pGxL9(k~232sSC~T zm*@Ba*d+^UHt40b{Dd%F$krU|APNlUT|+D=@MD^u>dyDG%JP7J;^u*FNve3fj_^-o zoodsCI?sgzGuQ1$4KsXr$La@}nptXDzXrG{y?X$_;4063a^kDuFRDWMZQ=lfbGbfd zBVbP8bR^W9!J=tHUr2ciPkLF(Y2lm5z55EYwn2P!{<`_lQE+ug<|dNG0NNYt#kA@x zNJ74}z0sn44GVy&@Z5yv_dxkJt538+Z@xdF$>d2*QKqNk2jSUvwk-i)nuG0SnP3e# z8X=ZkT#!n#@fEjJH+eiPBZKOVTerQ+ARQpSQuaUPPPIeiTF04Q@M(5~&Z4p#ZjLBxNj@0Q1gSt>x`fL4VjWkqf?cbGdSAHOlFZrbCGE$2W_vS?{ta}oJho!}lE za1r%DMU3Q2EqC}5+c`cI>d>2>o8RF6%5Nac&EIRxlBsToj%Ud6hmwR!3`U2g#R{n{zE5=N7E;qc{+L9zeG5~(cDt2jKF&A*ZQEo}Q zW|P_e>^)1l*e|r+-sEM^sIgbDC_dO1Y~oS;S#N#*K{1_&;gdWpyAH%`gSY46FG6tUo4`k03`cRj&IgJh`z&Zi#U* zyy+jl1X`4@$X`M67B2FNZsU^%Ub+-GDBg2hlt0rDB&HI0W(?7GhRgqR$In)v*8KpE z-u%r*1M7>Sj?BRCVQ2S=Q?*)wu#QD(&~4bso#yXB*-!+KqWxS07OpU{a+1w;Kq+tP zd7LS88?pS8{$_8bOYc{Ac}ib~ka_VvGkB@a4aL}(?HwbweQzCjt^B_8H=q{T(-=T6 zQungFi<%6`XiSMFC_aG4xs=P_ORLtJrWczPl|S$r2HB>UrSiLOZ6JYHwmgZH#$EdH z@|nhjyekdMj8v;Ko8)~NJ*H!<%sY*ZzQ7-dBN|3QeSHTG*ovb!D<`JiKsj|eqigD8 zG&m<7_O>1ADn_el&RpFkXb(pBE5S8l*WQ9k8VmF~wlo^FHpXK|^^^EIk0Pw9k7$9uX$DDIH z6Yjs_Q1_3tQLEH(eW2_)-`|e%egYXEFnz7E?0u&xs!&{^<-@ND;h2X(j3z#ZLaq;P z%s@YEYp`zJ%pFN{OO`9Mqytlzrw}IJ-K1Qmgrw_v{5nbAs*wLr@cf(6V2_iPGmhZi zeSGqh>h7BQx;(7wiT3o^Ya#nG`c`nC0<2+TT{p$Baa@wb`T;_K?S1Ag4KB`BOjJxO z)`rW`F2lVWQK;^dH^t{lQbXw@Kg$3{rF{Cm@X|y-_Q36slij?`qg9|&l^is~TmX4k9bJ++bz4=aS zRt*%ixG_l??}VO~uI7H7&F`f=(lNJCrv3X{UUV2C&7C?z*!Ic8$(RR^_ z_Z<|`K>{@yo>Rxnev*p;+!ubv?147}#b(>xKrb|2`35Xi3d^(`1ga=c_M`Yx4||lP zl)mHv0K9DY%%`ja=Mdh9&zqe0i8m;HrJ_?~@#u3OV4(kYam&O9e3a-zocBd%N>5P6 zmu5cgCW)?Hc9iVfn^q&9ecw%pXLDY1L@8U(!B6+1a)Zbj3xHk)GV-m#udWg#U}G+< ziqzgn0;<{z*#mN`#S&biueZ|RB2o;FA1Wj-@_t!&uYMUh;2TZR9EJ?ASTr6X<(BIn z`I6rto_By^ap6oe>lET<$WE)8k)!`ZMRp)-ic>(e;};a>CyYrcR^8>jQFI|A7Uj~{ z2Fw4fLPvyG2BW`7x<%~l7DK`0&(zESao_Fi2Z7=lzn%h^1!+nQyJjDpHFofKSGd^Q z_DE*)YZj*;I!`)wY}qsh+X6iR~Z>p_C2}PL$>1+aFuYSVS%gCYN_qRnmD( zKIvzr8uVtG)74b_^QBq~IdrE&Ss{z+t4Xr;0=B1)AiURqn#M~x% zPG>9<3LY4k`8O^S_T>Ow;MU<6fek4g2L3FntQo1jl zl2HlE;fa85n&P-UMOFfQ=(Z44g05==&auoO%Y5p8vAN$>34v&gWeh|4^H0H2$(e3s z(#8T3fT@jS>iONTxqV5p$KADIA@F{DWHwe97Aa=NwmMH%BKUWUDAWoVzr@Hw0)lwu z9fjaZN;wDjh{XOEv0pgb@|@r}Untn&?1OE>r*}tnao#Wp8?3w4(wek)r_}R!+V#Qk zY|qwU$)Cx9a4gGKKeKLB%Ynf52`hcL(XHaR(OloOjyg-ZkVRR}O#30)lHsee$aT2r z3}GI*tlu_l!He5{|C zX%)hnJHC^08&@8}AJMmvubV-A3T!<8p}346It;Vj?52x$-oUbWhzdOpf9YCyb7!U0 zxTBYk_cV?nS}A&xMT57Bop=!BdYfC$i_c`rtQvd&qK7{*C;ARpdop6Ok=Eha_>SR2 zho*1RtA}>jD&UXBeU{;F7|vkxg|A4nL_#0atGSMY6c!;L6JGq7O>1&*<0h15=?r@G zgG=^#Gv-6^N%O^qyNB#f|L(-YJbuf3c&PMBG-Ky~IHcY|nA#`E=FcJ|OTKr0J4a!@=2)IR zN|@$uzaOfgKA1C`)l{F7Aw{Qf@T%oz`i~*!Y)4x8sp;y~QXPy(#8A!>OjPiX&f+L6tWB2Gtg`mgjAIbe> zZ>m5O&DYOE?7oGt?#mT#WEuFa)chq0?tR*T;UN~UlhT?}P9qp_wXhrDhk?dYTs+^E zIs-inujl{GhC;ykK^ATeryrw{>-3LXr?tGFgcL6*q)J%UVU9Nv(lMbj^WCf8NX=b4 zljb8gDnOd83_+bcLmp>XM%!c@vs}teKf-m=EM%d_<8^JOB zs>9kDbyvs=tQ_7b5ltbb20-l!IxR;0R_21EhuE1FxzZ`>o$st3c{dkyJP9v=nO=o# zZ*-iw?oAk|V$}Wn_#B>O-T7Q5+p<`{pz!aZIK@oPL^fS-W+`{ui`bpO%t=k`WH@a- zecSZmC}cXNH+z)lj`9Db>v>I$eF9#M!ewM;t>i|2PDz|7rsq;KsY?0t<@XF#Y3L?6;@>7f!EHX1C8gLE#fR7Ck(#mF(qFR{#Q~ z#g#fao8PE$wBYZs2G>8(8i>54dg)EasA=6X^Gmg71HRDuk{XRaNdNAK8{f`RYbNqL zg1p3Vdz+U)T!ys_jJ$*d&o4U76#)2k9gb2h5Kai+L!GW23VMUhk#h%d0c%;asC0*C z)AKAooDl|i$9wDhXf)fDey!EK5>{? zLmC`|Jlk%J=gue~#-mW&alAG)iQgtUPkEIG#Dp%USb^~>&yMC;+;SPxu5!l>g$R`z z-ed#iHMQKRb?e@~()bV{3;K*oz1MJxD0X|ZNyk|8evbF>ofW=TUlLyTB%~$bvh7yj zZ-$ib4orkE6Zxl0*LJ)LttU<5Y#o}+bzJFp+d6n$qbi|z(gV*x8;aZ>w7+Mf?7mp> za`9I*!QagKk7fCQfvDN=%Ba0!vX6zFROgDqyijsqTi`P&@$;MT-+_-bn)L( z?y8QAXnQ);Ml;tl;T`erNmI$9zt*7SK}Ka)Gm0DeD3iB_8#$B%PR0VU08US)`mFl$ zuO06?oA|9(ZEugI?hB#J#dE!&JW|2kygXAABPXXX$=OeK4rR}R8PIcn_bJTfs*)`A z9db`B>sTuTYjLQv=Bbd49g|2=bTsn~E(?k>2&y4Ga*d5-{_A;b%V%OmNx*kYDPzmy$=(?n z26vGYxrO4%iTw&6Mo#93gdlJBkI2~C1aSt07!%BWK;dxj(LoIUUXqCUF`3?OQ*6-9 z`6W@QQ)!=}G$x4W3a-*0LU3HaU08%0(I~GjYORw0$>0aQmn_`fOKwmj(>eU9zKjDW z-=h}`L)RDTu>)0n#M6tG-<2TYU@7uuAXeOv6(&zr*mub14>O0D9v>`91;b3k&mXJ1 z{LQbOA3*o9)ZUus+Os^&SrGRI@EP|g%5?|| z17osi(2b?4tj8(30&|KD9c9AM{=8ikOTixNp8d<7HTgf|Lzsh>C-FbKf`%2`zL#76 zFr`tv|K;y#aMKwFV&Q6I+bKPmigMU8FB@t=X>I*69d<2{(hBaOh&JvUMk#43Z&zAl zN&fF?{0xb?S!s2lA4s3OP%^V<)O;fcfCIT7qooxF#a=Idzb)apGqHvZepBvs zJ~i)l+8(qSP4{UzFRKVhqQiY;AsV0hwuhDG+z4K+}%5DVs=y@iOMg_SCJ* zi%~4e{+B%&?~y}O6p4|_u1p64DJSO+`WG8ve1su2EtfdIM|-wh;tDRx5QVcUF-2a( zJ-BDA{gEuDyL|v@q;9SnjFaE^r`fvlppWf~JkI%7skxLv)z?tAm&hzhpj|onxCdjs zzj~8QAuM(mC0UZ;UBZO8$yrCV*9;HANw<_mNi^WkdF{PO>Nr57Rc53{cjeFFfH$S= z41#I1bG`U2UDwr8o2n$BR&Rd0&SUU1H~l!|P+E`*eo_7gE_3HOnDp>3{suE|l3@TW zv%G!ww`tbJ6_%R!qxUB?#Pu>b>6lSNF3fV;e6j|9D#uIC7w_QmmtUOSIpuZlzts_z z$8J`{;uYkd)}Z{BtY8v(RT0%LiZ@Q@JapL-0RmH}JWUYtJTqTBD31%kA5z1?deLV8U7>-sD< zFmv%*UuEY#(kUM_JUig1z*_ltrI&VlQ7(c<((GDRG&=+t`M%8RkdS6$@3W<3b?ZF-_6 zJWBbx``x+3^nTko^=h?V*Z9zdXvC;vVPesv=4?SX&bcWJC=}LY+@fk#KhX2P(h(%? zREuaLR;5x0hy)(gWN_L}vEqXrcuPF0P6~bi{FR>b;dZ`8Y#o0QnV zt89_--ZL7O&{L@5V}z7rmd{zNw_|c;{+^zs&eVUZ4{|AcQSY#3#36|B8o|ebS#WB3 z#~hpcjla-OBVQ8t=@u{_TVShAQo@J(YY{=u9Ul7aA5Kmes?-z$NXE%F3X`e^1PiRV0RE6%bj*pfSkUN&HSJBNne`JuMINAH`k0T35 zxgx~!rZ7?4j;^5V0jS4x6CNjW64~yraEd+ut)sZYj!~H$d{s|__EvUMp5^Gc&=vPB zobnn?mEl7#T_csXd)$qCxc~R@3M47*Lkrn{;j!(PuCx(b|BumsN!x#$S4NJRzjyoc>mrQH{gyb+zUS?N*lA0cWbX?S%K4`k#@!{-qt5y?{2d0syejNA z&TeN=qizt?N|mOlU`bia_YzP-ZRE05gneVvuHhc3g>P+ zfUvLXFrYr)G!;9kY=j(cg_P+j79^f=$i%JRpqJpewVAp zepKdvvCuYNpS*ZHYJc5ZC8#WJjMdMtqU&L2NHCl6Q>C$eE}5UebtQ0;rT__R8_r2} zW1m^*sND)lROa{BpP@Fm6Xn}Qsr}pIle|2(-;X#>ey(rYD5v{2`TTMFh4GGTn;L3Z zf%`*nT;^5@%_(U=^YdrRP1yqBNm6*9z@o;tP`B!~2WxpZ{UePO{N#|7D*YQXAOdYw z$YGr|gCmr9Su!j+YOwBFsg?SAuK(~5z9Fn7Jh^1~CkH_zCU>Ko_y=#@;&@oIGm-A@r;I%KB`F;<0x!K?64!jrz7=Z34v=QuNC2CB z^WZ9R`x<806p(7o%+2>D6W*Vvp4^m;_Q^!nNgJvn<31jpKjdzGxdmbqUMj$H8kB$< zO?Fa9132z0@V`S}sN-`_`EEF`UprDT`m9>+?q1JQmHc+0t!J5481x?;H3i`SlW<85 zC*Ly}fRLX@2p1tvPr! zimhbOq^|MsTHe)rrcLtulghjS|H$7s*OS)HS-iSeVhp6~kTX-yC=n=}YhC{M(c}#U zV>8KcW^vAvRXrxtwMkHD9;(f+rXf^z*@3U>`G$iHm=yOlYl4Vbw+pRQlmFc-(#>~0 z;=pu+@G<}xdRe!3(iMg~T|cAV1*;EnlS&%Ue|=7y2>Uy;VZG)4^NzyQBLTp684_GT z=eg);l{(*{qsGg#bPbPhMe3}#djtN!CNE{*yqz5 z%(GG&n`eyxCRS9#8S=*uWUoWf-KZ>R4Dx-RWAGkZ?Kw(t*lx2o^#hsb5KU;ABX#5I ze-vls$~NcBA0CF%zo)gk?cQwNI3#?J6i+8Pl6XR0Jj@C(dc8|Gc^GeZ>0JISWn&y4 z{Kj^_|E~4~Bv7|o%*h!^SzXfK1q;I52J4UNoc(Y5fPI{UE7a51;$&`ccc5pCFU_b; z`JMJYRTb#jVnDiByB<8)`bvpq0)F-ds$-Ev99%E8)ie(3G*F2!SxG; zHiA{!1@k6ue3`Ifz%nQUBb9k~A&_NI)R0G>4RtzCW#Cacs5B82n#GpMjALWSb*>fV$6ag2zxB9~{T zS@bM9Bfo6c8-N%`nw)PcW z7W+vFLqiYvV-jh5cvTKs@vC}LAE4^-vaugm_;UFLa^Q$W`Eha9gMz+XG;=}wlRA4A=* zwWhDqs?~S?FOVu$|H{dk)Dgx{NK5#Vy@+ak-{LP`pC4P^nAkrJFd$NO#&Out6@zF^ z_rP{hJMU?Egz~IOY3Vghc?Np7x-5K1;;lHBJC z0^_oftNBRShVwTogKbwgTJwuP82i)yN8WloAcr%t{pC2lr+gf{yhmOj6_p~+$Zw!d3jPrt z>kS{P=AhyZ6pM=CN?p%t1r2dENpBXeIeCTs=M?`dnRt88<#agnFGilO3|jv*UAKW+ zcdo|FU3bGx;3*@QK~$$E!g7gKd&);C&UV@@Ow=Bur3%SJ#eb9!mv4euOEZ0--FVul zU#!8W;uyKwrQ3s+35Qm@1s*^1hp%(De3YD41(pDj$3;;?F1KP^ov>Wx&1wKIGctG9 zL{^8FKw+zCElmFD&e_q<=t=c&OC{yUXFU0GCXu@?h(L zE&+W#;%#vyKm9M8DNUP;gZUQm z23&bo#0wLR=Q`R@gxK5Mey=UR!W%g3OfoStmPoP}jgA48#cCeNyht7UVf6Fck73wy zyM)r6lI`<wY?6!X*Z^a6*tY7k3?$U2g&jU0I;!;6MS}DsUj9v0M$AnV%H~$VJ)U$IT13@Y$Do-Z&hF znhka&MR7Qi-|~T{P1eR4GAnJod#{gx6#k`#-Er71uTW_L{<%!@w@ALq!-Y{jEQ-g| zu{`D1wPE&fVgg|<9yKUv8{+5B&BT*wPSvQ(C=7Ugj}N*?SQIN^b`}vo?lIYlQ_FOb zw~ILk*lW}!J&elX_mME~rv)wf5;^|v`cA_9;9w)AvnfXs+M99oNZao(Vyq|D(oELm z%!WH_)1u5U${S}}toraazpUbPUH&sWEvyy9*sAbTP{#v-%*{*EPv_{^lVp?XErc^HEmQ!#C+H77Jm(}>qw1VHD@cg3&pI$1ugS34r4E#U==CQuO-K%B< zh`h82Wp5*Ohk-n9n=M#<#>`m#Yxf|c2w&TIygSQnB+V^&{B4?LxumnkL3{ow#(M0% z>A81`96R z_dl&Znv~hVIm$d~_LygJuTNG`EwAi23tC+|<~Bc0SP%=%e1PS$m3xX|JR#vRU4nKo z##v^q%?RyH!SKSU78lY6eUOn0o9>zm$w6jDo%oCvNB2!Mjd4=}g%X)t6nWlVb zxcca=PRYl~WAfMVPfpzM!N-#aSHgFqCC<_nGXnf4xtaN7ga~nPnPi3go3z}&X8mVS zx}@nD_Du2>vH|Gs5iT3cHNJQ6h09Xk?O*lQ-}r5`>#Q}j+HtUj*|U{_i(Hg>#VjK* zw`wD>?Ln0}QPS`-Z=#3`swn-aS<)?sJ?>3ISDZD7#a; zV~O-V@5LOfQlIzh3cppdy6#40v;*R%KNpdffy26Kgg6WkY%*A2Sc-Mrgvk}WQ9Yyj z3+FZ5F=g+>MRlV*-nl4~ zQvXKa(ahdQwJZz~Z|{?K?kN)Zc{i*egs@SVYo+uvgPF(ujy*hfV!}E{o|;0;_y0L` z0(4DmSv4%1^FJts`0Tmq>S?v6Z^^sMCt@s}2ZlC8tbeY3$l~F+ol`|JHK}E zHv|1eDV7N02F|zZAk7b<>bxQlZb_;W{`}EcJnFG7jpWC!-hjiO`H(U0dD;EG^M7k! zyE+c8lpmb__B-t?C@st*JLx!WFw-kVU;M;kkFk`VWNsK+nK_ zS-zmU%!V2HBj(ypbycNZ7+8InOS)bmz(2w9k+Dl%RC}R7oUoSJ>QtO1p0VUI0Hc4R zG`cBpc9sVwCaipySULl#nk`rT4v8Q*5^$86lmrN)moF+uR8tm?FFEZScFWM z#J^PbMt7)B$(YIM!K#qf!N9}>eF!!rXf)SguN#^vJ3xK*8&$wtJoTY*P8KmVM&_Ct zx++cgqEDI^df?6uHsuqB<6kmK_o#MD#x@W0)N%s|X-hhN)9oaqN|EvCb9)xz+$YvJ z3E+{e6@YI}4tTBw-g<8l(?buf{tVMoGOaCbJnvZz#%_)|EjQMITrN!PGYO0L8&kYG zbehP)mag8Jm9iLb4FAfrsSkM@0RTuqp?K!NQ19eMHj}p$NgD7-ada`;XFaez_S|=) z1)YtL57})q8C4oe0tRl+H|X!9D}6rs5jA((M7 zcRX{$VA(XY_7=~ zd;ONih;4CP!@Lh;E*@!{GPj%J&lnVO(|s-;;8XCGNEwX|+=-^maTgkE?LM6xj{{7` z1D3L0Lw7SGb6YI}7W*)VN*KLOLmfmLdFuy;U!V)%IHYC?@xTP7OufLYOttwrJTD5H z$PUcGVsdFnzb!arHAsu+wVJg;20Yg^U5%Mp_xPr8`088I#|S&)pj2S~W&&GmOp*TM z^;4wa$*q}$xEIATv}u;HmvHVuExkX=;gyv9bGvhB1`^}rW#;5Y|K=JBlnZN zWenHW=d)OeDZaB5{Wb2No&DeVWxOAroE;h)f6NPtZ&qjBO=-Mb8U>c^Pp!;f2sszY zIl`HT7{^{!9lw^hxcXel;+T0bcRnXQfAsK_f|%)1hjNJg)Y#hB>F5Ty>kN?Q%h_2P zPV@6(VrKNo2_J;d-vfA%tD6T}OMmlv8ibhr?HIUj;x}B5);$m`(g^~Uw@&yi-Cf*l z85H~^s@NqAwdRuDGgIiCde7S^4tpjQ`SPN44NumPE9K=a5zS*le91XYZu-QBo`4tx zR#%A2wb6R#XrrdyjaHxg+?wBTep%S8+(kh=F5h}y^ z_(7RL_v7GCNQXsBY-v^g?}J7=kV;O2FjoT`&qbTFY6SzpxA!BLqB{&=TU zv~jx@=n^JMMyx`5JkNR_7Vq)~Y0Qv0flFsA!!CH!`|HlCbFcXimkM>r{MUvt@Bv_l zlV5Wa(`eKpSE>K!?+Y_F{MRs)@4Bu5$m`>gC!i<2N}A@oGB#RI@WX_;mu?DoNu-Z; z)ef5TYL253$^~$}mPn}nj9-lePqwManNn3k*7z2K9azegYQePh;=}3F=|tc2X*h6s zZalt-PGkAOW7h|3mB>))<6U3LBrAc{qq3gvn>UVMKR8jua`DfZQ+6Dm#Z(y#BW8OB zQ-1LTrMmv_d4JRJo04&@mQX7L&YZ=2J1-Q%e0{V)0Q?CNjkHXFvcW6Q%y9Cry?kS7 zJ5a4Y_P){pI|!eVV=JYFY_pv=KhZgSL?bo!2uC+4pM8s-iS1N{S>{^9%qBAl-Bp4@ zc&1HBtyzJTwM?BetGf5Db_~`_oxVyw=@FO)?U#WAj1&lQ!naR9MY$1FvbG-Lml*6~ zn)XVHwA@~7z!|IxuSvN=NG*$%`*rrpey6TH? zptou<8()@?_ovh{ulNb4AX4nB-47hj{sw>ZEpQ)m>0CT#rr=tp;whOu(pavA6RZzm zl`vFOdhhY;Bb~YO*%ygnER~~?ymCeQwVm3kKDrzYPtS#FkdgvCE*rZ)`E$AtH*>0! zCy!%4AG|RP>X~xCdXGO>xu^!I9n3H~pw#Scik1ARZM`(RB$y@3MUdw}>F#V8&7SRL zY8Ijw8bjXFW5NbI=W`@)Kwn27tERL1ECXb{yJ1->6ptwCL{j8_YEn*y_TVG;_>9*V zt$OKC;C>ti(ZrUBdeQCGc@t(W11SPa3~w6<%Js44-R^~bKYLR&_&h0GIE$H7bgyW%>YJBUbLYi&E%tGF2O;Q~iS%M(F9u_Nxo z9FW)kpV;8Y`w=5$U*uvAcdpn4+_Q6WUJ6n#e%chTFyPd&o&#%|jZ7}S;d0-NUmP6G znfKc!RWLhHst?k?v@>f`v8CbPT+wl zsW(`Zbj2rU&6I#~%aY~uvOVNTu7_(PFlYAUpykE9COsr>=eXzfH?*em%YvjJP{~c@ z?*}>AjVS;aKtrn6kA&Jfke2bb7ud`dp|Yb@{9&XP=SQkfh*NUoah;351ppwLN3%c= zelhAduUIdy7>tFC?aw?Hu_pDak-A|^Wp2mm&0Xuf%447EPNOu=tpn6Dm~xaz?gIm$ z7aK1#TbdV{U|UI3`_~P|VYEIUd3DX}9?dXFxd!{sXasI_@K=T+9ljqK){k`Zx5V-I zMOcsJ(*_jzFU<7|YDv-u!&I2;5_frX3LRFtB$m+Li!F@b^Yn)NPHjTZfz$3Ub&5l9 z?JuU;!4{{nN7>5ghoBSl$b^Om${7u46To(qfF0LydvN5xY;<6)XlLBhb4V_E|5Cn3 zRg^VvX6rLh%om~W!!Q44#DbhJu`EfDnmm6Z)!P~blmGmv9;I)Ju12Fi(Q}EqL!%<|jn)y5_jexlr@>;%-8#Cr4hFUAx;^$IvpTEbyS>uvUoCvM! zy?HZ|QD`lm@p_tWjST1AyKLXCGv(bH?9&u-cqy2O2tI0VGV4c`R$aV1_X|3-GiFdU&k*2#>d6dGiCs!JQtL~j)kx^Zs*&}a$ zX<$Z8R6{xcTsbxOt-&lsaWo5K4utTzH-e0uHca7T3e{Q*Z{OrRY(`9rb?9*OC`aH& z))8Y>GcRjdd2%@BeuC@c2cxIF_Qx%uV$|xNvnqB&_;*iT|KDOGcRXdab1q7s1voO* zVWkcdHv%U3GF?H)Ed+%07_=?%C#6WjDUe31CU$C1h2C5^&)PMFJebMcZz0F|T!TKr zm3sruLB=M?8+dYWuOblpWq=FgM&#J&*%Iw`%_0*$I^NKD^mFr=p(a^a9JF}=ID>Fl z31M;1`Ny^l-_tA+`;B@74`{S0^1z4he$_EIjh3%llLZ8jUF@Jzt~MhqKhO4gWK<`g ztQxohev$9`=J#bxoNr_nZwwLIfQC{kh&=*lYgK=rJWz1KehNiVk4w%;X5jBJ++?vUxHT`{(&B z>(+DEZj>)@N68>&s40L{y#I}7R^w#+Q9;Oxh#8q6maIk>?t(qM(Nk~Aw6qtkj?K%VHhJWID!Fw3*TFIAZ%s;>{=&@DhLc%7W zY{zH;tk-MU?SQf9snjCmzH#g>Z)vD3y93X#h81T;w9oyVuwlaXsWEUN0?DMC-U-_t zKWtU)_NJUP=p%)P9|gYlJK_G`!A#DA%5~y}KYd~~2>@tZz6;%|v2L^E>;c*IXQt=3 zQ7uwOtG9(E&!+HmF({h=!J-7XW>6a@pG84o%itQ{)$kpUdrj|*H_$r98Xo`#dp6;# z7&bTWXBQo?xFXU>HWwP$Uc8`q?EF**D*pqp>_TwaS;}45*6AM2Nb0;5RzGFw7xASQH4`Vv#eX7<-Ivj|ABlUK}Z)AhsKBy#~DamFsWtn*rcgfT1n zYF7r?x7$WOz63pZ#991lXN~m{yv?#EUI$nDwM2nO zZ{NY)Gk3A>dCA+&y_J+xp`se$xBJh)#{t=^q<%KLa94o`gvGB*_# zU*#xi_AtG87k7vE*JHm{i|D^j&De34Wp%tR^dPz8jI=7&+QLX&wcya6GkjgvzM z(1QNX`}gUU?#mT$d)#pHq%0m4+|{oE2PQ2d7g|p!0LpKwZha+qhrX7M*S>*Aq7m5U2i$4Xc_ zY*L4QVtGGcW!y+PC4+#lf-Yaq_M#|oHmy0UPejMH^~;tt7RurF#K>O3@-Gar zcR7s@>teH^Ksf+`d)^cLZA?rmihwAo;_roMG=D$Vkm?3vI^8TGn=3LS&BpHa1l)-^ zUt;A_U)3pl?5+9eR**Bp9 zMj4e&gsyFnb*5SQ=Tcdv$C|~?(!x{=Je0?-oq^dU&vu&*GDm~Y2u;ydJ4e02bgwL+ z)B`7^%XgQVSH#VsPEr9kz1mWKlcFHrL3O3F;cTZ*hzJye`_wUh+`Dojcg}9Hto(=F z{<%d=U^zJ8x$@5gqPk>c`3Jc2rj&aGC677%70|SFSZp=!kCFWh|=wf<(j1r z@~E5K!)(p%UB7%0C1@*=fJNxmIDp`C+g#|Fr~$*&+6AjO)KSpSCL3NPXsaYezd3YA zLb^3U412ogPCYgn`su$wo5nAj!|B}=hLlVI5JHQe8Yf8w2HszlYDOR_jeC*BrW`Hi z)we4LCm+}?-XWpcS@5*euX4g(U)%UD51w8)C!<;;o&}Z>Mo)Llt+uKQN=J_4c9#Lj z|Bv3*L}cNXNFX_PYDn_{^X`yWg zsl(aLb{p-UscqnBhPiOtW;`>rClis0>G~=VjuXY2&0MOEvI{Sy>ywRi@sGzo^NVzg zNlZK$y^6C-j@r>ZTq{Pzk%_z#H(*Y-}Y9XswgAGh3L8db2#@xhi< zli;A5;vdORObB_mFb9=*UTfw}r5I)J>vYEG+AY+Bljeh#uhL(Rq+^!dWo?g{BjSuV zJm9)ZGO6*)d{Ekid;Mldx0^J{Jf|weK$gxi;+OM+uw+F-XKPR_uQkOus(HyeepCL* z1<)3Cg-0YQyj0BPc-bt#NRJvY?oeUlz0jdyRwP>5N}w-un_rDRZLU;TgA);JCJQLOFtore(Wh_%@`Z*CQh0s>#$RLqjb~RuEA#f47brHy%byNsVhNPkyU!xU*iv%5MwpE z{WDLgJ6XHta**_&rGk0f&&-a&fm0kMOjk}{;0Mz?UjVgd5mo9es*$v4Wlzq!&HZC) z-X0Y=%({a0)-I3H49+c7vvUqhK}Ml{%FRpUPS*c4q)OUB?@&1E9F{`0K4nY}PW}-) z_yw(_ua8&Lh7dhIO%(4~KK}#beeB8=0-XR1P?^gedQm|X4(>gXQ>pMba$=dO%n}BB zxxIC_Q?J0^`OOQZL#q4^Zkw`8r_}nZ`7Z2-%63t-iUn>A@jwK(0k?9Gt2O+az|O z!z4XP{5&3SHqX7qgv&C_pibUqI#ivn+l z9w1|Kqv@RyYYLaSlFTJOfEQZbY|T)3nPn{VrJaWvT*5)jAF>HOyiJAsY$J>K6SHA1 z$*L$Q*d^{s2m#x>EV56#fBvi^OdA?-;WrkTaqBhr03x2dB79e0OvzPJNzKH=)cX-DTf zk$)P(CUq%X4{%ugdFr>_FQv?Z_M*G-GdY|4bixLp^}URuW|~uvO_|ypB6#y4$|9zA z%~XVl;58)P{`DdX5^(Y*2d?~lCmb+3unv#TAe}AYP-Up%YhZZh?#TQAKD6+R!_!t- zFNN?^j^_wE@XFJdW06nlpnb(P(M9dtyKAZ04|lKsuiv2eOyE-Fa7S@#Atass;-eV# zW-=;Hq;A#FlMP+4(0HEzx~F69+S?(PVSDkQXXlw0I+^H8OFvD-n&;?#DUfK1uV&S7 zsHrjqd;LnW9l;4pgPb_y_PYEzix{!j+(qa`tCp|FDc3K46@_9(Dl;Pof;-W!ZSt=L zv$-jOxMFObNU(U|%LC8r3hIk|brF*R&o#y9;DfWZVax+8SMkbgEoNoRU3ngs(sk>g zZ*Jp^s2y7z`XQ7eMP5ia{oeqZ5&cIu%}aGm}^4qfe1g8S2SVAjtZY2`dv zFoGj*-zM!uAOYKqOM$!gHk0Y#jc?S4^|?XFy#c|Gp)dHgs=`*50@bvw^hhlwUdy+6 z*(7<0fak;C^V2S`uDIP@1^5Pz*f=RV71s{vy=&M3aMg;)azhCC7iV*P2YShlgC!vLoC;`(hNZUrlI{PJ`E#4L{Nd1g!Ry#V`6!TMDHUG$@xX( z9-H&PnN8emvQUVunO_D{bdAs^jSYS_*nRqRMyYBAd@`}Ugy+h>dYFS*yOww>qcIir zb;7+FrvOXmc&*#H;~`zXOukSB&E7gSTM5u~Huyw_zFCl3dlihe@%syaKo=TRHyxzj zEZCfg(eSffY`f7*uW)ZfSQ*c)cb1WEK&N8L1BYf*OG&1IlSD^_z+AXqkZS32!|c>L2AdXqJFFe=G%X?-!vAjHQx;R zmWkZ@I)VknwY!s;5RQ-q)F--EO<%N33}=>+Uz&H8>2m6%W9w7pRhJ`Xp`O|TArSTM z>tfooeKr8a55V=k=9m9Dh<7lnVm<$=qSg2P@fPpGNPpjrj58r0MrNZOW?Wgy;GL=J zLnSxXwco?<>)m`t32S@mGh)X)RUv~GBJzP&M4n?*2vtP7|9jh8%BoE5`>IU&L(K|) zdfCyk`_wRb1Co584L`2slP)DZr*9z52x}p8lNszIzIEzx6sFD~nsD^XO~opelzEoy zXVfQ~$I2*Y!Wp=s1kP}Rp)d33cSd!GKf{gm0e3M_T z6hmE@wQd1>Hzgz(FelaUhp#`;e)T;HDY?ZXZyzfTv6S?5;9q~F*_d9L@0Up9=H(bA zsd}-ed19WYV5lW?1hV%@edF(kXqTF3uQS|7HP0>+%D8tpxD3vNpt4Tx>8{$?@uh zvOjL^&m?{5G<}@Qo8IxEIV_j)?ViE9cf#Ex83V>m*l}HVvXfx4j+Q3diP`C=Z<5tm zim30)hq_ysm;XVLs}zYvzTzgxrhcVjqdvgeMtqg)u%_XmK+e48y+Ub8FExrh{M3KL zv;w)VQwrCveOPRI!pA&HcpN)*8Vq<8=X;-?Yf%U{t)|juJ$=B`Km*$P2*Q;)Q zqI%iBJdZs8?J+~0pKS>&g?w8p*Uo3*6wfzf%cuSotX&uNKu7}Xud<1Vg8mVtRgVJJ z=aUY5jV)t9DPF0 zi3MPvdj@6#q=%_Kr>vQg-|<{qF9&|eoy7%iS>D?=&ug09ps%h-wBR^#6>EOh^bmBh z1Smi<7;V2ce@kdgNwyGSSs-PeNDzFlFkQ+CGT}jE|Ck?x>Uc8FJb`Se=>k2*TCA|2 zNj1eL3aRa;Zuhv~rgUnbe=F&x^S69?GjrKqXHCVk+uolV%)Fzl83wCHCye$~3$uQO zDIdsQEUDxA*?t*nt-R{)H0v~|4skoKo@TM->(Kdi@H+Gkacj>dv*(;y((75Bd9sFa z7`5Qp-S;}--s#B@aO2dw`obZ-lAqs*9Q#yg zd?>ncl6mXp^SqIN;!JZ0$x}mDj#8T4ON*zRh&)Jvg#WfdMYv=;?tl}Jqp(2$%-5UQ z4GgDtUAe6g!{M73CEMv2?V;;h3qK*jKo>xt$3kXnjUYXpxnu5Qb< zkCF0QWTzm03zw{biZzS^1IE=(?bhx|{P_x{)8mdH*n%@Z~};p0`&J`gG`EcCx9j)VBk)|L%=-L=;fW$#Db z;<+jciOcD^UwV0o2 zlKM*j8C`LZDFOrS*UH~+9GzJK69C)v{pc5B1yW79DXQ5%LhMZ;j`U zE3MfGe;E#iDRezTnVHT>Ch+4OZ+-}5Aal0KzVzR81FOP+2)co)DTh26fthBH$Qnfg zPPf%6*Y9ptXC?IC6b9+egb}{(OvN!(7CIy$&U&ELaB0NTz$LJID#~6p2^jt5wx6f} zi^>MqO#y+{H#3>dOy&J)mCt!0?`;cK9q`5pobs%|6$(EIw>FUNeXKp%+|`f1 z7cOdlE)gXBOffetyde_>dOlw%MZbL1@7q` z<*1h&PUm_RUD;|`NEMc3NMl}HIU?F3MnCvHmd|4poTI?%O?A0Fhz+jJib z_uJPR02c9O@4$lwEtB7j*T^H+F8)(mlcyLeQyhi?Y@WwpT7{APFt>LICQRRVn^RW1 zieEKM8WRnJX*D6fSMu-mt@}L5h+^{pf|i~k6QV}Tq(kqUJ(?*!=+|o}&bTwi&a(oP zgr9cYNvE&4$`+$SW*^XI%FY+jy6mPnKOp=g1WZ7@1Ka!Xj30&CZeF^my;9aj_PcL@F?ZB(N1jwhTpHi!D3l%EoY5pCV%T7xiH0ZCcJNl!srxvWO zxvmS8H|MO@^)42K=IGki*E4^hrzbMvdOzJ*TA(EHr1=j^EatJWc~LdWEMijU*Q+{X zzht;l)0CpccxJ$g)h>>q$r`RF>{RbdMsxfSxfPn_O|dvsEkN48VO+M*GDY54-6uTW z2le;xw!_H~74fBgJjyY^Hzy=c4YZp$U|V1^fz{T&>clu?HVE%PE2(UX2d0MYZuqoH zKh0bGkp0ng^I7TkEtuLk+MAv;W9Q|v@e6+nVyEtwmUx((uL%()-EDr-y2^W5+ds@Y z0ZSOLeQ;#>{>#c&S!-oQmlQ<{jz6Ii!rM5;`F*qD&Sa?J7NlxjUs~W4>Fby|efs(gz_gX&Q^ZMJ&LGcfnxf%*#SGaEX{f6PzRXe7&JnLckYsm>rWz)at z8k>=L-qYALjT7F<&R9LcI4(H#VGpL8O~T;eU9hX=&N;_-3oNsCy5Hb7s%Syc*nLXi zC`BZ*@1YhTy!U%v4Zw~B_c`W=Fl-wQYS#B4nx|aR-Mj+CmS6?%lE__N5Z&obJ>pBV zo$%E_I5*xqx-!39A+S*Tr#fus4`mMyIpRE-c;@_V(7eA^x{A2ay)CDuUMZF*2N{03 zaZ)pEPRSWPY77E3)`6?khv-e}och{D#+=^TWqI zAZzAY&lqW3-vlu$*h6`Y!RmJI&`ROD{Bo@;IW2vVlniI0(V}c*LK^GV#+8avE9Pax zwu7c{)GbDD@w2zS3j&SQ@M(74sMthK+pAo?UXh`(z%7x_ShWeTA69RK&)5k#J}ZY@ zEV2GF{oAYFuXMSFGb3|q-6H$E#MQz+#$ut^?^GyMHeJ>;uwBl!t0;NB^j4h2<925u zMI4Qm$y044Ym>F!Rb8W}L@pyo*;6R#A@m4jRQ^dxG}|HYh?a%9JsYXXODZn04DW$oTg$2z)6sqOC(8cPFY&db$$hNP*GX&7+ej44=+OiEPt8@+ zEEIp8szue17&|_i^@f{()ECp;;LLCS#2I0K3(R;rXp;}P0i*7f>!Ni4z1D-(xcgG4 z-9v?yG=p?V4_TV_Ivg<0qWidL~dtR{( zU%@)9Tg1wLrztn-K1Wn94R{qrNxEo~%IHmMJNhStC8y?}vb(h?o}b$AG$;ug3ed8| zH<$qnV#}lOJ8s}(9!^-MrZiDTxej+=)xk{4JX(mCCN+It8tz4XHbaY(Oj7Th{7Q@Gmk{6H6qJI#eP*0BQak!LOSjT}wZwCR9}Ev#R1CDX+Wu2C9s zmNI1#JA8fp#q-Hsv`ASUyn1Tr`IbccoO0JFR%47!%(A~|xmVyd;I zp70gkZ4L~RXeFv{qyI`_x})cI7sN=;J`@L=7@WAlf4yi_JO?Eu=kOUZFf)z*9az~jN@d_L#>e!ZSgOjEmtUC`2ya6Hs7;oz;f|Itoz6=qfQTH`mar!GhGnf^a)z(qn0@yK$S|AtEDD^#ia-mz6@6P(?fuArQ<`pO%kibI>67lM5QGAkBFk2^G0(|f?C z`X{Rh-y3xJz>GYz-&o31@9{|c=r#MimfxCcBk5iPm2pFLC4`Xse>goHQEG~@H^jaiXbfKAh20^IlPxzazI40dBb0ZXa! zzN?B!W?iWAejk~Il>ENK-{KV#{LbmGa|*{-&J=jNKfA*+mDZ{dO|^U*a0w3E{WXQR z(#}gcfi^w!c|4nCogw3(qg{Y=u=hxwkmz5t`#AcisDLJv{rod}=2km<BUYtwdKq@Qsc57SxONkw;pwdMl!&_ zPt%OgDGwoxIWC_aD5uLg@|O7_c@hZuZj;kqj5kqsYZ>HWIZ7{6CXqfEe;ky5uwy{k z=EdaS&>9%B{xNW|*Nv2TIgDd)5W?q6UK_Hzsi~oO11i66nF!e_ezFGY?d#kwR5Chr z{K6uKJka)=of)bv5jQVq54L{S}td(Wz<$+re;H=Fz)O-c?P1wM3u% zUEfVtqIEV7b-+Q_@F9K;nvx_+!N(iW{*1onFdrKcaourtX8Zx{G|Lx*ed`i^k4w zYea+}db0(XE0U!KGLoyJt4#y?e8Ly^da=)7UGKxm0+Kl?w&j33ka=jjg_FZV{glWX zud@z*?Lsa)-ykPi&gEtYO5O#jR>|_yEOK%D zY%WieUtL_f4bKzW`6k>EVF?^npY#6^EF_%n$a=MOuKn6kf(HVnn@`06=h1(KRBuhh z3sJkoDOk=#d#a@T>CZ=dC}OY>^}QzQ;Mb~F=xA^CTGM3DcqwHFyR%YV(xns4k~@jc znIL$pR@oP58f-w)opi>gUA9O~HH$gKXI+|0^Qv(>J+Z>s=l9~maMgd4`;R|;E|vw0 zedA_qJrl;O8j)vQ64(EJFWI>D-!-RfaSprKm|bdsble_VKK$B2QURV4o*Yx07Wl zN}p(%p70N5e+8e$X{$g-6gRNe5b$%OPHW*c0TMc`EVifW`p$iOE+PAkP%SJ({`>cB zhd99$+Y*hfjhqw5j}_^>RuIz?iO9##NJF)SEJu4*18jGlt}k$U^9fM-5M96e$GE>R6}34Ezuh+C5katV0MExdim z8Ujq>ZyE=uyxL?GjRQV!HY>lN>GTQHaS2Oe4p^h$jxBYaTm z>PO&4Mh+hwi)3z(tOd@R=K)d*z;WPFYa4)&jx5fT2H=hhfX`Z3c*L7Tb#>da77IW8 zZ-2BYWt^(C(w^ZR!Krl1>o!m7;a!#Nnq+`6SkNTep)%7ED?$j^o3oAzbAq69cq>2b zxkiR#Tdxh&J|MiywAF)i4s;23ARZEfrAM~8yGYx6@GwZ?l|LGHzSPD9Z9TrNOWn_` zOrOl%nER*ahtrVEE+_&A1gkV+u1EzbpRwbt4wf>XpV`k%=0{;ivANbjJhM?-$Z9vI zF{b{o5d*rmQ+`rs=m?`D{m#BLBXc-dIUGA$$N=200~%VWdi;k?2d7IZG*?3O^}pE%?X!Kyd&i9 z>b;~+jU-c@eUv1SrCjM?I*{x`8@j-iKF2<-NKgRA{@bB|A ziWz2jbD#yLoWT=gWZKkduS9!~fkg<9p;_L6=+cABE9fs;qSu4EB||To=n56{Q}1+z z?{?plNLx1sd@w8vn+K6h+pORx^?G@ExbWa;twJz;LeS1nsfN@&Xc#zRx>opVrmSLN z+Kf)YV*kZl4(_i|mWeiUm)0hDt}dRKWj7I0;1+1lroQhC>;nAFAQh6^PjDZ*N-%z? z7r=@9mbSr8>Kn`!zDdnyspljc7%PQF=}nA*cLYeyM%;Tk0$UIN{@iP?OstunRdq6fJ&* zTL-`{OrwGJ7<@ht#c`w!okfRBwfn>w`vFZ$E2|{0IGyUqJxF25E@7_b+vx$ty+8F2 zTj292HAOQe+3k^AY{g$pl~6fq1))pqA#&>S)y6Ef+qDcw|ADW)|*hi6o5b{y{<4@kn)svwzIJpE)Mm)uH*7Y0f z$P$51ID*H_GLL2Kr%(Ne4TtU4sWsOmE-#was&$k=bYxb3J4s;B>X%F<5Wz$J=+4Du z`?$kgr#rUa4;pn=EbA#272In?-~LB1*KjrMU5+$7%IfFH`xt1l&r#TCP2wG=F$0LO zdqtD%hivRFKUB;-2+?Oc(x0}Vs-GN>PWLsy5VS=pB5DEGkKnAZot~Wim-UVrH(fMo zK{FCgqF{ffKG(`S8<fNA9SisKQ7c*-Q)7TpO1H4YM%_z z;}iT*bEbXC{37Bt0+&xupKPptZ;GWsOJ1x{)C$=4uL&Z)4*;ueyUu^{rUTu(GVN!?v)nfL0K!z}Y9Vh_l~FI_qFBT& z@SK@RaN@uWK<(24rk`f^uZJvCf?}I@B)drpeJ${?->P{4#^P($kut8sK9}=ka1>RP z@zVBajh!Z8dNbV;;1)!tE2zGt8T%Eu?fsmOa;vpHzs|4PiV$_Oj&YjYae^{Q2Bwk) zdtBY|-euO9SwFKXjI@h?{2Zr7qXI6hcOSrm=Dyo6j$U*W%lN%s;v`WK#)QmbGbl6V z{#vig5%lw^<8L}y$D)2Q=vqg`viQ_SI(7YvZH%51JZP489)GjeQ%*@PWlon%=|*dr z(6wFknbke7rDg-1;sRiY_F8@Vfs-a7G|wngbh{^uH*;{_&1hJ5P-mo&{lXzmmx_JG zzZx~Nz4|W(%|)G9-?eH28ii(}Udi-@Gu&P;LdOi;>po5mPcF}lsWzd{U5!gz8ZA_C z$-Qc7rpOb}Epz*XW?<|1U0?E4V;?;bSS}06x$WH!b#-Uh>J;E5jH$km5#7Eyt@EkU zB|9uSO9@kVURX@Ct-WE|jZmV7uP!a?uv= z42bgsVS|3+P-gqj^HsuV5V${i_dyC)N#KBw+_;r9S9>v41q*29fU`ozt|`J|(EB$1 z`P$6&_LHeJO7A@-Y$wCV&h?k!7gnpKAkxU+fK4E04F7$WJu1<@{OA8E!v@8!t`|}} zhUWT$ITXgjVZ(n6L;5+}2fwJ~dRMS_?qZDBKoNx+bD!V~C*+S#8&l1JjEj(O>bv6Y z%>r;oSB!L7PX(CDW}kG=cEOJb`kgDM_c%prJ&Vj{urlrNx&jYJ!2a#RcjgE}Z|0&` z!*JRIdEct99d%&IRUmLqq2+S()ch@@3BtdXMOhIS*z0H$W41O4MPAxZ5QTY9>}cT` zyrcpANA2Yb(mPdVI=$LNv^TkS@bX3N3#o=f52NzqJNnZd?ilGy{VM&diB>dXw%U01 zxIdoS?dSb7AY4IlEI-=#^BO5@qAF5)e$`<=X`zT8kei}_GECi+V3&T<#$DBY zTn%^u(q!Nv508_Z*cxy>JJ&3rYvplUbU^q<=@^U50ZW{_13&&+{`}ec@nrzC3lgM<|B}AMt)Qx*U)m!-|GU2SCt#Cy-7=-vg&eE zeaSB!85Vf1IC1t`IOxxDQX;GQu=3scJbUBA?Z)GC^p{Si|9hUd>D{xHxaqob&ceMeMEiHLH!j?hD9{>v&MF%D zLzg+%yQNuL;MA3LUXPe@By!in)<&Co;7L}jU{{LJel?=u>@HvA%=YR;{DudPetO{X z_mC33gEj|50&49A38$h_rl?Id*C=c`i0{#!Fb$k-i0g!?WOJTMPvu5^OK@d+0~fz5 zK)@D|$%cf;yOqjj5nh%$-LVz_p%UILIwklgEki!(D3pw`fd7R2NQNiA5J;v2g<=j2 zAy?3!WZEd*kiu&bLI8D)$T;nMGnsJ9tqH|MO11Oktmpq}IN0qW%VT!>`EP17@4W5K zRBo*bXe$gUn-biD@(z#3lA6{*F)JY3JcnqsLAsXJwG(!C05jS2Y^Il;^Y38hh;0K` zp#Elc6J%r~Zl1s9=|Gxm<m>&|C=_!^ey9m$WXi1ACyM#PS9OTK}1$$oMHsKEfiul=MEjL*^4 zXKR1bNpEz1X6S+zhpF7EJCY<|01#zAzYjnI$m8oyUqq@3ERC+Xar@!ZYtZ6fj}$Qi~vMB7s<;(VB%QQ#jHK1H(IELub0 ziE5ao?$}AhdXW(IzfxBAj&@=;M%cOcDKoT$3=&-20`9Da2bT9`Q?5!MkRT%`iRkyU z{Fnz{l^SeCCrk%R=GCQnt8}Khi5&I4Yh_?0OcTogR4l4QiY>`r9tG6t_Iya_+bFwq zcpP#F_*tO58CER#SEW^Hm;&5vD$Qgj(?ZDE|4d?iBK1hxZ|~gEtcZId9Z0BGAf9(gua^6-26BSS$1bh%xm| z`jhCtcuFC6ih9_ugzXnwmqa(kL*0WB6YH@GE_l1U<39Ua>lqFgzQrDRu|qbdx8wty zI(c2Koy%q({0N>Zn#6)`unY9`hX;Ss6LUHzVxRN@v*|pJ4#ZY{7#Me(y>;$9R1@~x zhNI?djF6wHnXN=yMJp#ex>;%~oG?wnDip)Vo4{}Vh{ylMq#RUc)2;2Jk8h(uxACMG zKi&+Kpc z0xDRQS?3sJf9Dy-cP!+h0X&_4BY%vWS^mWRuIw@-(mTf-g2=l3&QF9V;9IKsi#zYU ziOB3aQb(ziH3!e0)%BgWlscG&7kiD47>=2q&%g~;{QMr+%l>S<3to)UlR}C3CgV78 z9i!WO2u0&5RLf_qsCqUiu5_F4tVmJ^O}5StJ!qs{E)wKcf|{!LQ*iJ6;_I#6Ai3*GP(sis_u5RD%zMbu zD${J~f#4-U>TR@izAxt^*8+;)ruUVG#Qp(0DeVN(WttAX25=LK7wx|#qh`Yowi|hM8X@(Su@>uV@D-; z>YjF7*z7ZV;esZ$NKxtAPtFBffVZkQL9xa7p*iH+*0e>#3!s5+271lvq6CF`qp;;J zfV|CZcLG5}F&DP^>c5MVRg%$C<{^t@H0|_w?gmM{Gu#5+IfCDDiSCsRDmDKZv?o5) z>u%9~Z|DTqwDt7b^Qqu|g>PS~U$ftBf4O(Ix;7@47}zbG*mWVxyW5ER0ZUYyvfRQc?lK$->W8jEC-f^ z=5bPo585LXaO3Ln-ZEq1q{@s&>*)x-&~*2~_^EkcHm6Ifiwy_ZpHaDP&tI9aRE;~s zDhFO*&7Aj@)B9;ciScdstlE<#_db(9m&o2}i%sViYZqt~g0Z`X3+H@KdM>Q8=Q*^M zRO_%4d>s9(d%xOZb?;=k6+){@$jfH*SzEGp+K}IQdC>hwCXCB<9(hwa0^(3 zoVCX6L%Yoa0BChtJ>CE;XRt~_AtnUxY+3{318A};?pKbR;C6gcmuGA7F>9W>xu@1c zdtgU?hQ4W0emiB=fhSTTgs(ZNjoVW3Li;}=2`HFcHi*~)E*tmF{R?WFYLe;A`p%Lg$zTSKuV*#ARyzZq^zZIN={Ep&cveT`Y zu^ZC2o?_0a#x+*ebSHiAQDVxlTng^^Vh(Cg(@hu}_0nzNJWJ zleCxJsVd@j-n{&gly~ZGviZ5>andC#!c~gmc4%ll@wG2xSNj4mzW@aDTzLT#1m=h- z*>A{xdFX4^EEh&&rj*ff!^4R1{?i^TzgCB9r}3992DG$nFYThl5U|l^(4Itq?^GF5wSi=oLHA%N@-osl zu|;sIZ%zk{*b=c(a^%ghA32;@5u10yDYx&nj+h}~(u!Wrj%!vui(>Xa3962wB@3kF zN3-{H%9~02~JEsX(OV>_#+{9Q1kC(`wJ`iD)tx?p2oZ|iB=*B1P5aeAM!mui? z`6BW4t@lqh8OOcNP5RvgDIk(-xw@y}UKh0X8dzYn9;OW?D&)lA5FCu@D~b_N8v5Uh z&-jHcLtek9szzaDfm2|BZpFcG0KU98Fo1CX2T~G#nq9#orXYu;7eR@(f@-?V@J+^u zIC#+U)eK!t=#d^0`<;xwUl`!@> zI-n%v0?-Ks-fPjHymS6c&)0IT8p}2=lt^pBJ@IpEs@jVCFRnAW=5XI3^nSrR%fGKM zDR>NM8ITU)2yrx$zyHG^??XQlA#JwOu&|RSni}-uvlpdo z?3h3E5iO%@>wZ|W!l2+e!-{CL8)BdDKw+&y&g+Ovvu`R0CGQ~0O$FH8^nf~HVvmwr`$%NbZ<5#ROPUvm`#0d4B-pcn)1NNydS9Nmr&qEGY-nx zdVjq>3wI<8_jZ-Ila}hQ?ea^Hnqj2g%-LS60Xqh-m9ckGI{exz@LSn@FKOzCqXm_A zM~hRi--$7uHG&86suz1DjP7xluC16OPNCgbm8x+8rV19)PQ};Y-ooPp&%}-#1ZZJP ztYNK@gye^*V)jsbJd!l=EX~TnmuKU{kG^J3*IjH8_yZ_1JDNW%Qvu@-*I1N~HQOLX zMN~m&LbAhr>cHuD=jBlQwX87cf*GnnEV6yrhjpMk5fWmMoP1A)f} zC%AfTiZ`vg22y_mfpb7AY|XcpaZk_G>@+&D`iUH>LE#PV7ut_=TO12F5ocm}{%{OF zp)D#eaYjuzVRh(&N^L2(nhay<#_H%KWOFzyAwQ2H0^l~aOuUIP6IZGym?I@bw74eN z_nA#X5p9tWzG&$+U_J1Yti?rQl@(_ZqyKlM(#ncKH4n46x}~ zkS=Ty`3D>Bt=|u-E)BJBCKp{JU5Z(~(%T@Sf8 z{9-EOdeNhyD?ZB_JQ6)=hezxCionh>Zy9~$ceE=^*oWr1SPI9I`#Z08{7!;qq+RVB-HNo88TE57x&aM|VhR;0!9%+SO# zJo9^ig)2u%knThrTuBw0bC*zJYto))0XPG^xJhiHLDau5E6#RCcIGvq&)47PU!buo zUz$}4NqS=GbEzg*)f$u0gM6%y7}dLx|I4m$0%=oO2mHGaTvu&fh~j&arn9R^eL>pA z>>}RD@%b5yb5I6kU(PDM_JyS-F`$w6@Jain92uoY&ex8-7H{pP+bL1qf=n(YCh?x%U-v7} ztT?;nc*)DTYXAu7YfHT}wUOB3pfd%X{Q-~AG*>M;whtIpub4dgJaSE{Oz{cqOLv0A zE|2_at`?D9APpAw1PH|VW=Fmc+>*lFtb0fnfaL06iog0xE6Dr&=j9yv|HQh%9C=)7 zfBlMb@I|IL*2-JlIC%VWFWmIPAy)4nWh2iGtvxnT_H1B0lOeH^ z{wABAiischGf00*Nv|d_uk|=py=DU%xR|t-l3qq$Lz@E{s_xI?2N)cNL4r8%fYcRH zE-Mj21~)yaoe@< zcO9|^pAUF94uQn#lqKCc(2i3)bL&rayi*srtwREag+XKe z0-*qT{~<8M_^r^+*&W~42F#`BDfbV{LKKj&a{Si_4Am-w-Z)prYFGz`o|#{|K*|da zOv|vFi_}1ea2td{PHcllH(G%wnrf$+^KsigU)FlRr@NPG z1C%U6Q*n{|>%UaY4$N(0Y=~uT6~#Zn4q|u5eC?w`Ftu;h!h`Sq=D}R&YIUNsR~Db~ zkdIo`ObMX$ax6sU10b`#WuLyAe5Iy&sRv<@@bTMZH!p_4FU(9Vs0$PlXu9!k9!fq1 z=xcyi!)DoU=E-~JV`aEQYu8^(vyVhOxnem661Hv^);}gGn9sJ8tzPdJ=gp1DC(s20Y0fj*IRevDWdHm^&-~7p30GU+O0nt%k}MmwS&ME za7@_&_Sh-!A13ms-Uh;~6D-y}>uLa}ttHm`;m*T5l&<4)aP`QG^p%vK8ee{~IWy8X zcnAJ7SgP&`2Q2f1rNd8cDj6uRqw|VuT-c*~wHW!*$^7_C-oxukCkMT}R<(Sx^Fh4Q z=%&+CcgdoE2YLtWn_eeccAr-cu34DYz2fR}emk^5Vb3hD0J4!_LKHw%@hwxZGp^EDBL7I8d;Cdm z@=QFx0(jKMn{9SO(d}BvAh71{=bcl7%5jcF3w@z?}Dkf)+UJUz?t&m)goO3@7GR>To) zaR#t{JO}ns4(qXD%{ueFDEFS>HwW56sV>F0o)VY+4!nx%4Trpwjc);Sp)Js@?m*~U znSc~-#T^ekBhd^rpnlf_$8Ezg=vVXAa75m{tU(`1B$cM8myd*l%JEhagnoti@X)23 z#m_2BQU3L2M7WQ>)04nR&cw&ZD*-euSXkA1I#9AUir}2WysGc)7@HgAwma7ib(%Z% z#_MNoYS{RYD5I>4=gZXr`O&F%t=}T{@9UjWWM0sT;=Xh2wLK=~XUqPLDAAb}Dqf}5 z#{LgK2+s&p^?8na!$}JSo$lZOQ|I$FmU5CGqUgoc6WsDC_fT&uM*+jUnef%jY&u1K z@3y{s@1D(|9#HEBV5eoa9E&`9zyT_Hx4pk_pzG>h-ur2*3I4+$0Z|tqBY|r#`hL!1 zQNRU;HCZQJ$|$sU_Zs5zhK|?9VW%QrV+Q$bT<VvqT{sf>A8_p z`w$p{8g(lKp4Iv2%QeR=;&C$i=KWc5*W^xyC5MW%l-rNtI&M}}!c%EBa9M*r*&=Y1 z!J}!|3Yv!IMg6>dRBIdDb^Y<=5A#cc_ruEzt_h$}ica@Er?#_fIMTNqXT(BV0M^XY zrJ=u}P358skddx0(9*VDOj379uQ~0CNjhgC12!|nj#E7SEUR`Z1PRc$zA9bwOe5xw zqTfJywoF>ShL;%e^jh?G`ye%9!Efa3Hb5sI?xvX9y3FUzpJhzHTajcw8Mvw%ka?Za zm$X4g3wu}kK_aS-im1z>l&s3brMIM;IR}|nQQ$IfJ=?&NG{`1KxfA_%< z_6f5U{@Xs^!zSwl5&on*$n^$eTFx=wU&{<`d18-CtS>K;^OjB?y7+_us)|+>b##6d z3u%oX7C|{H76H2(Bij@t?4OWXh3^`#;x=UOgFtqE&Nb8_|4|(E zo_9hKxDTQ4xal-g=G;Jd->v8DOjTWfS6$Xr9?3c{gXx?@KgvTP+FH4c{+2S?>|oof zpX6sxRe`&aMEHw9!Cj3d;c0yj$BQc<^!dY~!opV6bF@2@VXJ_0&Kl!(++0t(Pf!ts z9}9V38;x2%TV8SlD)s>QW`kplaAMU59T?q5G3@jlU>y@|dN!fBUv%pAQxN`)<@fq*_3*l9^%7Knrw{cZZ?3AhGg3Nwl zNc9OJyBT#-9yeldz>!ir7}wsA(AyUdYW~VC9zV;~0-x0OtP&Qk8ARP0C1Fn0z`85Ke)-cWMb?k~3>^G_rQ~%37L2&mbJXoMd*B z`XR6)OV+$Rzh|ezsEdE6oJN{et(CWC)5w*2qv|fCV-o!1%@o|}0QhBFj(F`pi0Ru& zSpo>V*NP{t>f--QG}!8~Q@eGY6yE|fWWE8;7wnaTK4lMsv5d?JH3xT`;Kl-*S)8tM3U(Q@C8BA{Q0O1sOFSmg?%FbJv#6rCD z_1S%?Cet1Tp*B5}lA>{cG;-JPSA?bekuCHx7g(2_3vSX#_q^GXg+9ByKuF8Qa*G_y z{PCG!v-}U~Z#4LLTLvq^)vJr<@GSg!5O;>I1Yf=A^H$)<*h9heacW)Iy9pXe*xuDs z81Sx5<`W(U9DhOr2?)$fD&qN+=fO&*qeEQaGVLAAERw7LEAk45);i1564(UFrpu>2 zX|5Bi!Wz7?dx_U64N+c-(<@Mn1?nUfZzc(N|y-omOr&?Ph zz$eYuK5_Z}f6eo&=&_a$=&}H@$tzRoY3D6parPLPHHr|`7#~)v!n^%eYo_{+APZH{5eINx!Bg9b0z^NN2hRPzY~I~KNubvOq$+AV0Gh=Jj!3RsQdf0 zOYskPt4K}(E3|k8pF4_48EPoj58dfn>b#n@vC1Ng~Jkp8Z z+*v_i5^6mBZ@x1y2B;PHG5Z|#`Oq9@|5#5jCmd_Kgm;+=+qyt>j{aPwFs~W3Z(*KKH^@uZ@>pH;}H# z+?kdF7>pZihN9A=iwALU5T)RSl-jF|EiQkS#4iR)klKx<35<@R^K!8@-&W^kvHWMZ zk%*%amwbmeA4a!7AaDw7s6*PLu(FU;mU)Ge-GhwDZ8y@Cm=M&E>nLlFuVrWRUyCFw ztfE3e>_5)AcsZ_U6)9?TnbpPdM)4|qb^IIReS!Z(2PWX~o25CcqgWQN(7^HtYv%<% z=_)>*G8N2Wg2Ohbj;ei5HrRLe!TpDRN`wsQN|lHoLf=$at-ud)qsVMq*v6@yOL-;T zZ(5NeB}R8B2?~CHqmrvGzPq)}EuRV6s#z_U-K z)_qlC_#Dt{S9-1qF6eZm6uu=7{p>z0{Qoo_cAZHJs;=-INcmYPSoPFNtg!)j$=_v9>}+EXxxN)xbfi zs@?2XXqoo8;1pt0w}aicBB~l({h1T*>)9wUJ8Y$iX37rmO*T34gYBJpr}3FqW_KtI z@`#lkG7X^?9y7_#8Ok^6lM_QQ2Oq?FMQjF2Rgm<3MPxphxfc07?T{sZerQnNQhS=u z^&Gu4si;Y*<7;m1%Xa`YA04EVGSP4V3Z|aawfE@cIM!Xgd)ifxhh$W1YyaZWNBS2! z_ma%!MBTO3wNy^zHQgA9{MQB$r_cI`@+59opXNiDo99Li-YjuwJEJ7gfdW zq0xIBXhIHY$XVxewoqf-MdFasuYO(iohfkD3aF*P7v&D{YwN;UT-PeqZ zd^ejvIQ~nwqBVq!{aY+{y)}Q)Zm#Fe66em27kT!QQqt1=Tr=wP`}p9zH(yKM+5fs3 zzc|Fj>vxv=dI!0s!HpcC2v%3X`|YV$k7ik?u9iomd=72sY<_=CC%>X*(f=+q4|i7d zA#K=wlk|%N_W-0D+T)m|w(nSodfr;R5aJj!y z$Ii$4YrQA?`YUY5T#KB#9>(Nk;;LT*n~Na)7D&G0yDhBg=THVbFN6u9`9_xonq?Fh zO-B#w@k>cCiqBE(C47^j2iU&aixFdV4leA*D>}#wXN)^@tzn(ES0Yt9)+P8=oIV;2 z$rZG$k6fPT(}g#k7*}Ij80c|&)j~+r;Mfe zo7h$lGK0_;-KW*@O>voeKn&yN&=7H zTlbXpLbW^hD+nux5B3$~ezGT>zs)}0_(QtytR-rLuedL7phA-VNy;Bb=MUl<*0qNv zOdjXkuw^u`0pC96d%AaPmY?|w!f^vo&}19|%c;#`q@IkE{&K}*P{mBrf@v>auCj6( zFg>S?XL%h84q=l=vB9{uNDQaCwxtvA4;^=y{JqWh-p;OX=f}`Nyy*j05pAf^_q_UC z<1TJu*jwihcx_x{lhXe=AB+kBpGgln|wvxiCK4X<3dIM zzWH`9dv+6ry4(4aHMMIg9(&9JTZImHo635?U$!K`ISaivIa7nhDkaq_s4c(fW}mIO z&xULdtt#x=jx~I^Z4xd;`ZuQdG#L?%ge~-Yt3$|trk@>j&z#tM5B8!-lzU0_SBYOo z1(*P#A)0TQrx)xK$>#0-RLQHmQgB!4(fma?U__~&w2RV%$LzI19G_GX-T(GDwe>&4 zYjNKU;GDmAA8*9|cRT+1nO!MVH@k9@>2xX?4iU)de(5w-=XrL0Zpr0jRry3t;ll)oogj1lcZ;X z51l_Wae*T^6VFipD)_wBtpZn9Pyl>R^whk38tN_vGA_HKq7kDs@a!;hqQ%6ixoCcq zfgOT|s=7Y&%uWAuWlt_3D%iUW6DKJ&uP8s%r~7voBLR#lTo}&8U$)>sffoR{tE~6* zmXG`peYEgeoaB}98}|DbA+N949065Bhv@|~!%IoZJNL@ik9!&?duPwACIG$d*%aQ% zvD*G`rfQ=9-%7k$Kq*Txrtcub%l-|ju22f^Kzo<`D@iJZdSLr`&EKPv|MK=@a^oT`F?){UU_EKpr2t;w(~2pvaC6s?E>Q5 za3{vyEz&rW{Fd{utkrE?>WFnL#pmrOm?mW3?a@yC_Y-P4H7Xyt{4Z3odAnCflO=|4 z`X}6|JPWiiHE~56!Qy!V06Wa^tz5}qQQy~TGU~RccL6KwNL^>m1GE`EZCY?5&7~W1 zqE3p-;$+M?*oZ{^VU!pS2W7% zT~-9s^2Q55*6{Z_=aqWrt$s}Y=%t(=n?)ioD!_=1i^$)}IjHd?5C7nq2g6|o{!biJ z8+Gu>Dj^U5sza!fGaVM(=tS(^%DH)HbCFe-FGHXL411A8Z#}nKO;!n+Z^m8V2{bR1 zeq~if$CF0_?;DF`uqo@0qoHeQHfswi9RyBbtZKf0Tlg}eQzgK~ZVeTpwZMVJ1J987Tt~A*8?ST7zy`K3qlC3cgzmJT&S0xlJPJ-XgCEAzS8=g^Ym%WTL z79<>}tdhs*y3O<{ErDCFEjR{m~k8GPD) z%*Q01a>o`F;dNRB@9SDh5oTTPU*mX@UpJW@m_2ffN5#EPmPYdgkZzb5r!_G!J(B`q9ESuPEcz zgV5xSx#k@{9U|eJhjUjhFN`xjo;fW$b=7+-@Ukb3RBX+;^(!hxZLYuikPC5B08-d@ z5nv9+Bw$9A1Gs{t* zbp?2k8!5cyf=7%G$i}fyiv<(|p%x;sg2w8A)a^xV;D5{6?Mab7vIaC2&PY((htMTq zckK6c5P?vi<&$^uHWT7|VkgZL8IJ_C*{yBiuF)#Fj}9}~A@0KX(4r195B9X{_Z{~! zmeJRxVJ<49cHgx(z3|qQQuAjy79$mSLUv}-?CF>OABzB_$UjdTusWJ$1#PC-e~W2+(Tt+j8$YWPe%pf$`Ecb<4d!oSWWm|=kvT^!Ij9N;~xg+CvA&iv2JcXMkK_6fkm12A7>j}uxW8|Fg>=#s3 zkn+-<#4lk&RzSk^Nw}0})AOUj?=GXKT|$>})SxC9oZ4>Qx^Q9@c-;SuDzWWD*yMh* zV&ZXa@0K3mw7+k^b8$Z@G}x|q8zyY2J8m6S7@X|)G$(ie!UgkN=fEfusV_PYn5PD$ zNGQ6BE$>Js&!F22-~b1x!K?APZzQKW-|D!_%nKLN))-5LT92;BC@!?Q*Hdv{t_;LQF8 zIf8E{Be9KU{l=V-;5Yz2_Tey~|U6&&lmnJI1Tfz{6I5?-LQN_#thPv4e20 zw3LbV*J``^Yc-hqXAeRD_~*}}ccoO>^YpxaxGL0!Hj`vhka8k^&Sa)1PM=g}L(y{s z-Tlo1@nb)T(n8VvTUKGg8svN+`3IT}omxccgt>^M$HgbAWSF|_UJq<^03R)|7AA3i zCd)#6hdAe!EStwL>qOENWx&A9o>NZzBym?|gPI)D8v1>9-OO9UevVr+yWH~>TAd}p4!(0S!oT#{RK9Hd1{r_)!_&$>jIOsN>7-zdM zF3+Evf454P+H|-bHTyfb;iB6l7-bq8AY$%uxip1Lhg-&F@1yxV%ldy+o!)5Dr=H&N ze!ceobG&oVb|R~o8sZU7=rNzs`zfEQ#{3nxj@2b;~ArCGj2<~H+6Q+nKGKPoj zTDW)6i*Ec1Z9YWYE3!?Vxy9Qi6|L~Y|2bK# zmFe$i1wLT~T1TyYM)=nA#-_jQ^X2{UD%FT>n?!15{MYCJ<$ziU?oJ>^B3J(}sSxr&|)^k$-sC5 zV=oX6Zv2FQVb2JOpeseCKTF(dj?!ytul?wGm@9P>=?$q!kQ}~ATb#yY z0-POJg^*%uRgYa@HZSOYunZ3t_HSGb?J@29ya$M<0C1YOzeQn@Y91DxnbYOd*rzHS zVRfGm@DVa9xWak8r;HRGDt(o_QdFQ7=B9zFKw zSXcpMhE=jylT4~G**_mZA*WO=!l8esf^5X5PA2)bUsd^>lSC28Q60YyV2L40YHGd;IHKOVqp@PPt)_AKllm=OENF>?_X-}7(9uDaM&|XZmC-p z`FqHwmH2LA*Snc3;7-4PvVW{&FD9^!a^(1Z#((E|=?yJaxqQ?>FSlbu8qbkVGU8JR z%o~2oFjW1--TdF6kviKArqSImu{mBQKW=haSmd)9aTM!!tbUO^U{NN7e8@uuLl)4s z%r!OuIRp{rJ@l%Vv&VUhD?me~gJ3O)zZBfFO0K;y!&k@}16l;jjo|Ie)}D2s!%9wqSf^^gm9Sz56AP^MBm03~!Aa>Q}TZ3>dx`v--g+ zNKHepA#&kp(D&rgk$oNhPies%>K2RnO1pahrDh>bSZO2qXJos9C*9tG*KQPHb?#+z z*z+~JSM#qGi}E0TRKC560n&q-H`f&d_KVdu3T()?{HVg_^4p#hV|&6%~{7G z`+N74;H-w-amvr;sby4;Z!FAWdT(3UWl*Sg{T2)w^XkR~1D`ms`3Sym&7!NE4nz@J zGi3OPw`U`PT;=*n#zOAExbAp@%dWf4Ih%aRf)yW%#Ro=v?f6&ePbHFB)j)^2X+s&; zXpB~{!?r2k!-@%o;qpS|L;J*yg}9H`Q0~l?Ce$8sW#&viO+5ST1M}_E)JKik8`p`U zMb+izxq`3bJp!u1{*>zPBd6L*o1E@V=Z<`v5WACUuB(fxX_kYOB)%1h(QBSlwi?LHci~K-yVH)@)VUW`^u3o!4#b*1sPAL%mi&kxnP0)rON3AM%QbY*fJ zvsgTJb8}Izrp0K?VdR@^3pmd!(&Q48JYf{0s*v=gqNzU2QyZQ1X52|ZBzvZSfkaB*(v8m`% zyrxrHyAS6;E^Ax8|6mLw_7dUqAJ#Qtm{fH^_X7v`lx=fF?dL9sKaZ_BbX&HsMB)xj(;*`s94> zZxrG8T~qr?ykTF*Z`>e5aORXxUi_;8hYv6bj$gL{IEkd??NZVrH5nGZMb?9vpC!q~ zwrQksQGs(UrT^DP8HY>4?%*#495%4oW=*0fttx6G>Ty+xHBtZ+64`6+y3yV>e0B4= zfbSy`HhTEVQEv0*!PeH$394fSUKNqRm~h&8kjWA=(j7Z`qlh)5fjh%;(di^0Q{zkF zwZxzk#>OL*+o%Z(;T`_gn8eZ6u=a?XZnXHbPaDn{p(2946 zzwR_`=`&i>z2>H=@KiiT(P>3tRvm<V~3#mg}ay^Sv0Bv<7RMC_ zz32a}dLyKSp7li7O~B@USsMHkc;a!$eN5INIshu9IDOFh@fPr+CNo{HM8CCXU;o2 zbTUWxwQE=Azj+N!vBPeD|FLx7@@;ajd=LXN_@ZY-j zV_ohG`4zcB6pM;p%sGf4OnXQieZ0?1)!gX<)3*u$P~wRcrhciUFiXrRGqpszoc=dT zg_oKez5JI~Xqni^cY5A!k`*xc{1aHD9j z$;Q06$Um0$^e^pggfZ|_4gmz@{GU7JB7MOa%f*LDGfyI%euhZy&k7CZ$sPPG5=qS) z`&{QNPOSDBQvADS$*$$MAJaDM0acc^stP)Cx z`NfmOS~_)NqpfFUvHNChg>lM>dN5(``qL;LZ_3Tc@MeLki$V&!=_hS zmw{yc!ludG;l5X}(d3`?9t?T|$QfGC2f#(pj6g*~n5oXo9yC&_FTQ3DlWkJn^x@ zte1Bx9_`;fusC40gT%JIYdAZ{-kg1b~FC;qdmyXgDhP>b5-8@dz+ENQl? z1=(R|UFE0NQEqRQI#Zb)%KE*zhZBWgi0CR3q({0uCOySKI4=dcvLAj=n2yu&& z0XuLH+$AWE7>o@=r(t+sLzZ*$FLuiBSYexG%au*$bTN^(O1?W3@pLfe5X%Co{e(Uy zuW(Y6JN0$_Qifz6=xzVEd_zPyr|@}4>j}VR&J9j2G037YY_4o9GBcyL9)`Joomfot zhVE3CvgAhXeTM@(+x73L^tBs9sv4l@$8^zJ@~nMbZ`A>Zm2>~XbzbIhfa;1?mr-th zj`}a&nB@YC^7drLF=hD`dkeA4r8hEkOJ+U>mza1Et3NW1KJS&jhbZ!v^!Z3XWOE$1 z2f8%y=wHL`tz(wmZtoW-Z?k+!TB_L0t2lwxx8mRR@!!)GOm3pD#6aZ~#4WB62Cmrz z0A#>|7+478UPIFWuP6E^n|@9AV9&7(KEc==oF+=~V&m$*>N(Yqt`7yKzY=}r7UuW! z3H&p0DgCPXGE#1Og)P8wkU|K1k+k~DY&El-FD(U9hAO%h)V(YGob~itz`3 z5oCdofm6}7b^*5VEvM{S(FNVYe5 z+5`2ZKSq#5hqldjFdIckLXRBLY$<^h4?k3k3wgMe%1WnC_ zBfWX*KSg&rvcUFgR6rnd1vXUp>LjO}$571aDPh8t*!VWS4J0>J%GVxQ`n*4LW;&Bm z8MiakealQ({ul@pW^7l_Oa+~khZ*ZS#{$&pCX;sw;y<0o-nOOxEDF_c%Dv4MLa-Rn z-vW|hAZ6_2@iA={*6^{phsN;di<;AxHTMrh26mOZ^$C&bh3TuL>sT1P)Bg zI{hM1v~MPYnyhaMx5v7~V22lg@!sOvnIi44h*0uLS{+`UY%nufy4b5dC5j-a$R9IV z=8xi3L%P$d5vHC~+EfmornVt;dWRo}%!fn3u*oU6^CTF{hO6HwD%akirZk*|bMCss ziV!6HIzsr#qK8t-AE#+P!6@z}(&`m|CFS+Ih9s`v&M`o8xTEki|*)pi@OWYf_u8qJSL0ABFFm*nq zT?z`c5nGd-ag}oT0x~4Q3rMS%rLY?K#clw5Ap|U~-{oXoPAF!!VKLbKF6n$s%& z5BEY^W0LZI&+0IRfGuQa} zfv@);_EE8wtP5vz`%`!7WUGAmehg^qu=9TAQ2# zFXJefO!I%%`R?6Jy}`;0o~WsVFpK~tCXYptxC=;IBEOD}0nfV2p>r(zRq4t{xv6Lf z=S$juq`>j5*}E)2$A{;7H!Zf?qbrcPWKn=j;zX%-gg#yZ-&_|nk8XIynYv)lGRlAq zdJxa=T1#{Cwa#%r$tchF6p~}Py2{71x$1^;TmPz$RGGmY#(YT(nqcMUbqpFa!xF54 zv3*RQ5ohydbK$&N0X@E;x^|a*Ey5R7TCydYkVp|_5TJ|D4C~!Kd4|4o%Jmd7;DY5? z)-2b7?LjAMRgO3>%KY`A@}aIcbee-kQ(E$n5e!N)K7;Rds|FPB-jnC%e-_;L#yz3D z^HFq=wJDCntyV&4bxxIp|C6T-#^HW^O zSM|(OVj`N2qd}@J$vVDd#mW^gjo6-=%|Yvj5V*!%yXnQF1MLnPy8Qt&LgBsshywkp^g> z3H>z&)&IY8*C^Ujrb${~A-XEY?7^<-G?tpgohNmjyf=mhJpy6+E}3KCDo_8i&U5iz z%_%fnnp5nJYRQYkoJstLsLh?3b5ZYDV2{U%pag-y?xMXDN}SMf6DtJ%4y}uX+!^z7@1#YGg`oh&$0#@czBL} zBgkg+RcvqFfVHhoPb6z5twHY?U^6=7yPgWk+slE9$2tKb{Y~25LzYe~e!|JS zGpCL?s?tvNE4zYsWKzwTqq=~8H}WfeeoO+6jU zpe~AEqZAP#ugmDE(n*3T%O%Z+x2cQVI8Y&MEAZ}p`44j4Xa`8AqS`N?vV5M>=+MvP zTyBCo)r+E~UwWJd^y$XO>>^@`ZH|870U66b792DoM-~^I8Vvg`9BQV+9F%@UshBDyC&b1Vb~35`3I&m+s)5RBJ4QYC zj)JO&+lHEFDjET8#oP6ZW?EXf?v8oJ5$M(@za}s64N>KPzX zlcW2Pd+T@Bx0gI_>7Ne8MEqJ&t!zLIaIWayf1Kp}6JB-80s4z}_a3mLJGpw8)bESf zG&MPRk!)!A1?XjFw5$Rc-#LseRNxa?V*&GEYzTWqUm2ifnB3HPkt<_Pn`p*@*kMt6 z9!i`B#Dt{&r!LA5Zi8OZ!kdOs&ce)(Y{VTZNI}|1!mui`0V- zxe6uO(UAye#(ghFKvw5Aa#nUiedCaK=s&hKJ8QqM$vJRzyQ+-(&>z_tvl{q)s})uv zH`{ch?aRf<6M=HhWH4Sc2&)yJOgaDLjQ_N1(E%&WfSUP!66I-Do3HQ|mO`{t14a%< zn64A|F&*oG>(mNW%Vcl;B0b0_Z?l|Tca6A#DmOj7;9`5mxqpAArDSN&>==)juY~rn zCnzcHvbXx_z6hhl25WgpeF+?HPf; zm1{Lvs1z{ zJw~9fHGJ|CY_Wd{wUMNM)*~36{o1>VxD77_uH~ULL208IwOYJ`1LbD(znvGoAJK(- zp4Q2Vmr?F_RPvNrwl4I|DXKWF1!_0f*Lzzj|@L8Wen6C8q0ACC9Ys zF8w@)_v-aF%L+e`TP^wO62O$Vyo9Uj44_V_5Wz^LkUav>s?l*Vx`=LI(U)YEkv2HF zk~Hs8-})7GPC$4vKvFg=y9?ML3d7a~P}skADjs<^J? zx6z#ZrxNs4zL)uaz~mUJ8#2a^PY%Jc9xDt2%l3BBR3s>(A97yhuhZ008-1mg#^PBp z`iOw@pJ~c*u{CMX}+U+|s4{kGS8st3UW{>?ypZWdE zqi5hNs*qrUb?HJNnnDl5fOef06e7@3~TszSt-XRwuWA52NLx~vZ+_+nV$H=z}v>S{!d*LpHK7V$9 z#K`}yVN0jS_h^SCHW+~cS-2%sJ;kaR8y)uo#!C z5XR>89`2z^o~fhy4NY=2_RL@QXm7XqO6ly|GMBgJ+oekJX`$KKe`Nfl0^e94wyn43 zj;+7!8(Hu13x3@AifhN24jT$6pYKc>8YQc^xarp26YRGiT2|&QchnC6D6xrzH!8JE!Y7HD7GF8#|$4=?# zd4Iz^p=_cuK7PP)zHVsHdkO~Fj<-(`)@qABo$V@lY;xF5v9p-G8xQ{_%9|z@%3^Ip zt?Syq$Ax%s(oCw zi2HJmQTPXJ<$(Qub$Qt%nZ@ZRT^;&6%YjOO><9VQE^GZx|0W&w_`Fm^8!m{OgS5I8 z2vztCqQod@sf-qW&jlf#(26@&z1?P;Rh~9xSFweC92oyTs`c{jW9p7tYAa2jzk}v) z8Nj)_{0}ymdwj)@1jf=^RjK3+T!_I|CB_wN7CuXWf3mh|2sA za!p<&203wWR>L^lC^ria3}rowf8+phF5!2+?RCxkV}e2sgwg;YtBKGU@yXccrIKn3 zbv2WJ;|UDmaxGY0>Sv;qoYyW%9=s8D>*%SGvA(rV40MOGQTmOY-#6F@h{3wWYMZ10 z8hF}D#PT*65Nru40xtBA96tJMYpUQOit+RgT#KYTw|%}xCiO#D*XEA6$dK4CrGaU? zq^<9gf!7+up}D_O4x8~xH#BW>5Z(+#gFdCnH^WzlwU%z48K6V|Y|Uwdxm=SE5G5wx zP4?>4bS6EC~cz{6|0=5x_ z24RfG>-xp7exI~J^cv2vEv|HK?GZ#wRU+j)Li$2q34?&&Zd6k%kLccLXE)7MJNN{o zvI^njl?D4tcH76vvz>WI`GX{;a;H&pofm_CRVED>w~BM-^m($<9=3t9^q6ZJPEryU zn^C!vF^aXpr@eB~(Acmm2{(B!x*w0aH`!bM2-(B@ip@HO5d|elU7*4>{5Q*1p4x-P z%Sek*0sjF zt;Gni8~AC!`8XvGj2{&+hgCFsEHUKc6hJc_p$v_0uPljZEr#Coz}2c~pZ){rLJnVO z#g0M4%YPXUUofm~pnB?!GalTgd(XUo9Zb zqlR79G+eWuL7eBQq#p>5^8t88G|dyk>>{0u3|Y(-w$j$?=$qzn4iJ!<5ise3l3-ph_6 zi_Nx4^>ZGKYPKOlwazLTGY3bDea!EO__vDV3zwyAKAKk)uqC4&ipNm%Hf0^-*(Xw7 z`?6on8Jcvw!ZSStst?8E0uqw1>!!nNS8r{e1hD3p?|l~3Ar+CwVxU>Lb(9W!Tvn7s zmlc5#fr)`Dtxd7+uWr6*M3vYz|y z=+iEb4&fADeaP-}5}ux7QzNibd}Cpa=Tgo#c4ba{sWC;Um8V)X>ns)}PCh|6yy&Hk zOf0T6uay1L%lwb<;tGnTsqIfRdJDhil=?EMS|CDUCW~jA1M6s0x>vrzS7<5lyzQNg zG!eB>9z+kA)zNOw8~Dy-PqYh=!YP@Z{H#e) zTVW~3b_XCPj!XlJ?ppO5ofkTFk3AMI6Q}bQ}x(n+>X1gnV zMJV&C{Asp5c9cFSmid9dxBC1yV2on`Rdft`;193M|128-4-40!Y0war3%Q5NmR)_j zpvgHaSHaOt;Iy7IbtBiY{+a7@^?xg4EZeQZkW)uLI{_ z+7&P(AT7@mecAIZfLB_4Jp-m|npL^!!Cw#i6_`b1)5$Pz3nVjbsX=MqyP{Ou@}X2j z=eF9UC)C4xH_Ar5TI6Y>yfH;rE6_ecYdn7cRh)2Z_d99>+MeG|g(84dz}{@;=*y;I;`|ZkQ2nm7 z@3%6n21e=mQ@iMo?E9J~Z#@D!FzTgdAya=T;Y;5Plg`Pkl(ocof$3p)ZNU2(QwjHm zJ^bFbJx0;+$RCY%NJAlshKFb32+|3l$s8`X&mR^J6GD*81B>uOEDB&mND0ohJe~XN z@^>dv=h?kE^4(=kncUuX^=!$XTh(ouGxH6#Aqe@vyL!088(T~A6;|F#TW?}U;7o)& zr-$m)sjZ^HfdEN$H*usx3V_JG!wbJL^tWSkOwK?lcE2#=_(g5hXA=ZaG#%PuE)-wp zD)t~=+!wpjDc_38f60gDQA!~>O*9*)&is9XtGyF0w-O=~*m_IW&sguB4qz%<5$)JA zVE(-R1`2tXzkf*u%ZlEzHSX#&2M;P@LLCprKyss*zoY#5Ix+zmu7u4%Z`t8OJ%%bD9v<(I9~rRDjJ z*RJn{)0}?pq}p1TA)brfjh!JYIYP@XIZ{5)3_Y4By5AB}iP>E7!8SKUAalIwmZlx@ z2=<~Xd9Ws*U^*Grs<{5qW4jk?5Bqb1_=5(OQX-S-1iq$141iO&BLiCi_36QS+Vj+E z!McmLWK=9`x!M0jox641c#wLSGv#~Q0}yI<&_H&ynqw;$PgbhU-x$cVQg1%FfK`z4 zXew+_+W34o@O`<^X^qEE`=t6o!nZR`x!YHhnm_fAY%T;dR32k1Prb9+yV?b|1cZO^ zZf&0o{Fut2RYT$kS%B|`xgQe?uYxMU9fhiTp;WJ)jCP-5G`xUyOq7~~`b`Z{Ns9DmvLK+>_P}!RSMdDGe&j8o*CMfY!y@n~w_r`#?9_DgC>2uu zLGkD3z2!f~Fv-MQ2O%?4Pfp&=mj*Se0Pk|;q7IDxnb{xJ#%WBX?_koTd|S_8s{ZRKC$?zPoD;G_hnbPo43o(-VF2jmq$96y;sX z1sPVRXgR^Cl0}dGLI`QBK) zzf;DL7U(_B<_L1Fg;_4W;`BKYk?)%r-G2EyP1$!VD_2)8SCk!n;k%pmPhjK`$@B(a zHJ4m*;-TwmM#2jdtpx%uBMh!6*YAj`w>Ce3imMs#`#IQAqw7prh?cPhqwymwVi?v8 zm8-Obcly%{*jeztWsYwL5*?Kl%)wl)j_i*r*QSl`3%%@AXisb0#xm%iCSEUkR~45= z;h10+;A~nt)?-=rhi%(boC!7P*4)3cwzk~~KYe{fm+51dNQ%yM>*8HCk$gIBU$VEn z67)ttr}cSv=iEZ*+tU5zbV){>F(vm;(jDv4_+)cLg{X-V;XJ1eKxL;afvs~!$=5 zJ@Qde?Yo4ce1_DlC#;W$ik}{;`6~f^e@Kp%hR{OS0dxyM0Rvb-YILsYVwwp57M_(h!*FJC^k?f(ir{0DX1bz2)~*9)yCM7dZl%4%0m?^{e>3kp z6N7xdL1OtER_W0A-!^6Rb*c`V&uU{)IwBRJ>%gybr+i*cp;*vShdEzgI`Ga+c~c@_ zsQ9>cS53(8zC!9k*8YXe-+rL!_}90J1FSzQrm28y<5gU~?;S?}r2mXA=gA(eX<*@c z_6ESjM4lE*NDq!7=WS-5LV=x1$U_4=7=BL*6 zJrfIuqX<5wm@FBfs59QO0-GiN0(%f*#^kj0gLw3}Y{@lezJWlEM2~&4-XOK!nwbQD z_|g%ol;T#GFSvwMMJwmuJ^abW(8!NJ_<6_{OJHq`Eaijh9$7A{7OtKwKf7`kQQssA zsoG9u%i3f;^ugHeH!iudCJLs!-SW&xVtbIW4_XotX*UTM?W^UyPkuXXc#=5Z*iQH* zp|ce4lvczvy5dz0huRD(ZH*E*95-pRKb)o;006=nUJYoo0TvHD(;8f;Taj?RovOW= z+V$>Vm)PWHboI!Cp>b$T#?5LzVa)JLR2YlgY^FZ#O(Gi18{Zu^{*ce;W9peaF_R-Q z{|+U)(L+;tZ&`Vc7ophnE;Iov%Mh!hR()BoT1vHVW*pIhEFd&%oHEuW%IUliBagO1 z2U#eO>{AErpb$C%3j1cK-l65}z4qvpNt;`T`-W0lGdk3wgYn*kXT2lA67C1bU_If4 z2@+m9_zi3`b+BeVg2P@$3jYfSiZkUCPKVAgDsF;i?OCY{BrMLBdHcUMqU847rg!G* z<^K*hWaw@;sgYv_S8xI0saf20;^oR)hgP!Jec~Gp7=SI!`enpU1Q6vw-xT#jI3VE|6 z4TNPNyCvNfh#So>;R!UmvFL25A6u1F%E60ay#>mMV*+~^m_<+6-}R_zoyzGCM00fc zjGV5VzPUhqc%7J;n1L9aTCi$ON_dfwvsIay&rmN>W3MqxKP?edCtNv3Eg|xSfrV=9 zd*swqC1BSWioubcXTn$x`D*2iY@x)$Ht`Z&e!1QZZeB92rgLI2rD)RxLt3=Unvffa zjB^$jeelFZqL9d>pR#`p5b9{fQsUoJi28p2w9vh*aRnq7lHY-67 z2xo&@#pU0K-+oN!EwcO4H<|?HGu!6fMvu5AxOYMd2-Ly4L5eK!4Uo)eRGD<~jmn4( zJ1?{H@;#qYbx8Fha}2}HBz}=#OAZ zZcI9IXwKJcfAN9B)!y^dF0Xw}BB@@|(4H65gTl4TnpmK18soM{biL9zKAxm4PIFyx z9%^o`LYsSBytqa}kKcZd{}C2dnw)|6sz2c^)%RH~EB-$m=Fau-QkVT#pngav0QFKnm(KoSU?MXjz< zh8};F=+AZq{k`EL$;!)%{P7!cBo--K@|Pd9))(6{6UKA z;v(GHg>hr*>n__sWFbSc3=T-<`F4I9i54}w(zK*2l}A7y{Xt#t@cwhFON@6A%W(Sn zFg(|<6;=Mly3~HxrtWR)KMk4NYbYIgpMJS0=UY`}qEnfP+f3a62+C?3WUJ(GYI*S# z+uhvt`N)4_)!0L2Hw)lEw;7__r0p#L#0OdZz0 zPZyaE$MU~&|MR>)-*awW0Op?lh4SJemF}b4rltsjoS6BtSn#L{mHv680DaSsb+f?2#w4ksePoiVyCBp@sYPD^@D~q(~$V1Y4aI zNYG|Zg$Gc~Jg1cPb)z?TPcttQSc)s=)bNXId_KCt~ba^%C8Lwb$4^~E2#QT}AzC_3rR~(k@t`hM;Y?2) zB5)f7`;z3>I4q`8_GEA^yARwOURA`*A9+kWb4cS zN=d&vl~Rg~bMMKHm%OM5DC_LYRMS1SjUSU;CI|)BjXFh(hflJ3J*XHMeGF#i`%XeOgAHHopU6@LMMo`{mz8fqMWjTT=SBB5?f`U%mfEi%mjMm>E zGc3r0wW?BT$a?RNYGG7vDr2vgx8NrBoCxCKLe_YA6sILiU-NoPl?%zY$^J_&v>Lz0 zF~%Q})w90H?CCOF${Vt=vSb?%$Hdl&;lXl`huOEPrO@%5%6cW0y*gw36hbro5k$UQ*0g)p6B!S1yVOf!k&Q zLqwY3REyLBX*a1Q9HxAlY_^lF>(f7U^-ot^D%y$numj zJ>mTsmj+Jup!3B5(ZSdW%JoZ(?s;{*;O|i~snjZ#T0A!qT$TGGZvu}kHtvWe>@bfh zBbe0OW0~u8MjzS)t+TaLwa{D&9@`*p^RRIj=@X2`_)r-}{q$p-ivgJX++o1Gw8dPs z;$^qH0CHx7G_}?!@J>|q&6YAXA=Sk&ijWLGl$Nh$qYm++_>L3XC{tnqZM;sef4mb7 zP&VlZmmBDk32DhLol^|cwrSO^&tGY~6U7KIgMWL_QM0~CdD&dBQzCg`QyEEHaX*fnD=|p8ed=VC7W(HaF4GRe|BtehxX4`n zN$Xwqe!xGa$w^mh?pm`=u3FQ`D~tT4_@LM)k00cTJoH|4LX96c4i*Ib-4sF>M7{N9o@G`mg%1XzJiv`X`~EaREFp zd&|G^zmbZ#>iJRLQ83DExuI4o%|5U81t zh76Ibc(e}d7T)^f6=RH7ei1x)*r!mHt4VV{L6l58+J2#hu94y{dbfEOpC5nB8vjSQ z8so>rob%nK_wm)ID)iBn&OkQbI;;)Qksb(k@%qCnQ;*UIfjg!!Tva?lQV}6W%x{zj8D9IVup1N|JR6GYdv((L`w`7XWrM0o&6RGn~?kPDiI`8oBx&d zB8-&pK2Z?GRw@&8OS8NIIHHH*5SJ^DH(8PmNoW0m5&%nWlAHOn( z+ASA<%^$^|@c1uyImRQprGGbm23%|Dyt9WS&*jEbZan6ucsS$kVS#4|PHB;SpUhO4J1UfT!O z`czEM#L!>3)g7byUF~uw*rL@WGyu0uFS&5|cOZuDMuMx;Z~fS72Mt1(N=^c37}8 zzV)T2f2+w}NX4h#$x_*SrnyJ`i*TGSWbLc=h{K2A+on>f>iL?B<50!W%^$PiKrsp5 zr?|)lZ$@}}QUD*sM4rqtaxI1_k@lapz$vG67&8&sQPk<~6M?>!bSK$G z1h2mP(}~wdzMic#$b7f-#nJQLow9a=EP!>OWz{=q_Zn)SJfxKAlrzeDHa5L>0tWzBfQikyXr8)9(rW%HaQ@1jJ!1)DO13vw%(qf zL?YFA)-6^?#w6u`>W@d9G6qLm1wxuq>ac|?f7qWe2A07kdV}23wE4cUWvQyN*5a>X z`)T&@Z!71IB|V$fim%dVOvkLMReM0F$+l&YHS0a$azHoq>56Wz!I}3HTppc#8rKgE zUlEDd^zBa$#>09-eO_~PJgfKvRj&Fpp5(OzZn#&A4Wv$Scw?6J8#4JDI8So=bkX5g zWYhk&;;p^yHaLEXIm^{QD4919TLJLDn8;oW9n5;|VxuR7W1z>dHl>i!#my4qJIY+@1P3G}nc<>55NfQj)TwN{?>c4Ptby%(1R4p^$Tzw9joTCfxM zCGelw^>xY%7%J7-U=;{rT6E*!afB`5 zf2dhle718i?DZL>dOS zg%~j0>%UKUFl^(X1oJ5mFp|AZ*^yA1!|tCCO1*JFLQj;NTj1VEsNT?9*(uqw%^F*= zd{`*X8F}P$QI& z!`H*=nQXd1I!#-%0{cbxvLtS%kOkHC){SdAfMX;7+d%mBC|B-I=^d83Jm$(3H(cnK zt3bt{hTQor&^QN!O9ZTqZ`r#027f(_4HZ(WS2ahM&xN6UNhjZCn_WkhKY0r2RG#y@ zt9SpPx;$Ti{_IUQmGgj7+iJUz(Hg-qe)gzX`bk!P+Macyf4)0)g7uwwRGnd86tA$ zo^`B*y*GzTtdz34uC=eTxi*_V^+gRz*YP()$mc~ws9>_BoRP_`d=djpg?1-6nv;)D z7zkz?R(yk0%g_$3I)%X@BC}nX$(N<2Kgm(r!?}mqg4-Xh=$bT0uPW8;#>8&E7w}PN zwALi?IQ=JVP(%K;^vu$9;c}yOJcx4M;o4X54~)jDhEs3DdjOb;5ugh{`}de~)%{C( zB&*EH^<9g(?8|;_O|@g~p`K&dO{}8{(AWxT>HR3T~L0dgU!LWd~7zom0I@8lDW;OJDuE(F+F9^Fj<<_tl0_-zF z@=hYuM{AOA;L7p=>f6>89%{cZ!@_0#bi*E7o_3)=3I@yUANnPJUne|2*9-yF$~vTm z@7vD;Buyw+_Wtczw~iaGG4pUfIp`AyNEzW<17o3D`wTtxA2>LIRXeA~OMk{y`p)P; zeRkNR(?n}muPa{gZ1PZb+u}0+=(WcGBl(LYotgyR7}*JUIKz{a!4h`@5Tg^et(vWn zP9+RNg^Yyq={@a$R#)XQl$O~?%(Iwe=TK9E+t-`D#+rSa=)|2|IDVWOR0%Ye56(_! z?(F^~M#!}!F?)zPitLh*`zWQ#CoY3K_hMV!lj=i}sB64Nc8PnSeP{N6svDvRRqfzs zx(f9b2h~nf9rVs&OApKz#73QTK~5jw62#P3`5tHQ+at#ZBpW^?>{eh}@eYMqN${8l zXNY-~wdy_8*@e>=7RM~+3v@PFaV5UyN`N|yAvdLbMEQB-&^G>*5#cr7Ws@2|V+Jd| z^g8|-iQ$B0WK_ATOj()01M~Z=+Ckv2`KVg#cE$*Av>S8TcuduiuNeicux$kmG=(T$ zhyk=SX^5ti)V&q%eLox`r#K*Lx7!Mfe7WeFbv!vf^goKu#F5FzkK^?fDxutAR6-Jx z95b`83YAdFk^3n3ea)>1A@+5jL!>3=+;h*hTtlw8Z*wyn#vH%r_do2}^Laj>_xttI ztL6f|7xtgvFy^DZF^^&|g>htVWw0UEFiSjPv*#?c4@V<$)|2BuZXhk-5V=*Cg(oiI zz0V*tvEe_K_c|i;xg;vj!vbIj-DY*yL8XAo7x86<`8M{b!dyEdE+ckw zzI|gU>97F*OezwVoO@cq-zz;$k~(a`>G~_aIO)lr+MgV>COGxeJG=2WRi~|STgQ$R z$`te?J$CoSu^0+>M$rUFIQtfNDA8aC*K5VIaBFDH!1Kll+OF4lV!7yIvd5d*DL)J< zp=-E?ag&7hsL!IZBy956X-LKmUKr783 zfMDMcaOmWKLB$|HLQa2X(k(%Ob>#K^mXRxdxHLCL~jiQXl>g~L{p6_m$mreXFV_dgmlR}4qY8( zUF>Xt@JZ|B%`Ix|QQBN`Qq2JI#hLpl4?v#Mp=K_Gg|;_)ew=aWE0mQGJxk@?EU@oV zAMJu~e(zM@x=X3C(zY2F=-UM(vAT0kx))FxfFcNp31;a8&40uQdbA|iU~iAFE_pEW z3v@GCCg|s?!?NFV@IA^FD>5*9zHQJsIm{OnLf$$u@{=7XkPa-hIL=#eohv*Cu517^beY0o2c+J)J zZPkB_`C^}{%6e6Ra@Qr8f2xIa5Q|OFD!O4-u)lfY`pxuaS8qNHS+6W>u$Z%VtrJKD zW@p?G{aHUZh490IAUQkU#hW;$;kdC1K`>})J|5Y4-B3cwZUOzacrXkycf!5tSJ#9| zST1jS-jTt#}7=9G3rl{F%Sc7HFr$h%4Ml6N>Z*^TR&+y+8Lk*BFS z6#>QGcBE?oa&7~3z;vX=MDFzW+Ktnz%1#4aUm$S>I0#F=da(iDquHzdlY!nB8=wt2+XnQPt6If+> zv0hAe%jl-v++I@Z8ZaDX&Rl#k;$;u!+f%wZ=7U8Chq1w) zNRziTH)F@^XZhz9wkcX}2aC!hVHH8J$6sl0==k9c6@rVQJAlijf}VWJB>0nU!lD?t z^Dj3nf96)IRj0K(B9a;|o>iS$+^E()Y1&eMu0kUUFv9O`wW9KnrW&o8!9U%sJ!E7HtVunkkg7^*=^|LGF$MjbA8nhv%p$F z^OaXopkPAZmA4(z9E;73F0jg_`;~= z$GO#(;-Qe7nm_wvgkk9H&I^;xuVk}hhFO*1>NLKz3b`hChNGU^SG4$rS@C3#f1C1d z*1od?GT9$umjengc5X*3)DsY_srv>19En*kCtzHJ7u!+8pC^=70vLIJi^-gBryNhg zd*{v)4DQz~@~yW$9Xx-ewtx_vzh^qqIkPb}BwsA|?w#-AZs^MA7JdMS|G5o(Yc&x7dsz>i%arZ;(s6{bBgZ~? zr^Jd0XLpSp6@cqmstH}I__I8P&i$Qlz1W(&6&YF``l8=`L5J#jXn*qN{k9nSb0>^` zd!P?1$ptxGceopVyHoSqol$|zHE4{W&Pio709>8_P6@T5)Ft$5y87I6m*o6a4E?O8 zn=hE@fBd3MjkDOUz?vIg)H6iLF$H2NiTI`R3UGHzsEPjd-oe2KD6Q=5AGa7BlcsPGKZ|^*_WoU~8yaJ`I1qbRNZq{E?)Ac^< z6uB{gi06vnM*($wRVAic_+@|B9!;R(m3gZ0VgD%4ERy+mE9RBDI{K$awF6LWEuiDP z|3xzhY+$8kN&``RM1QH@l+;LmJB7Bl)g7*cBZCm_&E=@>9)(H4{~3jlh#%`Dz~J-uf|3@&%Hf%$=Gq* zW;7PHZ?P7!#n^leEfGB=5ZfOD8R7NALVylRC$P!7^yct=27e>Z6rz7WYm}3(eKNb| zy2(cV0c4J+qx@IUfOX`Wdv5*3EG1V|D7MuMhB|VxLaWpdTx`m6IgHwh4xWx=y8PQ=k{4NeE<4y5kBOh+t3#sF77WRXOE3GB0HD}2a zFW!zvvO3> z`~%U$KbGLedDwDu=Bp8{(t12Fd!+W{x$Qk7NzEmnCNB`{6#V^M%GB&)w8Q+f^jKf5 z0fwOiu-kx)H-m0%Jo2Vd9yE~t1#T7(u-ONdSXkxcCtw>OBcI-Np0J6lT;DXavO)=e z(@c6CDLz3+-vRZ9!eyBkPq?|y3A_P}G7~X+s><7T9%a!+LGDe99p*7t()&RPO7%kf zfKHpjmk9;V1jaO1&+TrHUI!&ck-)!4EY=nvowMUtXw+eAjne1YSzwu05wgQ0iO#o= zNK*PLsS!B`2`XBq{))x&rtheKIlOuQA5;qPR2!_+zN?$~(D!*Xt{)^E{C=t76sS8y z8JUU(l}H^;U0z==RR}rQ_zK=X86Mvlu}ll84)Lmp`yZ{?EADAQV?3FP`Ar{~jpqy>OQt36bS>m#lF1 zoRQe)Uhz%GT={7Di0|4~EPW%ArqV}tiD4pNJ(Et@F<>37nJf^V7Tms?Ebh zfJny-;{SQa@LSY=RRT4%wu}%EESa;QLiB=l8Yun3U06}q^xjrHa*9%Ghs4YG+LWj< zU~sBLh#DhJT1O$n0<#h3K5w=jFEqQ>ZdH%;C3o{>U&Lo?^?9UvXp4T@x0|-AAfTm} z-qaVU_jy_N=wY)$L_^yM{J*-rhC7;SNQ@0lAEFNWUy-B`aq65x$rC&68@3U}!!w*% z$-UR&shY;A0EvMy@H?rXBfqu%Ep$GJ(||}ow_#5Sk_Kh&&tHCPWeEHtp=7he1GTx* zH}X{WE_Yk($ma^o2XqBWD5>7UH!$h`Te5L9^Tf_Pi?^KJkCZv9c9ffa0FqDPAn&DX zwX3kEpc!^#l~I#!tVvGifkOCb%o?YJnzm(rhf3*4A7XxLtjp(c|vf zpYw2_mjD!E^n7W<54M2=m$94U^@_orzfB1>AGCMA?34kbk`O5Ow!wpsYWDJ7BiwBg z&R1A;rbsj(dHHr__kIdj!0G$F$&WGoM$h}xI#uFImzy2UwGp4Qo9xb+Y%&zS`y0NQ zQEoKV;KD|vIUjO3yEzum3~^PTFE6v32WE{j^Xj5FJ&Z*iJ~@G?z*6S77C!}A;gBRR zsVIA6#U_~IQr7uP1R%dVWtfm!kKA#;KRKL#76{a4l%ck}XSS8T&uFk@Ybt;GlP55Q zr_=U#qOuA?mpBK(GkY#bEBxb86|1DO&9fh_8}{p>e*lm5>V0LdG0qFKO+`KFcQ}nKPc7gt$mozYWEmkAR#^EFfr}I~gShb7Bd?V>`Q`mZAH7s+ZtC-~8T5 zS`*bl^)oYRVI!(DXTCE%Zo5NP0F>7}!7w{Ik*!&KYYA$3Hn^jJ{)%t&4~QTb;*UrxNI0z^$whnj)!C^xZ8HF>b`Q=cVf zQ2{IKm(C*vH>MuF<%mg}EE60@(y+#4^qzAPJWl$??1dWQPw}+%ePIAUkr)@i!rZ=X z?x?-xK3bcb8b7kur;{Gwe50wnkUh9a_uLX(gi-zx+|24Bo2+ms#J{=5G2(TsRu;Vx znc!PvlCC&Q@^`If=Om`oWUIvNgf*{;8ZWjd?@ke&=i{{=W=#< zyLyKWz|=|E%-0)Rzj~;QO_Mvy6)A0ci+{Iv$AoAJ?-pg7loY z3%zurprB8tuFVp$5??}p?#OwTn!f}_ozF3|`(GD{rYr}Q30Yf#fUT6q3S;S?i}%pp zpm!)5Glpij3(8wEMTcOW-A13okEwFqS#osR&R^w*9dSEAqDpUGZ4VSS2i~5WK1&s= zPI^8#d0(8S65LiKL+!3ddc0sd>*?=?*Q)KEey3v8yTmmVnk;_Hh&TPW^e@-Qf zLhxw2Z#cHY$o}k+s{2sz9K9LS_QR2Fu}0HKkz-I*d)67V7W@;{v$o2LLh9IX2=;zk zMnbi?x4_CJJ-3g^yHz7xdI=4mn?gD==Ea1!KzWkMtNDtv>>pvVKk#a$fq1k^zx0rH z;6ZlC_q+27f*-U&%GX?AdaugN8#lrZ2F$K-O?gKELayqqpI(R|wzmIvw2Qu3hs!hZ zgV^@REtcDQEl0^0H&f+}c0bvljr$I+IsLi9{oJK$N*Wo6%$0HLwomh%L@-aRO%289 z&E7UvJD~hN!+CsWKF+IMtiY}*>pIT?>5O0cqp<5mq`r^DzUiAM+ zZ|U+c6)1}T(mTfu6D(-pXMiBG56z6EEa_OJB--jC7k{(fB4Q$h zG3nFOe`d?K$+1BF#$eI3kGRyxVUYb+A7PfY7=W8FkNMJ>43w>SUTHG%J+?=YK`Eh7 z&B0^jeG=m#MZ&V@{!@Ow;hqEgXDQwA|LCB|PX7Xj9Yy~5XICRWq%XZu$DkVLZYEZ^ zU2jx+v0SR&Q9=y5z``5Uyu^Wv^#zxb2)mDUkS33Iw}uvL zeS@sfiJqZ>g^y@*(HRc!O=eS*#w zB$6d1KrnVNxisyz#~_KuY6mMveoP2c^1lwf*v75kW1(f^tOJD44R`tFrSlxWdEgAJ zeysf2GkfBMJ&MdvKUtqbxOp?cSG~ZKd@T|Mg=RHaK)G&cQu}9-t?g5c{?_HgDe9(q ze{XO8XndjIoopj5DH0oS=;zwRW!p2^{PF)>ktQ8___u#T+K=5*mD6nJ4&3q9gd`y+ z6K-G@sb_P-J@N>nJ9B1V*5A>-kpd7YYSt7xaKp_l`I=wm3~k(+tUe*P*yE^`OHbQR z>w3Qhe@MP{_Ib3O);;cgM{0`LoL^qMEbm&T1{9~z>R0Twtz@_0Isulqn0Wsc>XzuDV9TMc*LFa9m& za8%oY*%%V|UQ-ak&YkQP@KhQ?CXt#bO<-B&m2Y>sBTom;x-;9bM`jn8f_l)XjkJs$ z^fGLLujG3Z!eqw;I;7mB5TKE#Vf4kn&R&eVhGL1h6w@0>(2*Hq%Cf>u46pFLH@k8c zHwSq&>#%%f_XysiW53#f0j#KPwDwqJtNLe?XX*<6=>tB~6X@4Y$1Y}hE12O(rshr? zo45L`v%E!U$6JSOg|oSfC-x$>-fQ^Go<;NQ4XA{E;m-9@Fx%pq{B&4$J+N(ZzvTl~ zlMxb4hgAJ+Bf^M;Thv+#dpbC>!}&8^KX2nzMY+qH3)UE`LA?c+c?E9Br7YuVfZ=J> zk$A^0r0u%KmJjC{P9MM+gJ*<5SwSfWm z*HP-CN0-Z>ARp<{)PfuUUS(m4Jora4rKb6kk}o)O=RJO0t_=O|`Hb=Bezeu;z#{;Z zlb{YE^YLEZ{+H!(s^UD|BtPG~3nmU7iS1c>Q~wHt32f$Sq~Yf^bI8oISUg_pRN|1L zh099zvVJ{%+eX7>sljP(!wfjxsJ%B1^nQHbclpD~R$;FrWTD|Sy%+J8<%DPnYmszz z)b7iTib+UINeoE#nVv&=4X{|n$XOvzSNS*XUQSp32GT)39;XHB;6VCSL!8{2QvZTw z0;9VmbrP2h#4ZBN+|F#p_(b8bu+hF(qAs>euF;4;rwXl@lV=FsU>og%=4&H0QfO~K zQ^(sF9P&_Mc2Jrs<+=wHsF+rHu+oY~t?%>hqN^9Wke8lfgNpiMSi0^Lv&sc~=j06S zRV7&~e`{S1dJ8 zBIIPGS)_2EySHPH{Rl^v--|7QS~Ji&q4ZlE()p*q>WWLzaIQ-@o&qGYUn@GL8O>&; zj+A}eH!b#3B4e{BpGf628NC+*aPcA~c>0qLQcaD4=1*Ib`M_4VkNZ8PYW>U|1=YSM zvwA`R!5*Q1xomxGH;Tal^*9~UX9v+kEHiK1|6yHB1q0yG1t5r-?Hm)P#%8C0mFxen zjvD`fZW`>vGKnjmFYB*}{F3Yu=sIk+lvA{USYz5elw7L5x1N91+-~PhTGObT2B%DT zTL-SP0#4#L2}9U1Mu!^?E>DhDOd_u3h|DtT}tH)Rhgv@KxgW(T<8X{n{ajJDK zL6*Skw^J-J71^&Qg&Js!1=0R=PR!?*qt@EPnium{6m4j+BM+mu%cXm3k4{n&MuQ$k z%gAZ^f_J*Jv?Az&Ic99KU-=iYb$>=A1CJjw@jgJ>5)+*b?p(WRC+5P!@?voV$glK8 zGC}Mltx2s@Mbe)Q7eiIIg8tjVHR(-RR1~T7<&JP!zsYp9WTfOfC&^a+OhO+0l;UbD z@o&25^s;dyZgzRvbR?zjNx#25F>Bi*C~?pI2cy*6Y>z90sF9BMiz*biB%uLA*VH`1 zlFnT64%lI!8K!}5iU5455rt(8kYpjUuc(-;+xXCHh=Q!u+|6N6_a{EtvjwpW|ITN% zr5OGr_><7%&Ahv0pi{L0xtn~PHMK~$A}8UsH<^X+O^jG7;SRUiWuA@em|>+bC5!_B z%G*uubR<8~8I5rEw#+M|7bYK_j)Pmq9HwJ|FUsXV)u?-Wp@jYP-r4@{-uzOe{9(9` z=!xk9dY#hOrkxdt1*g=5kmAdWxfXJpkE#-?v;to4I7WF#m>aFJzxB#Q1rg1$rS#Qh zD1!9z%@1@v;}t1N_W6NQuEL8qqco5S0nV&S!U`F7Hb~h!y&QUyJ=*a*3I3Znkulgt zLkgEIi-W+3Dt`Q0>ZD2X)5{2R%b~ z<&~kV&MVOzRJ*re+xa_tpt%zn=O_InVPcjDfMKY8aMKc}^>h8;K|ud;pr>2{=mT@# z=c``W{y>Hrq6*RYsv(rHYs1FKEX=)F!ri;F^l#o~LzSx@1{H`wX(z}#x;x&MHtGKM zUEETeeHFrSSNU`XoB}-0c`phf$9w9Oi|2?^^4TQDxs572bFIljk-=f;2ghB|uJop(>u&NqnK)M$#^SM1+7VpJ~OIh4V> zWdZ;K<}HxW3IaKh-k}tk9~4%P<~~_ev4K^OV_e=~%?nF%xHP5AHPkl%%H{Jk#-ig5 zT0vwAJyQt~nl0SQQtQ0R;&FXCtD0iNT}6B%z^Tt%v3rG-q_a!Q`(<~!y~NzB`8@5E zk~oD9wqP=&JKv@JV0>TPXe$#L8imd8nDzFqC9VdDirO|by#Z8{t3zm1zMsM@cFKR@ z!w|ywNC00g;4}ZuCI*V-b@~JSHp+aM$JZD)mg0HR10X`vZO(8PbL33scF!2=c81s9wKs9LpXb~hB)*Sfm*o>q8PXrg%egSP* z=*a&}&^0%sX>zumYkOh3i9vqX0Vn?~g!bl@^xD_O|m3T z{(+5m^d89mPrWc={aLKiu_kI;nhq+rFLg6sD40%5-SNHYo)Px=nxM!X1FbGiD!1Q7 z@sWyZfcpAk{fkKQeSi~rQKC%6s3_Y?#P>w1YGbTBqn=aXfnOQ>j`#N3ztP!h$$zrs zK4fuKjj0HN4;RG>hxovEm7~VpgtbYg4X3G27_-6o`2N#2-UiI33_j?KQy}cPd{{~F zHZTnZ?HS^@Oi@beg<wgeK+@Qj(c2AQK*=;(R>zbFiuFD8+ z)h_?wL{G(3m)V>~SY@aD3w&~YR^X?s6_-o`+h%Uc1fqQ5um@OmBw=8#c=}hztQ{f2 zfb%PznkRR<4o58q3G3DarJem)Frz(X?s}PjspKh^tukOKy2)5Yx2WIUizC9j^ z0Qk&WvlG+1FuY<@{QD*k4qUP5L1sP>5J;`GvQoGqRz*{IFKeKpmwa^vE8vqP?E$9ss;JvNw)tnyPudEpuEZ?Xp zQ;c}hbN8$~D|%`_vx{Qu9id&*LaOoqllPdVTS6Lkc2FWf4X*~&mZ33?`BXcBu8}b| z#;{)*)g=3@>SPXkk(~pZJtKUzx{9cBSSfQ2ZuhnO9N;J9-oV`7>J3dD?P%4!Ybwal zdBC^d%?*Od11;&wNdlqScLOp z9%0h@#9iL`S9_~oRYRib2|9Xm$=LY|d{7`O5BIrQ(O~haFYR}!$uS`0layEZmNxqd zQ9iY>PMs98#T-;Pd3e2o+s*41O#e`#n#TVcF37pIASh;-l zzvfD%=;p=|bQlfD>_B6h#NeCiK3LTP^%!8&Lx+XiZpr>QX*HzS3jD)Y>OA&ujY2`~ z$I5~t^u?1!!-bp;|}oclkBmpMlL>kJh1i&r7zjAp-4 zRxmC_vTIPHzu`6G3|Z@$jRqs@HLsU4HdVd8o|p9I_#_p*8$axVL`Rw%?xKeUj}wX(Wm-WeKfa!@GvTVc_T*@B9sTp(BbJ5z z(M_?oWYfd z0)Lh7XmL)ZYJ-dB4ErRh8@O4?GMOiL^5{cP<9$FuuLtMxK?5Gixs&8X!hYc&7gn7L z*T)x9FW%58c|vuVM~{4o_#2W=)W`c<=mlKucSE$R#6-dd!tLi)DW*}OkCG?nF@D1^Q^*gY7F*9|D4?2;rwW8SbK=XSw zGd0?P%Md=pALzrfZY5JggAk)mSa)x*|4TC!;bQ%(rl})WW=8L=|9L|L^{zah`UMY+ zqn=K_F-uDkW8a)-o~4-ZW}xb>z4|WmSi(372!>ldtA~wFh_JAg1y@dB6s`G}1t#%D?ZP zKf3(NZo(%u3uA^`9?iz zq($Oz>y~ohVB{D!q*O1q#bO)*!12raUkXkJTa3PWBox!!cX-uj-jQ1S|9#wZFQlW3 z*GC_44a)_YUz<~2K47Cn7hepu8@38rd*S3%R?*3)7&>WxgX5M!M$?rHrH*Ye1G5LJ zG@>s!1wVzbx0T6sJ<;IFiXR=>Nk~1vbc|{ou;xkCW0d$={m?Il>gdDWcoaJi%G_CX zb|8P(-E$_B4)n24*H$*|?h$lG&MyZF@k~Ni9psm%W8K^l5nIL!Ujx*?Yp>4dYbiWx z!vOit!>2Z%)%UJuoiMuX@c`>#02p|i8rwY5k4#DpmUVl?W3*Kaz{5dBXtNDVue)cT zp1Pag_2Z^BVw85>_NPlycn+_u=#^TH#>tx@-;-*7Z~Mv@$X_4Yhed+?JI06lfM${H zuTgf$0bpogC%u7W(nyZGQh^)^+amr~Std$b7v!G88Hvj4+hXI76g75r2gNNRZSO~s8Oz?+-^DiXz*L{jA08lxw z{xb|Ob6X>StG=tg{g3j>+CgGfApKxee6y!8;yBCWXc!~dYj>u55^cE{Hi7PxJIE^} zOMyazUjU6ejV5i)LR`#nt_{$KrJ2WE1Q;Jz6Mlr%)VfZXa zQo4!*^?xt3Ocdjxr=>_Ku43WC&~&|+I>JzbR_sX$S*qJ&TJ@X%r>3zHtq1#!c{uNP z?n{4N{m+(y8Zu{MPk$VpssCj!W7VvI?MembkC-9WOjy1C<6#JfWYGq@+bpc#7fDfy z+C7H`!dn@p-GU93U&Vtj{v0((I;oa%k+f;7P~(I^V8*JJ5rv|SPs1GGgWL98dEAr51r9R_=6B8+EFbCqU4Bz=A9DKBto}4fE;-%+5?Z%LUKL{=Um4b7a9}M3LJs8$ zRDvC46$;8*U`Q!RYyC}vpa*{0u(mR4+1Auo zO1hVwdg^?Tm0J)W@PdR03|R#HM-kbD!+q$kIaJ|(Umy48!e7T&;^6tcMQXSqz|rzu zb^(edLjA&{&X`UtQ*(JmV6M#8x9@*d=g8;l?X?yo0+oiBMppjz$Yk>z>eUO*g?0IJ z)Vz~O;15_8% z&)(6#djNA+U6@((8;q$MTC`*XxAT+VI;UCY-1 zlDhj9fiJ!rvjw*#NS^b1EuAZ(0oq>B@LLuKQLxcoivB!L-}cH}*Y45atw*VE3wQ{l zm-c=Y<4pvgxm2A*PoP(6uKoS4W1yIuR8$woW<}i8e%cheYtK}tKSuU=WplH5cWbJk5}n4$M*MZ}%ZdToe$4#-h*v&qT4FLEW~5v&S}HZqxLZCWPzieZt0~zEG(hPFN_@);v~ya z5npiwsaIS)7g|rey)|mMPN|CbW;C6`syT|xC-PJ0U?3q)g9qVPNca(2zr_)Q~oSL zb@Bw(rncVa64DV(wvMln57hPdp6r6$PGcR9QXpwzx&iKB$V$A-t0I{QWO4Tiu+s1ol%Bnja!|^p_73IkTrzXct9Hw$+FbfifAEHqb}d zF0*h=>p8WjtD}>_;niD-e~=Z5ocs)D$5B<@%q#YHlkEbv9^$SV{fXNN&*sSnIZg33M3z*(H0A6bnWtmbX?wf={ zZ|4uSjnot%x`pi$pPTb^m1lF{0NC3*TwAfyE^RWqln`L>A3MzTd2QumR6Gw1h&yt} z(fiDCSG?s6FgmXC6Mhrm^43VBYoxx1*QtfT>n3@GB)FG0qT+x|0Ji#g>z0SuWJNTcA*bKiQwyv)DG6;R z*>~tVBhfelXnL0`shfs`B|ya?1##dXx%t#v*`nZy>-^Qwp}=+XGQN=0)gl)y*SY`z z5zse2q@G#p`eqkI5#f>eu`q7ilhoReJgBYI(-HPeShC!CBR~Cb<`h8Gx`+iiNbwYn zn!U`68@IbcT2sT#<{Bv(k~eW5nQQYvSpJ>##fH;tV5~x;N}p#cMaoBXI_r+Q?xIsW zQQz~+1?S!(Cm9`jc~+(ngNm%U^-|*fOV#uTzQkpG(CfpTSVwFA%=*f8*g4uNC%#q{Y@syywc)6T|sgr67xd_PDg z2llz|ZI;9~PZ#)c>$!;cvyI+Dbo&>QovpB#fZVDdJxj5=^FhYz{(++f?5$gv9RAVB z1s5O#D3I%24m8nf07j{nRS!QP^xbtP=Sb}r1J(dJ4C<$LA%~)`SBo}Tn4g9o8Dvs^ z;JvA9*>jId5IQhkE&T?19RtBwE$@}7$yeSq^(bqCCHA|>_7vhSLqOM_(j}~Jk#g}Cb{&so7`U$0FL)G@H-mg2T>bBoZ{5`zP?$6ILz{U z6fRag*1{*lqfJUlS4rxBFdGy*Y4)~*OD(K*ptCiqHa|Z+DeutNbVdW{%=>!uZF}v# ze4LsjFR=BXwyn8E^6OD)P!|?=mC?V>m?+;aEdMbk-haMT*ZnL%eLa|98uO$b1=&Uk zVodx%s>?a5g&Go98p@Wh0uC{vnX`FN;uLF)c7=VLw(@gl#qmg7>b&-B;d~3xI*U4S zh+X>)QRty`fjS;bobT3$%Gi8Hzo95+3dB_Nt1pO%E&WQiS2c2}m)Xei(6Q=8mVKxo7l5 z;DIF`V_4iOr)-6xc;HoUl7QRyh(&kFZdeRgGIi19_*2BA{?_?Hv(|*{*EG@>!joOJ zU4Z&*GjgZ)DwMA8usI%zWQP5^p=|#-)Fj912anNXodY^EOzth?6L-KHQKk_5BmRU5 zqh4qSd<}GOGoB!*;Qg9BdYN0JrewZAQTj}u(+7q~zcKF1Sq<0vkiQ8-uSAn`x6wLB zZ|Q{P!=y&Gwf8V@VQbqbHuGg6gYf%y{q$Nc zAsF7D#3D!klb#n;R3M1t}lPEqF_p##CY8;L*nz?iQxQ zy%j%*e>eY(Soipek!6qkE;B4%U(##aPSipBDdXMhURL67X1_AP8p)mcrO@1cpWijr zbblb_m=IYt7(doDwo7AU?7J&K1Afek2SE>Q?qc59e1h%zpn4wOa*OB7N z5Wd(uZtl4e?2w|%qXvm;v|7r|y-f|@cRHdj=GEFV%aC_*nb$YTF%`pCkl;SbMbVj* z+K0!#=2$SRE()R6w$%y#udKbB&UyshtApQUNOeIQ$Iya#4}y3nL~Wv76#hW_O#YB) zl)H~2#%#lgbfHKXf57x&SuDB^I^Ppk_-V9nAY~i@Nc3`Q6ica&%UJ8_Pp7sa)mv|+ zI;+SdZE%fO>RHo!ewD)q5Pw53uzHJ#G?qAG;;)QYag|&n&WNVLEq8M)LkUCM?J6BW zgfcwAoLNTbhoRH1*NM}#X{^L6#nYdxFHb&$AOrt6I-uFfGAQ3ns?l;e$1TP>UVp>+ zRNR|k->hmP)Qp~*-0O68ALyKcJ|-RF}5c!7QOj1 z!)pEIE|o>bLy?tg$K^1!)A!#+v$3Wh11W4nva0aJbiL@CvCu82qvW`?a=~Ud$rK;( zKL7b%&@M=0AA)}=spc}|ckmd6ARqM5J2(O%)SeKdN31@B%8zxAjrcA#W&O$bGolv` zPK!CE3Y<{Bct{E|I-KM>7>m%}04orCpV%!B>@e#<4t$csJ%7K59!@2oQRWO3ph{4Y zpL*ygtnkXVi7XX^HUG$r982Xx&P?oFI(I(<##ff_$|#rMB5Dfp?Z!Im%rA!@c(G&C zqlqyMXI{&ny9$(58Ib>kl0oPhSOy_w1tqA8Qdxot22m9;*f)=jH|}Hfkk9G)`(&}zXemhP;u#iRbbn(CEkZG{%O)l)9A*oLA4QtR48{f* zeD`?lH2VTL2TUG@?t>d$Qf4$5J75B6g>x_H;5Da3!v2EZ`QyC|DtJX0gnYUA@P08+ zA>Lwvv^n$dgz;leMYSBkKyembhdR8>LU(xL8ssP2pggA@N<-^=41Er1Q&Mkg&JNmV zMS2|7Y`u?Z5DTQIP7=l_>Vd0M=$EeV?}iU5lQN$!{oAXwYKZss$j@vVD{N=L%KXxZ zH9jyR8oL`gyM6eteZ#_fonr31&x$t*)}o0!od;FjJrw$ffrcPUQA&QSE=8XC`CL}a z*u)Khfb9Nk*FTLYMq%|>Hlu^@aY&4~Aoc_S4M+buy=f%yvQWjrt_n zJ?^~OMBd$2QGi7EbpN=hv^SQ~ArZ_*K=hA+XWwXmqrCM3(E5O3gfz~o2p-VTI^Sxu z)CN*W8d*@E#6=>0NaqKC<&Q0m2{*9xv^z0&o-Yx{<*VY3P#?@wk60=PUQ|Oiq_oa3 zsh;r=u&HWq@O~g3{_vb0sVO6LS3EjvBw%@#cW?Uz^oa|FT+3$5|!@jldE=)rA}t zt=K6TL1*_v=n!Xk#SvCxm}qGy+p}1@J{}|{_v;D|6n^>vQqPcn|H``M&vUuFM@q*$ zr&2>jh$kqK7n(h*jLT_Xv;NArTM_wzIDkURWD@M)C-t6t&c}q7d}mk3+v)egh84EA zXe!!+zuvd2$npo*58=^Q`w|b!kxf6C%#HLXAe~B?RF^15i8!FhVD(@si(v?OUl6r( z$xaVL_dX6ngTMHkekC8E#3Vo3K#93he%>y%)X7G$kZXUEw!YZ`hhw2H{fUz>uH_gf0#5L>%OM|Q7uoV z3sej}%kN{P*o}B>66%*~4E0^af}G{$j^1kdgjRI&LNXrjRS|OheLTVj)*XR(IN7Dk zMf2QPV0WmyT_sF%0vc9v6Coz>SQpT&)tWILr7#2T6Z3uTr$-&?PID!&j^0ql&7fzI zpj8v;RI3rCVe!fDVUNdrrHJ!J_5t_LgpHY495@vk7l)3!eS|tz`vJz^kD1pQ%1r8T zx=a|bHkBbu3kIZu-HzKMeio~DOxl?Qe%)NVTN}?lf3L)SX3Em2;;SSF0QB`AiKX5v zb)HbH-3Y8oe*9*gIc--$W&kC=ImNotpFix{p0#p%(f?QgqaK^E(+1nR4Sz*zub^3k zwt&ikpFXKp2DQpO84Qt2II3YC&%Az3SgXXj^8Vh~g7E;K%S6W!%Sur$#;Q_GX63(G zffX}6g!p%=>vP?N?}BJDHsQd!D(mtYeaVl(>tdN-jEn&a3ve!_tS+usv{{S~#ZuI< zf<1@#w+CD6fkAr1d#zO(+h6)u$lN%D*r6d1-Caf%#`eU_1Xh= zzcf_PGZqTkCLlKFAX!{SzdZV$W?)bO>KC=og<8fE#Q3Seuw%|G5qVTG@q?(qlq^(7 z?7eXP?D(2ZGEgufopm#3ijoM%>;J+BD~<~*P`mt0QJQ+r+5*;Nv5vsWviB%9e3U_T zEV>!ml|f52%}U{SEX+K>8(zzQa7Y;^FG*P;{W!p{9Xdiy*#!8c&yli{Zq1pp&dg`@ zeeN<5BK?mox7Jo)WqLVY=ZTs?{P9{4=QB&kMYt%~xH+wR09^4y9+C5q(^N2f@c+m< z%c!W{xLvCVh?KO%fQo=fi{ua@3IYPs-O|m_44@z&Qc6pQl;lWvGvv@PbobCb0cZc$ z`Ebs=-mfe^Fq=Kk-p}v3@9Q#{4VS*D5|F~H0*Afy~Bs34R*iWNxn4Z;F#|j~) zRvsJe`c(^(iOn^wzbOb7QknE}Fe9Gahc%T-#EhRx{Xi?pZe=*hS;*Oo)^{%jaW2RO zfDaY7_H%#LYcJh6T$9ODgZc(1ut;wYu&jRX@7g+m87J zSlX*w-*7mW2h)GfVk|GIHSUBzI7~(ZgY2Oz&FX8w0phq zko`CTGRiEm4~3iV`&Tk}jVhhvtZYIPt1(}3-@iK2^Zao$HE4wYYGrai5EsOT5t}G_ zET8f{l`^6(5rC&|)r(&x1%6f)+T^=_)HH0gZIo7V%>*fl<@A90h0sCMYFX~8E*?yL zwaW(OJKtuRw%`721&#(z%Hkpxtm{=qErU9#S#Oe~S{DvWjxCQs{elmispj3DiAvwp z$N&fo=Lb_y0%0i=TFLlinXMc9z`d{%J$7m5TMS`&D%G4WzVd{_^9AWa7Obo_e70gdSIm8?etpMdeHVGI18NOi+)=>3Jt=&|H1)NeAvi_M`w`?G zug=GY8f4bWk?TrDV)70YUi|~#K>6E0zvSY(z%)uo1=>H~D{corQ84zo$7^UJxi^k0`4C9eq?k26NenHuEM`o4eiq5tBPMxd?JN=13Id`He^msPhT=Y?YwedHh84eyuC~|!Oi%sYpsooR!mX&fr#)Yd;xA7xV#^2d{=VfiUF}>l@w{EI2 z9TaT@3Ct_l0c-KS-iwj-9QjJg!Aq~f60{63<*sXoY1n-Yn6=mm(<=| zCr0~N~6Lq zA_r*)msO9*5uQC;Du&69J_b*HYPHJqma0fySIpqnEDsKJ6}%v9MW`}Qy49Xu ztYqff%sbLKU@fr&Y#B0~)=?J7x6Kyh-%0H{Kz@<4`ZW+$A3nXH@twvY<7l$Iq%L*& zbYwOWl(U4(?Hzcb(sC_Uv{4#A^|%XsF!0$ztqe{oFkTD+MCGUn^w zkTFq3&aJb7X%f2`%K%7pXs&!vazQg;{)~@fDU+o{?E|Fa@Q;%?(Ty(wQ!cX#cL;CV zRP0+-pwG=b7X)9<_MRX8ftbfIqMCy8Q9D<)`wTXN&qrKDPAeffHv9f}E{kJ_?X^De4LeI89y6UoIUnzCyb}_x7PmN z=zef7?Ys(IyUh_XD~!Y2C!hMTLRa=n*H2XU2(;e&KK+W7Ro9}eNXWWbdu_E&ueDuXqf~bvD z^QD-nqF!{M?LgB#Z-e~lVyBnZl?pY$zfLR&KlM_5^}R~~S_RDmtZ@v__+CzlygxuE zrR_Jb=lkvBOcxcn^Jx9mrtUO)Lz(N5qHqEampS602DEK5+!35aU)ra6fT|$(4+e{T@v5ijoDw3268y_0feWyl!OUh z$5mY{j>{bzLBZNX^%mz^7CnfOA)&h&tk(lrfI+EUnet#%D|R^h9DGGkQ7R5h@=Rj# zw$Dl9M06M>=>3a!LFs<|r~=89R!v%#ged22g=lQf+GWu&=ixK;X~ZZr)>pFzKo9pi zuZ@3FE#A^?B~4Zb3gBhgIfbXJ?)>RCmNXH9aXH(e6?cxVS3aE>w!OVEKG>mvdTIedq~@4&9Yajo zviowKAL8c{nd^ZqYcU=RJ=evVxEm~?35N#y&oeaYO!?(qGHMkOt1hjvfRct6cruZ1 zh)sQ#79S-)`(ZI{;M{ER6}cn$x>{hzb<0$}1?zIO-R*!&pJW-^QkcEJ>U?|kf5(H1 zPyJ?7v7Tg}I6saaQk3p9OVaipr33cB-(=RO3R@1CT)grcmqM2h--!oU-YPkUpBg7y z-%YeQBj(ajAEI@s2QSk{mlpXJ;r|{>fep31IIX6VvDWNQVa=&7jhs+D`GZ(NYrTsYV%0w?WKKurJU?QSa?~y==P&i7vJT|azKS(WZI4f`LAarnqHjS z1NQOx)h;sPV>JdsOX5x4?`e-r#4O_~GQLc+CF-j(C)_<)9x81C@uv02ToOwOKjsmtBE-Z1(Q+9V z-k6udyj~@*#D&V~2#F7N=Fhj%^la(YOOG1TbcEXqoOIm)&ge-__{iO7xvOtcU4G-)|B0Vjz zi`vOHm1fpjh}w@8fksK@g~mbhg0rco=^rK18H&;20M_zeWg6sq5b@=EeBxue^rnX3 zwjFVCKi~~Kew9q0>kFf(4~Om%eUj-@Iy z7e?RP3|~69GC+5oauQ$)kihh#cX>}%RdlPPb;Qfuyum^Ac_mrLmh|dX{SwL{^MlZJ zG}m!$#Al~JX{CeBs@l^HzIyG_%ulC`$@Al<%f7}ae$;6!n{P`UEfP~!UG=*N_{8-+ zPM&_D&29bLd5c-bmIDX#o{e>`yi`T9d-=yJe%3L!G%C(nWO-j>b6m<67%(lR&&M+} z>?=Rui}w=`F^q)lsEscI5>%wl?iRpRxbKxb@iW;eDsFg`xK2$>?mY_I&&Wb{vDOH1 zUal7|sNa*%iG{01<@bmHTG9yot(^IcPqNo^S0R(Wo%=Jp$c|Z4|6P+B;JRt!Mk%i5 zuA}MNT+cHCo<3IOaf7{I#(E(S@9ZhHfrR{{-n0Bks^fm#@5wP0AcBnPX^>+MuePsX zStk3vm+pmeIRc$e9Fo&ub2%8kH*VATPrziJ$`^QrcGW@Q2M=6VI)T&n;Zg2ZcmVuo zSmCgxxL?2FsC&I_hy@as*JTk_GE7jQ6tA;j-X7HX)G7fRS$3|s6@Bh%#rGhQ>fYSn z1v*l#m^BGaYg2tGqX3tIQrEiN$|m|7;hQ%~QMsYDTExn=`-qHa@&jM{=Dqjp4!{{g zK^tcNuqlb&lT7)_V}|?$$fAVjr3LmSqg=`uB8;R}GdVogt!RLL!IEBcX)hmT%toH} zPZpl%<spY`w`ZjT0xq5$>hPn3snr_?z@pQ^@%k zG0Y-&WCl7|Z{aeM9B$T<`_4r4IiRBQUtA=2Z(W_(8l3;ufwztSZMb!r-8#z5hJSB9 ze~NOvG(W(Pqv^PNieOYQ_RVzP;Q31ki-$*DRV~WpVy(th)gwduPul!A3DncXZG1RQ zL|$3RgIad-xlSf|W+21Wjv+^=S&J_I(B$-wOjapn?VvcF5y0xSMkIQ~oJ%7&?9+Q*dpTkzS;fJVqCqD4y+yF}e!VHHKgQKhy6H%cS;>2LuvX{Du zf@S{NHD_rER_X453Hbt>gl^qdr!VE2uM}hRGWmIQR6KUW3A&+c2R#%;Zn*;s#|yuQ zm(Zt&d0B#|U+AC0m^LOP`0C-jM;!$_I)U(Zs3$YBBVbn`u04 zgA0q=8`5Hl0}wVhG+A^mr_{R`<5o1070=%owB8~ULnBS!*A&_+EV)%4+v~(1y>oo8 z8BBaA2L9B(%0dq2*y@a-%r1CBxAA>CgZs5Abw78W*VoJ&`6OaxzJOuDL2=>_bYjKFdF>Q z%U@KNtf_Qo(V=2)+fm&>_u~oO;(T?}9NLvI$#-%$Q|^bNgF;$URK~COsbjkw@S6#U z-V-D~(z_9Rg_AD<$Z=BFX>KQ*N~n>{CO1;1-1g{916v`Aw?W{~hTrDKA7VSlgP0jg z)C}A@zMHn^^$6TRnX9A}8lX>!i}6)|lW)frp2`u(ZtmSC;cJ zJGRzSa2mny+lJq3^#{VcVj3leHn!?xK%RTq ze=z!pD%#C1(Y}H6*6#@w*@9R@clMC$Mk=j4KJ85MS-%DDk$3`f!5{a%NSaMG?78_P zup4&1ufxDMi9Vv7zL_G5X@gAR|GM}=tu7aMj&nfPfh)7jT@baicjni$50%eb4tPYz z;5c`0g6PswzOl2|8p1o!`)g=0{?ReIbX(s~ux_;HAWqJp4CnwLdjXD&69AiZs%BB) zQ-y36i?9y2bOJa!vZ>zk`8Eujd|6cJ?uXa1(m?$p-jvji*6K!y&08^Uc-h3*<-)?R zLasj}Ix)HR0dmT~=AB_&i_RI(d2L)byG|JRVPFYHJB*N+&pWm!B(NXUNbDql4tWp$ zli7OPc=E}PNarg=Oq->|xnMyU&(=R*nD*Q>v!DU|QjLP@K z;wBbbhRM@~Ld(6bVszMn%|~^eFSo!9GooT{Ax%kpE8}W0cA|4WwS#ynqro&oBQN~* z$wByg_FMDg&k)=t!|Nv7mydsDR^kTA?mE#&yoA?hUCo`Ye)2Iz zzh)LU5ifSfU4XZ_zH^bYK|d_+Q@U{O=I08F-_U}-{z}ogVYmOOV=Vm`w3U<|;BlpH z!b#4Sltz3@IS|Tq9YIBC7R>NBx~(8qBrTYWXn1)sAzGPtDB~qNk8|0GvQ5!>aNP7f zECgVcGvj!I=p__0--F$Zd3*?a2(YgmComtj~{|1JTZI0yE+{Yh-2U|H<=pt1 za!V#;1jcek4H}0~paeyPZAQ5!zOn=6DZ>hu#)Mie!wc4E=WUYcRF?x?D8ckJY- z`X-NLb^WbziQ_pFD+sVA;ZM)YmS0y?3D%oeKaUxMwsyrG^#ncv9CpiOgYDx|5xu#< zL8*GDnd*Sge1>Ye-g0etCYM}kmc-?mnKkJd@$g<_=?iO&m{0`ANW6c0IPps6je#|C zKk4$`ruX!TQsr4%t+X^y)1GYo@G%M46RA)xc3&bGCb&lV1y84V!S~4X?#|Y*j_q!A z$=ha5l?sQ>sQ614*INV^vH=y2IwSJ|UenB0SLuFHzy7q#%~{sb534bA$7(S_8x9_T zC}Mp21FgTP&W8$*Nx`O4fwKz!h$FJYPmIgfnk9w;dbE{KT@t@Y=^1Wag-S&;`+r=GF+P$i zZ*Mi+D-q}%H7$EyQ$YiLd~vo|2$=@xr2Kq+z_v6vz$_?5`xt<_GcqydH(e!tori_H z&@cdx4}Q3^{wY*$^$B9b%#K4R!5v}w=?E158of6|H8K?#2f3cPPI4N|R%6sOx!I6E z3Dp`Lb+Bp0^S{w$+<9{&@JWsxb8!* zGoqQ8skD7NG`FI7Jt4&VR?SdxON3gkwvMl9xd4@F!RzW!u}JR2XX!@K`Nf~zvtYxZ z=Org$OJbUm1yHhJcLNA*zN%=Is@wNRG52iV4T=GwnUPdZ2eIcX3+hULWpNjxQhp^6 z>BYCx3ax8CdTZov9#Bgd4G@&=nzz%FU5j}JU~onx$q%bB?F@bKdcHxOnxPOOGeJRA z(@p5_qnb0YQ-bcUvt7AM8gVUT@kXb;RiaRI;Ta6zsC6FK;{OE;F?qKeypHkJKwQY7 zb4*yvu>F@DzA_GzFOfs4M!loE_aP|%&#J; z{xY>IdHOyd<1$wsB1B=<~r2tH%hV zm#B@6EZgDuES6}1!rKDeY|NZQyV$M2A@0w8+Yz~uFv#%u^w+8Jh}%M;Cr)dH(6VFt zhRkW01Bk$`ZU7`PR~C4 z2KHP!S8*T`sW43WeQsI5Cz82lA`Fxre=P?zl^FI}1qB*@DgI)$on~a~M->~>H}ki3 z$gZcJU*js!BRxC`;X&QAl=pPzH>~UNzz93FLagF|=8J(w{(oA}Ec;rDQT8vD{>3R4 zJ*O^ukr3|~Pdi)n^c~y7Nim!h!eh}B_o{Oy#;n~-;+bU1 z-*OO}=k~AeM$o}Lj890V=E}E@^st5;jRp83O{HCC``PvS{A~Pivf2)fzv<=1E)w#N z**1UQEkEG)r-J&2P|+P!G(23P46>&>T|(2G{sM~$IB{P^hxh+Ze&(4j>T}F{fHd~2 zIf9#Wikazz^9&cT6!Lg+!|PclBnWLwKy*+P?e2`4dn+JlUQ;jDqM%*+#Gi`YcqyvW zeR4RedEir*+@)SVx|S}B8X1Cx=n!uG`!sFCXCHY#mqn4}Gy!0-{VCA1SLl%8I=SDZ z>fRC|o_rVLy=E8O!P1**KxCa`Q_<6zkS;W$(XS=(;eu6gu;i|ts4ID{b!clD#Q{)Y zx+5;P&AFgCOSl2!>_^`-dDEZhSMWZv@xg}#a zfG5ElWp}gTW~V?Wj-jab{`A7Yg|K3nf@1}Y^0>)s*?lqVE2|HXT zJFkHmxfyaRl5^z7yoUD+PH0#rD)Q&eRp?bCS!hs<;^$c#PAVzE)6s%X)l3TUhSXeUKi#xCZjuo`o{jql~|_QYx?t=#jY^)7c- z>p%P!w;YJ7Jr{X5;veT|`Ye%G$>N;XFNMrm<~z@SuDHD$8i%mC8_hmp0OUGllbiA{5v-pkYQt;TS7NKO=u#V3eECbL*JL*#Y~Z9kcfgIZ zEa*U<(T5M$Ud=crveZ`3!Uk%N;Oc562`zYi&oNX(Ws#rfifr?JY5?p9&nR=GTIccV z=gsu2OIzROzll$QEeFpIE1_&(wZFoOZ>-?{8w>Mr!r-dUAfLq&?SUOmCb;#L9-Z`$N{`7gi!F{VQRy`pLOu!2Z!e!{|ONEv| zCelsDrh2XtnB-M7;RJ2JQTYkI&~Wp_SKeyj2SX$83^6JfO3LVjD;O@_Cbh)S zHB$pQDNG6u%;spbp?EjG?AT8Fu?Fz#sM;jkmiWtIc?53lDvs4<(=e_o6+QYJKR+fK z`hx=w6c-Kqpx0QKYf9_9Lv`RHYk6c1z}>k{BxIC&dTGHdHgaE7M+h||7f9M-k!OcH zpqW462mz%?Xvfswp(n}e9j>JjcTu3lpWdL7!y;oB z+e@$)>fQ$DjF|TZpubtVgJ@l9NB$M}jUFcQTC?{3abQ+9ExZ+-Ky;H=bU{6opwD`R z^pFg0ycy=?$V{cd5?5A4GUI$)T9&ZMOxrwL4oYH8!#t~%E2Gk0gwD5w*3vg_cB9H{ zn}isLYif@y5fF<9uV5mL><)*36T6S4^BHf0xEILK0McPYeocqoa1Gt2Wd&|dt zm}``dU>_>nyYBf^*3P=TT6%S4D3tg^Y=`Ael{TW;bpCVJUr~- z58YI~f;c@KQ~0cYei${qF=)Xv5sSkm&$riGaGYaGp^GRl%d1Yb7;bP6?FH93;u5MY{Gf$1?=M(_DjtJNBtZPF$iGwPZu1 zrL<*!{G*xTFg1e#*VUNUi$LpKi;V+tl0CAsmz5x~%q(RKxp~C>c+gdt>FbCT(CHI; zRGg=KOJ(s(*}6?PDBveD))0l}8|gOLpD?+Hp|GCHDG~~8 z3z~E4iY^6woCQ-49r#?U1J2TZMRbp)dpk5w;vN!v{+j$gt3a0AZUAg80l8u~rBczR z%V$nBKTUFK#nLt12|-jGYt(wQEbi0?iO-TmHr^evlhae@pR^Kb*qVz8uF`|G2`5&O3=St2N2=uAnV=Q_fmr4uX z#t!6Z8%W0kIO3SD(`}JQ&cU2scNE&z?Q?gW-$2IV54lNc z7dC6L8h)^7QuN>I%jWfj%&+GQ1T`LAeI|u8UldXUVj>5;F$--Zyq*_$>Bgn$-=gRA zj*~3nSo+-%A&t?JLb@iL=JQ7D7!ej1hY{^=-V%0=m9S;Q1$?+o2+%97o-g0_3mPrQ zXJk<{ai`&n`6mUQ9YaheD=qacsBzr1Wmwrj^*n`_J^koldmI-X)Jb zZb0BV`Z-M4xz&0cyHEJIq&@H7RxDojSKZM)It&n()|C=}{`AU1N3~!W@(%*90ef=u z2HZYqiU5BPK7c@}lVv#eIpV>z`jJK~Z%H5tr=Yt8jKHnFbIc1+Ezz{qJuiWQ7cMSG zFN0lIg|;63z9k60ri|SyQ0tXyq z_D4zheu)+ec}31DSmA92WDz#XPCsUKHDeA46oH0~{%5Hn#daP^DOKOw3x;T!C7)g- z0ar-LklLF329o7s0i z<>f=BrOBtB^ax2Fh7?(gm>>AB{;Xs%9ou?Yh6_Tj`;9)j{^cuMQ^~T^UT?F&`tlrS ze)!1`7w@M(G(*0bQgD{$_%m>aNZyp6>54$*=3aDahqS-JqM?sn6fjS06a_#D9xeM! z;iqmI)#8VB3jk~4hx#t5W0y_~Szx-p`no*_*)A2zHX~zSD%|z<4cK2q^6)erb2qdj zAbD27%q3ZuyrR@(L89L-1UTqtz>RwmXZal<$cxejC{jLDWKW^@61T7VS2_0fN0js%=)>9q#6PGH z9V|ybW|!kwo)JyN^8B)Hv`^A4A;$hZXj~)@;mB|s0+9}2r;7_z^S_DB-L9;AAX(E% zHXR-?PF}tEq~+fm5qFy8HUB^*cm^}cg+(}ePNG=QRT4IlWf4v4J2)FN!hB5HJqp6z zC$WrN<1!F$$PF5m_xlw1l$lFvDBP9m?~v*Fj$*u}F#M$`Rd@R1OYzC=8i=)^om%Sx z;Xwru213h($NwHDUC)@3$pzCf`xA07&oKf-7(4wR*`LeV5*vURc=mlgY0!5X_s~DJ4fbJ zs7%HhV*}DhVTJLzXVwhJ;r2XWD)`WDt-!~ACH zHDwWt;|P_sc_0}r+dq@WLA`73)$x%|K*O`aOEB_U8vAA)7R=d=Smul$vuM(&a3@Qr3 zEQ<&LJ2#9)Bfb8zV8rSZ^PKx}0$osy5jmO01Te5A6Z?_~PVY#lLU0P1uKGM~_ zRZijHE}0;{M151-aJ$#{Vksw^9HfWK&D`h}%ZAOJw#E-lW%Y1=9|)1};vol_-Tu(| zKcTekX>;Nt9j71>W0c8O#sPVY?2_R&VA?Vvo7z63zgBXE4@XswRL z<4aGg_=kw75px^8-lj8Fjyi0F`eeF7YgRr^h>{Ta1u=(zCBVTr$=dZnuWU8(me)E@veErNJ?$rA}@$Ie=KdE|-67&|*B_%hvI~HDG?$&s8 zmM>$=k&R?Mi62KlEpS>J{7&Nsr0tDV;In7LQ%%`*00pcK{i-NE{y)>oixYxiM?e_T zqfOb`+UvuYI#NX8$B+=n>B}e)PjZ6#1BCm?bH&_jfP*-XaWp;x;pm27JDNET?*B^1 zRC`a@$5c>M$36}BB=K#WzMr?N``{|~gBmTwtcR5pyS@SwwOU5I3zkXP=1qs#+%;K& zj!W2ywLPt>D_mT(9zLW(TJUEg)*BKvKwuwVy5EHBZ}-|x+dR6{M>MT=ihZDL7uNZZ zPC6fZzWppb?$jIeJ8j?%VHiC#RGzKdOzy{$$$(@tDdOGJt!SgK%G#Of*42h4QXP>K zj?u~)S@X;V9C!TCy{cD*B)~7&ZWV|145ZExhn~C;bISiFu3E-$dSB;aq%nrv$W=Gt-2+uAE^M7IfDO91FD9uSgA^bP+Qg2jo65GwKS6q zsZvExQs3vXd@llVa>a)gzRXg7aS&dSPSS~{6QyuaZzbIzAWa*&R7r!5*^$dNJiPEB zx}LW&FT$ici6X{;#KVBor9tMRtWzyAZ_w8Gg&&%FX*9F}t^yFm zAH106bo+{Yf>mm^PR^9zrZ;nmo-FpVtIoXV7e2ms}^SI(?$r58a+(53M0)p!-pH9_|MFu~F;68Lb5->63}6_u)3*!p8L+ zlX~yMWUl78cYEnc)4jPX_J}5>Nv9Kpj?~gGzWCpuO4M|Qr*_x0S%xM3GbMJJ8iC$m zxHFBH=yN2kx7j$);QHTHqyT?BNfi9P#!GpLnzei8$;`k+FLPe!zvA#GFVP>UomD13 z)lssD&g&Y6JKIs@`DId$RaAlZFJHq{JVXM1UEa%&{}WgSK(t!9NvEy^Sa{-g_jaOC zq|<0wc(j1DfumU+>?(Atoi{YtvASyOUI2rdcui}dJhT&9OALh=YwieLp9vTJl@QISt?^GZ0S|NHxhNDku z2rQHu(yH?`e)xORN?%ggn+E?C^=)5P zKlYonR>}Y^DwI-Wg8m*3ZiqcD5ztx+(15Y5lQui&%Rie7Hyc4t&g%b30Q4ij?a8Jt zv*3VhshDeh+!IK3<+Nga<2*2P%<3)a2m-KbHdXgj)0g(tQ6v(-*cefE`H=5Ff!<7&wxc z6+ndo_TCMQG{KdnC5M)cSM}M0KoT*zQaG^XqEVj%I<;z%%Z%@3vu)ZwSQ4mk-Dkhv zY#Jxck=QW1c9z2?t+i*~$YyLEpb5H4yaahUWb1VL=v}x|_-p_afCUf=!l8dM3(;0Q z5`b#<{96Xo)_9>FGu+|yUb!3YdfASVkYg6=_o>|;EoS$yshjvx+2 z%4J1Z+}R1>fO2Bg-cDtyVxwRalZ~Pt9l>X;1Ae2|YI%NbGwUY18?%^pz#Clz)66Jw z6+7?W08|Vri$9$_bXk+W59haJ636T(hD77CGAq8fB+Phw{f(?*O?9c z3Za=6dOID?^GCa)jOfNP1yFtIM*ZFf3}FuJWa9YJ^+l(f$s4J!ma0;h)pdTRs^nO? z&cbBY^Es2%&FU@Iclj>zHuc8zSe08l5#ul41x{F(x8r^Qn`34JXk`md_##@FoiN33 z0+1cz-=4sxei46Q#;^4rgacL4bRprf;_UOnQ&dTn)oFXMu$UL>?du{MzIaGqiEQXmK6+tlpR794q(wR|rl8Wx&6t`sP1UgIXul8DWFaeedl%q>m-Zi>-y#$Q1J ztwmxVOX(Ji!N(ZBGdwmS`RGVmlEf76ja}1d%jST$=3!88v8_|5Ee~MXT9M@-WGI!u z1BZz;3oOY5%-IIv$n2sN{4p!j>qB{8W3t0u`Ib_Z(><8_e%Bd3pLg7IM6XKnpd zBZQYG`BX(SL&@lG^uC$f_%jui?@n1Kyd4~D!|YQ|y3{QjTx7TL^<0A@LV%gBzH7Ei zoeDgM%Q}3XFF5yB%uN-r<%(4HxWdb7$q*ZboB4E#0Cljb-xk{W8!P0A*=yCLVVq!; z*tWRh=Q!D-z0EPSZ;y*O23eTg9pGF;W}!?~R~%B9Qz*4yeG@JOe69!RdZ4(w9^XV) zk#;b#g~%+pjTLA8^ScL2wQg9LZV2V_Y>qm0iomy*_@lezc1*gn9rz_mWNxjiZh!QN zI>L&^;1rt6ku2i_&v-R(`L^_U|5xBw=_yOo3c0U}(L8@to9dBoyNQ(~nM+_%Vksdh zz?V*|BGiuJU60boODcU4o6kKeqRuQg$rtSJW&xoSL8cR<1RNGk%CNqjY0PnZFM2NO zasI{Dl=V2{Z&XP@YtlSS4GANu3Y^-ohf_kT%6Prq=p9zR=N!3NiQOdDeLA1cwPYg` zCqXQwLj(W%V%|1T`hPN^%8};}(dnGi(aY~UqRDAOo= z)w#4s%C%QgliYM4i(XX+VRqwKmktntuzFwR>!g_@Ub%?S@4wZo{0>?3x`(UR9Dc*F zL&Iczgs93`bU%@s>Wa~z4JqN!sCy@E&rKIQBd97V93&SM_y=sCwE(+g9NmuWIR=R# zVLIuC&E=D`5r3zgWdQ5yvIzpRJ98HK+;7JVD_y=U{YeS$KJ}eDcOKl~bMsUn{c!aC z%l$id7K!iN`R}JPPVSaYPG(OWoGr}UZJnJUypEsK6Z&FE)R^FzqmK4wR_4kmB>)km zz%L`>NMB?&Xs+r#j@!;@F!nj`KNIDDJJ^0#MpRt%=f`i4bfQ|n==!tnSKSrP z*u%p^bx&n9?Cad6iX|hWgt_p1#^7FkPI;V2~p%6lv4e-oc25} zYW$38Qqor6m(XLDWK4f?!&4waF>WrlMDU9;`OMiDWgQ3KwtPHImxoZHIpda?aDNV^ z-m>TRIlj9eYUg6p&2vhhd}mfm(U*~9d@kdds?>e|PQ>25KOK&3Qp_Ny+CpM$eP{x= zUFMi8(SEp~!}6VK34(v=Y;?VaL3m<@y5vt8BrLaySz)}fMGiG zq1jKThinslJmW(YwH$``#OeXBQh5JQ=T1-qPD1mpB~Ie6n@_xAa@p zO*-}WEuwYPKKH(7QCOLq6Q#d6vx2^SWT_C(O*N1RJ5rzfZCPzCvq(x&%q{dU zrX!MlR^cO=XvyDQO;nwXxsP1-@3U>5k?z9DP(mMCP3O`Volb8mRI`WjeM0Z%Gk&%k zaR%k@1?kby%E5)dp9VZ&S1_13s)i7B5;@_ou&2r18hycY;gV}eNHbWD>SuB<=PA`7@}k{a8K3YubLpa$p;&6Q5AA2IuGi?3(0bO}S2kmQ2@@+j z?7@-88|5nTt>h+p@$jAeLe2*r+z;cAw%%0k+PatL)lXZ)+O5kkxxuGk0=y^6tBNge zCxw@WCRf0fRJGDZ8qKj#&((#t4IO*lcYIg|CUtc6%VYMCW6v+t33ADf#~_TKMrcZc z#xh7-K3We=rpf*=eGs36$E<6tY-;$D1>5wx>TbLZA7{2FUq|It1vQ_ATDK+Z1I>0j z-3tABQz5Mi8a)CZp2gw&^OA%=%|6{6mG+6q277xITRFv;>h`f5dMq}a`fqRBOmytT z6q)01Ouy5-YdB$JJZ7fwr1W{X3xZjl=arE9K$c~61Mf$kD=Bur&r=oZiW_##uejj@ ze-&{@`FXV5EOH!0A*x<$Mx|wBi{!T@r8(l*OwDGI3(1z7bDa;>c~7;RZwqAp?D}6p zE10#oNhK`Pj&Fk?$4SoQuAV|2Gn>lv=rOlohtvF4tjlT7l4}oOFE4?k2HS2G;+s73 zFaZJM$e%@(6dETDhkQQMPd%un=i@94`OP|X>Zu}HB55&nRpy5UeC4Zx(IGZrjM+5g zveW^VU;fZ!D;3UZ1@1br9wCl3zZ4h|hLxp|s!9R27S)nm>ZH_|0? zhfTew`)kf2K2JSt9yy;$1zdyw_1S^NS`+L{ zCG#jlRQTIt8S{6KD5;6akDJ!C?gzc&W_mZm_U5fOodZ+}x(@Y2l~RpAvB`R)De+E0 zM&Tcff{yH!WY90qyzk+DD}^d?Kju?_ zr*78ZFMQTiF8fkl=prZt=l^kS^t|tL<1to z>ck%Vqv=ucKyf@ry@X$-oY*Iq7o1}s%#a$;9|K?i-WSY%T^dwn@Y6DbBYyMSeb15) zPgqQ359}Wt{TaA-wnL`n_FKeqjAEv89E*6rsV&;?$$0SAU=q&YWDstH=l!v)lwPiV zGt^DD!J$C!Q%;A?neu0$Uc1+NF@rJ2hi+SR6vr>~4Y*I9h;ljdsx=%S3p~M<=mAWO zq=;0t>@Kx?L(oitE`=CbCxce3#0#S7GBgK)Y)U1l&V97}<=}^Hqu3|pTyrDwIO+7- zBsrW2=h+cntku4o?rdzS-qaM&{=g+I(Taj2bw}2p-b}nVAuE-IKqAYG zEb91+Mw8}bLC%hY_%53xPt7+R(ZJ(=#%Zz}ODu7&{w@-1+5Y#_&F0&X%NLe{X<)X8ujD&*cNtVzG&(aoJyrvv>H zDSpv{QJjJFsz8FcO&O(2}P?pAa!pl`Ux;IpcS~7{n^Jqw!euLdthe5BbbG|wvsU`B) zSUsDlqpwAlQ?|QEm@ddv>Uu0Y2wgSm&d&tZOTz2b_EoLPI?j#KExI0R!$z%84&yG1 z)c65eor_f?V$$M2x?NOGjPeS44TZ|60Dv?J06>Izk!39HOepM34V_G#VHAdc_rX}5 zY#q9_Z0#r5aqgqK{HlKhJOR%aKGQ{GvLG>j6&SD^BPJ2P*k!BuOmKF1n#xzmT#!w% zIT(igy+qD?q(!JzFx%_gikK57ou3;REz~w~hO?IQjy^l`%Sf_)7Iup!TQr10B3BJD zL??!Mwq#xYxEBtNlK9H4ZFPfGl|WZ=ylqc4bx_5DU7&J&QLIZ9X(B;0EkQ+Urx`zvSoVi+2pB`8XmT_eYom;H+5tzEb3}PcP-v`eDzAG}6a#GTtFe zzf^0#X~}|Os07Q3!x@;m_ye@8x0*&_@{;9-@yM#cX@hV@aITubqFQh1ka!hg#*Pl9 z;JrYrkPo!qe4f{hN7pW%E6zfWa{s3`CmoDuhT7gQ#eB5r6`Fuyf z*=5RI?GC%cBQFr_G4|bJPx=H!01UZG6IdK?I`7hKOiBkYK7JkmEnnM%zf0}v%Lv`& zRwp^b5wYVRXJOde&bVbuipnYG@44W*_FWmDB*%PUQB0-ti>8w%0=xKg2Mfq?&*czr z1!LXt8yc5kK1=SepD4jn4&epD2(L(X)m3?j5|!`+%%)|;fmU>t{j4%Xg3-R2Aj+Jq zfW|885h%&0f^ZZQ;y9^JWhCKIQjU;y2D5Ok^$G*-%{ZK!wdidOf+o6Vj~EZXAnLSl zL!)4m?c8CH<}2Bqipk8(wy(H1$Q7iE+Ni2;(NxrH`D5wBHl)$& z!nLatO)8^~_1j5|3>y&ZV!M=$(T&z$iOxll z9mdw_bIsV;Keh`tv`e>N>&@y4wIJq8*!kI8q@IPLDGsuP7vITbRYtx(6>5Z}9mWK4 zd}U0m3>~OzerZf)$Y^x3RBJUYo@_8{$!Ocg3ss(o8GC1tMXnMV-uRBeW7vr`XmHsiGqCw5RtAj?K^GO(A?wk` zY_a%BX4(;}s?y5B-RO19ihX!Y`T>6eO1gMp+<_IH<$9-HcvI?eA*9lV%JQ=mU#iqg z(4=0naQ-8I#<4W}RF!_)8FLy5-09hadXDs=j-x}n=)wY*+PY3&RR_%ZX5YL!TSYrt zUCr*09|&Jh=Wub*X+= ztfDF?Ld`d0Mp{h!#@3SnZ(IdpIGhr%u1VZ{=ou+^0$A}7OI3AxChD>o;Wqvx`yhj)~BZgLW)Od={O@}_?vJ{89O1Lz{<5yVKh2o zNj%kX5w%`gvz_8*851v8x>2ozy=SD;V}i3Q4d)_fH^gm0@D*RQXVh=fhsDo(AL95e5+1!i~z*oPqrj0ypXt0+N_1y<4*WUQjR^vSJ8sz&n7S>sWU69i{3 z^+gPRbxXOD51vP~{jwk?U5v@8x14PlB{PmmN#@;B{@IgRpfl-YF%81rA!cl4DUxHv z)5sRRH!wIPZ<&$% z3X#)HvM=)QMhG3z+yDUXicxY{ad`soumOPI8H6aaG`6>6b+9vkuc9Q2g--JOKrFeJ zQmP0P`<+3E1`AMX>9~vlRKy%oDZs<;^r59F9#H~zc&Y7-IAi8_21?MUyCVwGU~-Dm zXsejmASO0utj{R`05*Y~l(?Gv{8G9HOiewjNA$8qGqF_uISopJPi%LiKav0oDKQ?A zijL_XE^##VlKVE_(Rp2wFw4<63n{@uh~pvI0-?>*w>VEcrAA-BrUXs!)jzGBV>XOW zi4iU-Rh!a1&J<;&DUnw%Wu)odyV0ETa`R|AxvN-l%U)%+vqByLN~)C0eosr0HCC>o z9M)MQ2#iz%AnUS)_$QCKtG*q9KKumE_Da+Lq-oj$R8eU&Zol^Zd|+W-aj!sI)R>3N zn^&W2yQ=>QGNWAuoPeh22j?X-Ml#T|syYM!{1&4mRoZ9JYtX)8Hz>||A@g8$7y_$t zh?0zcDdRHZeB^i106J_9%n*K7^a2+9q0+iZF62Xu!f3bBT3<9CU)+-`qb4CG)9o#w zEHZDOimvbjIPdw4V=62~pGYi)hOcb#2@ms=2aCx>e^BFEdV?B3ph~QqaN%RlcuK?G z7;lfWNNILr%LV$-k(qHPjxG1#Am1X|I*=?r=n}Z?tNY``l3E_=--}H+r6IAVUz*bJI z_g-6cyZ=J_Yl%mP1)7P;_xRn+6gW>9393r5;K$s6!iqEx!N9G#U%0}TUc1W?3lClq zxRv6Tg<}?DMJoDFz9xnH=zym>$z^~_?Wqr!X!5?{2CN1yL;17Ia6w{rlb ze27qNNEkHIZffCaSj!@#llZb3-Bf*Dt4GBZS%R&-H@!P59@#RA&rve;GZV4*AuGy< z9m{ARE>COzQ=33#EynF12GKy3TF-9m|&a2LmOBHnlMeMiR5-~pULvrj59xP4IJ3OtF& zO*oqO+(b?B;=95S{h-3mpLs)ks@?4bx!ek>wmz(`%iYjBNJl}4AHVnIthUERHgLx^ zWm}yiEM4iT|K13+MT+4t@K5=7SF ze5@zTDkNrVj5Rdo+Ln|zMl0kW1C;SQb1l2s`PVY#3ma4nK^4^6K|jMBceBsbV*JVPQyqs zptW9g`lRQu7P*#Xe(n*Fe@U6yg=RGfCA6xAkmF18PkBmHG#)&WR%+T0cr+)QR_Kh` z-`DUdyK2P zH!c|qo$3u&mhl+-kBvUd zd#;NNdQ#a%bQ@$DSfk^k(>CoZfFr;EHt|BK&I-&`=j)M{;)$!Wdr_)G_fiU0diB$x zggbAS17eFw+}Ef{r^cScBLFRK;wvs-s-rf)`13}Jq@Ksf1u@eNayQZkP%)iEZDgDZ z-S>5j)%z?7YI;9e;I|>gSn6iL#AQpZ*7Zs{w@Hv19lDQ6{c8h!e=|&R0q&ALCQ~Dx z$^m(IIwyeO6^BxW>ECulE?LH~6w!dGSPoVP+U&K>tza z*Ba_GNFgE-)Pm#OAJy@4SoS5bsq|S*DX4k+=U-g1jmwg@AfWQj;>F0YP*1l*=)dd40UZpOtlpU-3 z*@7KnzVl>r1Hy^oofx~`V?w*NBkl9QxVQKkUYn->62*u2|FuGC8Cm3HyC^4Kd*vw)YB=k6=Ug5i4VIjlXQ zHdq6kR9@>`Rl&y7Ac^`9*=1l#WDsw_ka5H2sBZ@f1$_94HXfBk@e^RV0dZPv;0+$@ zTMxtnc-L5;cRG|BE~n~n>P^yI#G=iVYu%~P7JRdxdW-TT=d?wxhJnd^;;(#fo4ep3 z+&3gu&A}fR!G2rZw{I4PI)x!iqK}3UduK!W9?d7U{L3j>oTs}SQEb+z4CY+)^bWdL zjJ*Cho6Q+v{)*uJ2bl)?nxlqR-8`I;40#v;zQ}Zntsm9Aii)|CpU@#F|6QGA%AU#N zQ_`W$ifC+Sr>2vNB3zw+s0siXD)amCv)2|6f}Tx*%i|gWiI}Uu$bPv2EznEGSnbb_ z9UF+QD(kG%N-b!>;5h9y)Q8Lwqm$itR5(Z}>Oivh{@*cF#hmg~mvHFL(#S z8hWjf?mTekbfJK53IX82?ydPc(Z>J*!A9hdYsw5a$5mK(T%1+s zLOGe1H?zxUe5-mmX!{<&L=fK;aaqq_@Af|a*w+Ny35>tDSd4#RI553ocb)7O1&qL% zHS5$F44o11x~uMv4Snf~S5_&Rzn9&P?6}>T1+%8(hM!8 zkJMXb>1ZIJ+H~y3KBud#TPssjS6ron25zLRt}sm#ww;gdmsFL~5)uJk$Yp^NQMZ05 zUjII;)mGzqQ(V!EbIW76E9>1?)m)jq5yS`Zz__@tW50!*bz^ z7`@CYYxZ(O7gd3wu^R`6cIx26S^Xw%`udfe4_1#PK<7dmsYk{G_keP``#}lhxPz{v zNjLEA9zJ=x{hdK1WFPgz9N0(Vw0Fb;ebPiYIu0qZ3&rNdA_~(ZkaoZV%LT|<(vtpV zpBser{Pr92!Z*Zt(uk=Gmz*c?=?i`ZZ=D^KDH%J7I9(mD3yqu-7Y+4IRZB*lUk}u> zEgvoGUx~KlB9o?a)e76awF@WdJGfU;tJ7{BK+f!AU*;-Gt=wP-Te6FD8h5E0{ zwP)g-J?IT??ZJPfPvG36W=m4dgit5Wp|Q^ zE#V!UcG%Vv8M=X1bgpj6|I1oAdij(4m)8%__AfM;!!1U3MeMU50mThOp_^=7yZ+C*4TE^s__^k z9MyhjMEMNr@U4N(|B;cB(A3lc08sn_Gff+bx$uCq<0e3q`U-_FxRZm~N|}Ie-{p39 z(@+HypSqD$8Vo-94k86Jf=4r)Die~6ri+^7s63RMkT+jxJp-r5Q4qkMLxTFF%Va}z1Q_8>#DJ?cTn%Rkw z`GXbAlEg-$E;2|!&Uv{pf6%bv(z}plJxoZPwj6kjocvX>;oZO%$Q_^yl3rmsO^rB z;gxfA00(DncSlwqujh}6xg7IX_L*6nOCK*6);K5c$rX!J=pCO|Gb6@~06A$TsY(fh zz<-8J!P=2>sW!Uh28i0<2h7yg!Nw3~%Ie@`?_lZ#vov)U9{39G6vLDn^P&(g zMsizygTz1$GCf6~9Dqp6WDhfa((Z6K!zs2)yC*jaoXAr=f ziX1=ypg~;J?~UTG{eP3v5y}+$|5gJLVc#!4R^K|L#)0H5(0{>yr}YDU*qZ$5iqf;WzerNs?EfP92mVR&pV9R{Nd$dB|8K1QPo{G2*eOZtap1vxvCCJ4 zTmQhnnf|{J%AZW_L7@K&sQhWUpDcoHTYVfD^+~JxH`bcC0wfT~CeQoc zwa@O>)^>lm`gHZVPRplX^>HjhP9_4NsREBc00MzfK;8*HDseotV{I595E%3C3<%_C z?e50m;bxzgZZEouN<92KdCAM_0?nYq&NY$l3yTvgOfKeKmlJ=4R~2~`Kc94MdRd}& zu~oI$6vwu4b*ZmXtvBcS`R%uxpQ6(@=Z}wF0pin~y%V}rV?E=4?7z$al8f73w9ih$ z+2cl$w-5x-&|_4)V)aai2^OyTX_qKwVSGabO;K9au~79f8a(o2U@;Z8j*lANk@6PJ z9P<%z3@)*jINn9D@?b_QXCB4xYDopuu)5C?Vrsc!i&5~TCd!kt2c_YI{XTeoiP0Np zI$^6(dh5#x7}&uS>w$NGY3s(vl7Q#s#$4C;rBH>o9yZb}gY#H<+_lf4&pl1QXjW5x zv0{Z6=XSDvf2Z9-k8mFF;hqn#!N4(eA6MNn>Z*obIT##*l%dDY0Ovz*sMWDd#M6_J z9&*`$?;@_cQ~+f#czYh^n@z*3R5tk@A!*l?4__RbHNkgj*3}RQ;1rW~m74BHI^$yI zfCZP9Ta=w*+PjdwRTehWsgTfN=;&fj^|miO-u-&{;2EUl9LYZ*AGfs}L~s~Wigcv) zF>?qrE}0f}^9@0x`k+Ddtl#2`bxn<(Ow_M?8b*=c+l>5OC0~6ovZaS8u#pD6VSn|(SpANQ1FJmAQD<4Y2KT-KTQ0WH`aFKOxQuDiwEPR&LN)RfBEE5euu?VBWY3M2fy|!aFqRem(cBJ=P99`e} z!4R21j3B(tcl`CeHPG#p_C)b;!3?9zerO#?*X(;UAo4KV5q+hS*6fRJ`8C*y5=+B= zj0&}wpGQRlroFmZsMLRh_eJrU?)C1;y<04W!ey5iOoEz)L*gtS>xBbxh@s3}eNVLO zhlY^ZE8`Or^nElBHQ2rEEqvug^^zl&jt%Z`YS+4FCKjTrKgYYQeL7T_-FaZh{d{@l zcL%&iz|9_)O5r+3hca!hU&PZ{2DGS1{SMjxaui!t&!~f#?QP_dG;ZVi`+-CEzk8nC_F}?x zEU#C`AIclqsco7QmIa>$_H%Lje0WJ~Xrb+$2Z;LTLP3g`^rujcH4_2lugb^ao0;Ymn1ZFU^4THCpbZdXx*`>#4j`-)y7B`^j6d0znb_AECt5` zjAX&%y$VIWAF`u}76TNN!VVF;h8p_9F*T zs?iHCdzzV z3|3{b3E|p{G(=U)fwtj<;qcdk5QN&tx8kqSrHFaJr@W;utmh?YeFB^&YFrQbazMEl zZ_J)RG|6lsR(IrylQ=TGKa1La zUe~wUJ6|f{Z(ViQ5w8P3J=+XV+qWOE?A~5&Ydu=W9$%;Gnz_D?5oJZ0;otgMGO0!$ zQNbB|kO4iqj&HF_+d%iyrRN!#XzCb}4O)i4EOBspv+U&N80gDgVj8lNr~wp+MkIyR zDKzlK49&r!{8PLtEV6gBhM5Yhds(ojvqbYeh?BHsXX+R~u6mG`%q!4+lZYO%h~QDb z#S>j>j+wrWKi{y>%j`#u7jn&fRi71lGn{gRy?wohJj%KBtMB?ub}l z-nwHyTm8%9)vA)vhb->a_jkeL*Has821-bSc)BGU83et;R#Pvj$_vOEUaUmesG``s za>)o=`lKa>9F!TadOra>HHXm$@0cF1a1S!j->s!l_ZmQZe&8OLbpx-=(><$`M))p; z*gqXhoAd4T8E+)q_hYHUlo;_{cS#xpG;mIL;SQxjFwRQ)!%FS*V6N9}-f784po_?x zk-Tj5m{m@}2~J9N7y&u#_)zUhRL7sdWU;pn*1iilgv}6!P-8oc0c9G6gyT1hQ$G8y z8t61P=&IWX(~*IFK($guGRjPQwt=5r6kah#G{Ze95Q7mlJ2`X07VwfsQzpwHDBWKl zqPKon7kOVUe1h@vdPtdRb)db~CGG`*;kNjK?5L4tX<;v7Nei59oqI$Zg^fsVvifFs ziq?EQ#NL%iqukM_q5Euo8uuVSXz6s`h7Shu4n?!GYjga?*TT-d?tqo_*+sKd zTzwrUi|O}gz}_~6ehuT~<;b0UIk%QAx-{Km5Q+AixgXZh?yf%b->5F>p1zHFm4yz} zdCf}&_3c8(LF8vi{jAkX=*nj~^!`F58{u1najU$XkOgmy8QYlI&Pi~J3SCf1K6Vz> z8>^%J(89Qr?@C$;jF*-Ja9fx$T6-R(pvi0*LmbLQAo5`nnx#>*0)IZC<~%O$^Ci*p zc(jAuP+aX}Zl?;p2z75CS~jZby|4Qo(^}j7{`8%lw-$~J;dOKO&nM$HU&*rLfwQKm zLC5=Zu;zxVoQcdw5x^{*uKCiTgR}Wuq>LGs@VE}i0kbEV zmOGYNfQ^R;frW&`32KdF$Q2xF5)Y^0fPzFLENqD~*kEfW$Oz3z_dNP?bRiiQMr{?k zUMp(+YM#g;x`TS4u1J8kDHm?<{q7fLq&lvix4DghI9%2D`KWT&Qq1$n^? z$L_$<=9+e@X-2uH7yHzj2-FG^2104L@P0ALKouda>uXtK5Hjw(G#q1!4W{j+iPw8C zS0v2s%AW;usZzf_d>KM5G1j=ba<%%>OmT+PLhfadf}(YXva?uCSbe=p-Xu@mz0T_+lr?agC;v;H&uI-rc*`+JWW^9Y=FY0>I>5IfN|PVPqOv*VkT zSl24B!iX|+b&HPPW3?8(8C53S%Eq?!uzruRx&89xOKw9V2$fF-l`tso&Qofmbvd`?SCI8Q?>S z*hj`1*Ec;8pu`o}5JLGiG-0tLVAWvH&%(hfB4!~f>eXnxCfUB>e^_?3JGqstRITOQ zUi9{Us7yw?jA4I!TYe6HXs#tVoMEW7;_VQ@di78CWhzd+qzsndf=^V!IG}P2?*oXT z8XU*?WmKgb<{0z7#y{ADgaR^)b5m(dLp^mt_}3`H*8>&L%NDAFzP#^q^@oFkEkGbr zP{tuV964}C?(DwGfB6{tgxp6JMQFI=ms+C~?J^k)QqkvKjJEi--Mq zC8CWz7MPjlg1kI~U0XaX=IL6fl}i zTR=XTWq}@%=9*xuXTAr{Jo#pQn1FwWwh!YRy>CVgjv%BB^d?j373_^-BFMr)Qm$?T z)ElbU<|X*j9E*z-BPs!ui;&+4Han<8MsVQoEPyUtStX$nSMgvkGyL+OLCIYXem+0D zX!Xlje0U;wV`O|}P3Fo)LmY|Qq&u840}N{C-mmA{RQ*h&kuDg?<=V_Gyf@sW3@phv z%)eK+q?E|JXPBo1pZ2Hj#E%;{;|LLjUNp;qdz-i)pG-PqgZdu*5JKuhKZ|p3YY|h< zbPo}zzUq~bImm1MuDhKcxx6%)Mg@(l$ySm}>qgB%+2~X0KC~XJc!;e_L@>8M~iy-NR zyow6YCOFsMzok1WQ8<4$b7isq8u+rA(_4llgjbY3eA~!y^?_Z;EJ?Ckikz+I^`wf{ zkSD_EZP(t*R5Cr2Bb6~E_;yA*ua6f*XTH<&w2Z&O>CVw%B?ZF9>fhFWg8;?Z_p&QZ z*)<0R4;qKG(I3Qn;f(Ddrm;u`MH%>@|< z_MkU};c1BLa>m<>FQHreyPBTRW0fPJCdxS=nB%rkCmJfq_WykD9w48M*7QkhXt{;r zsTd8-rxumQ6S2h?2b~{z+VKpNt5vGjguToG$$Jpl;oqX1ycjFJ;snguh>cv*+59`X z!*1S?3Z=lmg)bVONr|yFW=_*@8VHBo+*p^eQfcR#nK=EJC@%KXr?klNp;fSikj zFCW1h+C>Gosvzzuaw!A92o>ADeAhMV~g91=-+Wpez@R<`{YvNENKwA+12%FEA)DS1IZ?Sbt6aN%HD|Ki7OE|k86%jsQJ zd^d~V3*-#l1On|WWv{D*ETob`sqzgJCIu_(sKVH99)BOt}V>rQ!Zf;orq>nOLJnf>Mi=120|IX<0hb)1z%==q^hpzYZ zr7ttc*vB&adH90&(=rdL_1|q{L>Q>C|8^{*JW8exi3y%S3+XyLH47tuNgoHFS$U2Z zRn&FN62#Si;dlVzo&sqW3WX2RFoTZ@afn5}oc2`|(Mtj1Y7hpEs(wUI@RdE!F?$>D zQKviyHm)^y)K%0VB?Z}=~^zUupv*C&SdFo7 zz`k->%GUxoZr{WsXEy9SsV*lc2Yx*iR<`s4F{|FuM%MocTmFQBf5Lm($e83nG+0dO zDxSIJ+7U;Oda*9C%doD&_ir(Q6w)Sk*G}W=L*utK_^tj@Hfb9&T3qdtI`)W1^Row zC&U|o{S#(@?o>m_yxwyn);C>jw$su)N{p`wSuWEMfK2{l0=3DYSIDPEi>4dOTPDu0 z&$(9eRNfPZC)lA6dOG&2bV~Wv3E*sjpMB{x4<|V}#gC>cUX5u4H9DYN?(#USN>@6r6MxCSs^^V6>up-xtihn8r3yj^!OIGj+%@D%fGr6e` zRmXf6_Q+tvki2Fu?CG=X<_1%%1Ti7t2&AjX#T-0Qi7}BDi!Kb<>LmnrxD;VA&QG8K zY96>HXulG^@!?y4WdI|QFKuRxUPl2OT+KBpKM?N1L72bd>9#c?l$0|tPzOGOmM z!IqcJL}J3*9@OFunZcI^}=h(+$n>TvLfz&I+DZsEG~|N zua{n|idn*4spRM_g?~%u-$d^;-r9CkAhS>>VijFO4J`4q6PASDqR#rxP`+(a7!cbs;Tv#kjc(CYyZ!>RGsfR}Y@qRE{VZ^}PY)JAb?Yq7e7X+aJuT=0_B z#9xP5#KNn zv=LVM=>2fVjwe@qPR&hW>!t$jGhs%NKMr z+NTtG`O+3g?WAUqDNvXLmiov|q66CX$%HcQa78%d`I<0D=za>e!`P!Gj^@d&XbeB( zP70M~+TIVx7XChs@6*(OnF8grN>;SK3V#cw}n|j%AX5K z4{BnkBF&@JdS9;;_P zfL1HB%{QCin^ImQ3sy*1_ENT!W1qVY>v;bZFiqP|peo74Fb*EF{f&FyJn+@u|Iml2 zE4bCLLnZ#3k|XlZ7PTF?^wCYwM)Pt}Ohb<-b^TNx+bUyk&SWJct0bgfV9=bzAobw1 zNLBc)pZfpx*s_^Vz*Xd~PS2>_xOF);izsp9Cpx1+B}_C6)W2 z>Iz)UxIDs++XfK$L_dA3W+TCiBnOkM;E|~X!A*}@AVkqaW+BIEq2S9rSc7jxRRLZP z_h8@nnJ&M*Hldy8St}MWiIWcCG8xe$VaNZbsH7Vyx77$}!8ZjF6DA?$F7UNuddUlY zIdEsb(&jRs+`f})fsF)w%gk|8B5G}}+Q8G&o2wux-XCcAP^nguK;g_pR;(;6F&R=N zez1D(Mi8U+acg&p^5bC@1MQnOPq=d%D{KMB5`!NrC}CEEG)ciE-tQTIycD?@ed?p` zVo_)wWmK~PveKUO#Kyyyub5)&wiFN>ui1_by8T70A?yPt-#dYIG`ym#)`uyIQ&?|k zG8+lQAjx;q(ldy51XuH{*n=?}s0}JFix1;IfpxkTS(g%?oNFxT40bjWg}%|sDBp2JM+@A za6gEHk9olZX}E(DZ&WEpJ`+7Dx+5ZycfhI*byO$u5QXqgsRSc+ovEHV1oXCrf>i1{ zy$BfNqC0F84I_NKwF4)dV21*jVt$A~erxLb6CAF$Pnb{7IvHNly zMz=BQfqQA8)suv~ai{~l+15x z+?x4-rc|`#$06h&hW!5sIUHN%`u`B}^^a0iOsqtA71g-dH@1KNxqu8tFdP%$8y=5y zh$OcJ#7L%_8DZHx(q-&E|1dA)-RoIxvv?3}C`lsZZ8Ypz!pnzNAFJH{u=~C{CtaoH zJ*n9TD6)Pmq>95*D6jZ3A0|qm>lUBA^V;J;wv|Ft1r96$`rkhB=>F9I+o(Yq(_lDK zreBHJEtFRCa5fx^)qfSIZnWvI{=3Ux5YE7bha&~AV`Q-ZQKsqBU29vjdAMIPKRG$f z|5N`*miynVsep_)csLT-s_CQuGwXk%_J8ge1d@aH5Xzcbnp z;HYFF31FMQ=l^H*Kl<-k|K-L1+&KP!so#f^L52wTk^>te1AX=926w8t(7FCiHB}Ii T{=O6PpI!?FfecaM{zU%)PIerY delta 5887 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 Wb*$f~)Bw)S^#%g~USmLRdjAKi0Hd)0 diff --git a/src/test/java/com/rapidminer/example/set/ColumnCleanupTest.java b/src/test/java/com/rapidminer/example/set/ColumnCleanupTest.java index 0dfb14a37..d9a478a2d 100644 --- a/src/test/java/com/rapidminer/example/set/ColumnCleanupTest.java +++ b/src/test/java/com/rapidminer/example/set/ColumnCleanupTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/set/ConcurrentExampleSetModificationTest.java b/src/test/java/com/rapidminer/example/set/ConcurrentExampleSetModificationTest.java index 179ca1743..526f01433 100644 --- a/src/test/java/com/rapidminer/example/set/ConcurrentExampleSetModificationTest.java +++ b/src/test/java/com/rapidminer/example/set/ConcurrentExampleSetModificationTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/set/ExampleSetCreatorsTest.java b/src/test/java/com/rapidminer/example/set/ExampleSetCreatorsTest.java index a3e62f21f..2d167ae99 100644 --- a/src/test/java/com/rapidminer/example/set/ExampleSetCreatorsTest.java +++ b/src/test/java/com/rapidminer/example/set/ExampleSetCreatorsTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/set/PartitionCompositionTest.java b/src/test/java/com/rapidminer/example/set/PartitionCompositionTest.java index 587bde34e..14b117587 100644 --- a/src/test/java/com/rapidminer/example/set/PartitionCompositionTest.java +++ b/src/test/java/com/rapidminer/example/set/PartitionCompositionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/set/SplittedExampleSetCompositionTest.java b/src/test/java/com/rapidminer/example/set/SplittedExampleSetCompositionTest.java index 2bd394480..568eb91d8 100644 --- a/src/test/java/com/rapidminer/example/set/SplittedExampleSetCompositionTest.java +++ b/src/test/java/com/rapidminer/example/set/SplittedExampleSetCompositionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/table/NominalAttributeTest.java b/src/test/java/com/rapidminer/example/table/NominalAttributeTest.java index 7ffd56d34..832ffea1f 100644 --- a/src/test/java/com/rapidminer/example/table/NominalAttributeTest.java +++ b/src/test/java/com/rapidminer/example/table/NominalAttributeTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/table/internal/AutoColumnTest.java b/src/test/java/com/rapidminer/example/table/internal/AutoColumnTest.java index efc31b49b..028a38ce2 100644 --- a/src/test/java/com/rapidminer/example/table/internal/AutoColumnTest.java +++ b/src/test/java/com/rapidminer/example/table/internal/AutoColumnTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/table/internal/ColumnarExampleTableTest.java b/src/test/java/com/rapidminer/example/table/internal/ColumnarExampleTableTest.java index 5fc22ea87..4c6a95e45 100644 --- a/src/test/java/com/rapidminer/example/table/internal/ColumnarExampleTableTest.java +++ b/src/test/java/com/rapidminer/example/table/internal/ColumnarExampleTableTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/table/internal/SparseChunkTest.java b/src/test/java/com/rapidminer/example/table/internal/SparseChunkTest.java index 09f153893..23b10ebbd 100644 --- a/src/test/java/com/rapidminer/example/table/internal/SparseChunkTest.java +++ b/src/test/java/com/rapidminer/example/table/internal/SparseChunkTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/test/DataRowConcurrencyTest.java b/src/test/java/com/rapidminer/example/test/DataRowConcurrencyTest.java index 88c98dbcd..0e12bf3bd 100644 --- a/src/test/java/com/rapidminer/example/test/DataRowConcurrencyTest.java +++ b/src/test/java/com/rapidminer/example/test/DataRowConcurrencyTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/test/DataRowTest.java b/src/test/java/com/rapidminer/example/test/DataRowTest.java index 52beb6ed8..21fb37ff6 100644 --- a/src/test/java/com/rapidminer/example/test/DataRowTest.java +++ b/src/test/java/com/rapidminer/example/test/DataRowTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/test/ExampleTestTools.java b/src/test/java/com/rapidminer/example/test/ExampleTestTools.java index 09580357e..81a7d42f8 100644 --- a/src/test/java/com/rapidminer/example/test/ExampleTestTools.java +++ b/src/test/java/com/rapidminer/example/test/ExampleTestTools.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/test/SparseReaderTest.java b/src/test/java/com/rapidminer/example/test/SparseReaderTest.java index 3b380856e..d9f0fff8d 100644 --- a/src/test/java/com/rapidminer/example/test/SparseReaderTest.java +++ b/src/test/java/com/rapidminer/example/test/SparseReaderTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/example/utils/ExampleSetsTest.java b/src/test/java/com/rapidminer/example/utils/ExampleSetsTest.java index 1dd74c3f3..deb9799f9 100644 --- a/src/test/java/com/rapidminer/example/utils/ExampleSetsTest.java +++ b/src/test/java/com/rapidminer/example/utils/ExampleSetsTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/gui/security/WalletTest.java b/src/test/java/com/rapidminer/gui/security/WalletTest.java new file mode 100644 index 000000000..3260a0688 --- /dev/null +++ b/src/test/java/com/rapidminer/gui/security/WalletTest.java @@ -0,0 +1,147 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.gui.security; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.xml.bind.JAXBException; +import javax.xml.transform.TransformerException; + +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.rapidminer.RapidMiner; +import com.rapidminer.tools.FileSystemService; +import com.rapidminer.tools.cipher.CipherTools; +import com.rapidminer.tools.cipher.KeyGenerationException; +import com.rapidminer.tools.cipher.KeyGeneratorTool; + + +/** + * @author Andreas Timm + * @since 6.6.6 + */ +public class WalletTest { + + private static File tmpRMuserDir; + private static String originalUserHome; + private static String secretsXmlContentBefore; + + @BeforeClass + public static void setup() throws KeyGenerationException, IOException { + originalUserHome = System.getProperty("user.home"); + + File tmpDir = File.createTempFile("wallet", "test"); + tmpDir.delete(); + tmpDir.mkdir(); + tmpRMuserDir = new File(tmpDir, FileSystemService.RAPIDMINER_USER_FOLDER); + tmpRMuserDir.mkdir(); + System.setProperty("user.home", tmpDir.getAbsolutePath()); + + RapidMiner.setExecutionMode(RapidMiner.ExecutionMode.TEST); + + if (!CipherTools.isKeyAvailable()) { + KeyGeneratorTool.storeKey(KeyGeneratorTool.createSecretKey().getEncoded(), new File(tmpRMuserDir, "cipher.key").toPath()); + } + + URL resource = WalletTest.class.getResource("secrets.xml"); + File newSecretsxml = new File(tmpRMuserDir, "secrets.xml"); + OutputStream fos = new FileOutputStream(newSecretsxml); + copy(resource.openStream(), fos); + fos.close(); + + secretsXmlContentBefore = readFile(new File(tmpRMuserDir, "secrets.xml").getAbsolutePath(), Charset.defaultCharset()); + } + + @AfterClass + public static void cleanUp() { + System.setProperty("user.home", originalUserHome); + } + + @Test + public void testReadSecureStorage() throws IOException, JAXBException, TransformerException { + //expecting migration while loading so the content should have changed + String secretsXmlContentAfter = readFile(new File(tmpRMuserDir, "secrets.xml").getAbsolutePath(), Charset.defaultCharset()); + Assert.assertNotEquals(secretsXmlContentBefore, secretsXmlContentAfter); + Wallet.getInstance().readCache(); + Assert.assertEquals(5, Wallet.getInstance().getKeys().size()); + } + + @Test + public void testCloning() { + Wallet w1 = Wallet.getInstance(); + Wallet w2 = new Wallet(w1); + Assert.assertEquals(w1.size(), w2.size()); + + String key = w2.getKeys().get(0); + w2.registerCredentials(key + "_TEST", new UserCredential(w2.getEntry(key))); + Assert.assertEquals(w2.size(), w1.size() + 1); + + UserCredential entry1 = w1.getEntry(key); + UserCredential entry2 = w2.getEntry(key); + Assert.assertEquals(entry1.getURL(), entry2.getURL()); + Assert.assertEquals(entry1.getUsername(), entry2.getUsername()); + Assert.assertArrayEquals(entry1.getPassword(), entry2.getPassword()); + + entry2.getPassword()[0] = 'x'; + Assert.assertNotEquals(Arrays.toString(entry1.getPassword()), Arrays.toString(entry2.getPassword())); + + w2.registerCredentials(w2.extractIdFromKey(key), new UserCredential(entry1.getURL(), "user", "secure".toCharArray())); + entry2 = w2.getEntry(key); + // url is encoded in the key. UserCredentials are overridden. + Assert.assertEquals(entry1.getURL(), entry2.getURL()); + Assert.assertNotEquals(entry1.getUsername(), entry2.getUsername()); + Assert.assertNotEquals(Arrays.toString(entry1.getPassword()), Arrays.toString(entry2.getPassword())); + + w1.removeEntry(key); + Assert.assertNotNull(w2.getEntry(key)); + Assert.assertEquals(w2.size(), w1.size() + 2); + } + + static String readFile(String path, Charset encoding) + throws IOException { + byte[] encoded = Files.readAllBytes(Paths.get(path)); + return new String(encoded, encoding); + } + + private static long copy(InputStream source, OutputStream sink) + throws IOException { + long nread = 0L; + byte[] buf = new byte[1024]; + int n; + while ((n = source.read(buf)) > 0) { + sink.write(buf, 0, n); + nread += n; + } + return nread; + } +} \ No newline at end of file diff --git a/src/test/java/com/rapidminer/gui/tools/VersionNumberOrderingTest.java b/src/test/java/com/rapidminer/gui/tools/VersionNumberOrderingTest.java index 58a005131..3dda15721 100644 --- a/src/test/java/com/rapidminer/gui/tools/VersionNumberOrderingTest.java +++ b/src/test/java/com/rapidminer/gui/tools/VersionNumberOrderingTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors *

* Complete list of developers available at our web site: *

diff --git a/src/test/java/com/rapidminer/io/process/XMLToolsTest.java b/src/test/java/com/rapidminer/io/process/XMLToolsTest.java new file mode 100644 index 000000000..9d2c4efcc --- /dev/null +++ b/src/test/java/com/rapidminer/io/process/XMLToolsTest.java @@ -0,0 +1,31 @@ +/** + * Copyright (C) 2001-2018 RapidMiner GmbH + */ +package com.rapidminer.io.process; + +import java.io.IOException; + +import org.junit.Assert; +import org.junit.Test; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + + +/** + * @author Andreas Timm + * @since 8.1 + */ +public class XMLToolsTest { + + @Test(expected = SAXParseException.class) + public void loadCorruptXml() throws IOException, SAXException { + XMLTools.createDocumentBuilder().parse(XMLToolsTest.class.getResourceAsStream("/com/rapidminer/io/process/XXE_corrupted.xml")); + } + + @Test + public void loadSomeProcessXml() throws IOException, SAXException { + Document document = XMLTools.createDocumentBuilder().parse(XMLToolsTest.class.getResourceAsStream("/com/rapidminer/io/process/some_process.xml")); + Assert.assertNotNull(document); + } +} diff --git a/src/test/java/com/rapidminer/operator/annotation/test/PolynomialFunctionTest.java b/src/test/java/com/rapidminer/operator/annotation/test/PolynomialFunctionTest.java index cee327a3b..1baf0f3fb 100644 --- a/src/test/java/com/rapidminer/operator/annotation/test/PolynomialFunctionTest.java +++ b/src/test/java/com/rapidminer/operator/annotation/test/PolynomialFunctionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/operator/learner/associations/AssociationRulesTest.java b/src/test/java/com/rapidminer/operator/learner/associations/AssociationRulesTest.java index b39459113..0d3d2f178 100644 --- a/src/test/java/com/rapidminer/operator/learner/associations/AssociationRulesTest.java +++ b/src/test/java/com/rapidminer/operator/learner/associations/AssociationRulesTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/operator/nio/model/xlsx/XlsxUtiliesTest.java b/src/test/java/com/rapidminer/operator/nio/model/xlsx/XlsxUtiliesTest.java index d139a9fe3..d8c72997f 100644 --- a/src/test/java/com/rapidminer/operator/nio/model/xlsx/XlsxUtiliesTest.java +++ b/src/test/java/com/rapidminer/operator/nio/model/xlsx/XlsxUtiliesTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/operator/performance/test/AbstractCriterionTestCase.java b/src/test/java/com/rapidminer/operator/performance/test/AbstractCriterionTestCase.java index 35f9fde48..1eaccebb5 100644 --- a/src/test/java/com/rapidminer/operator/performance/test/AbstractCriterionTestCase.java +++ b/src/test/java/com/rapidminer/operator/performance/test/AbstractCriterionTestCase.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/operator/performance/test/ClassificationCriterionTest.java b/src/test/java/com/rapidminer/operator/performance/test/ClassificationCriterionTest.java index 06e244671..61d55cc19 100644 --- a/src/test/java/com/rapidminer/operator/performance/test/ClassificationCriterionTest.java +++ b/src/test/java/com/rapidminer/operator/performance/test/ClassificationCriterionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/operator/performance/test/EstimatedCriterionTest.java b/src/test/java/com/rapidminer/operator/performance/test/EstimatedCriterionTest.java index bc748ac9e..ef4abe2e0 100644 --- a/src/test/java/com/rapidminer/operator/performance/test/EstimatedCriterionTest.java +++ b/src/test/java/com/rapidminer/operator/performance/test/EstimatedCriterionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/operator/performance/test/MeasuredCriterionTest.java b/src/test/java/com/rapidminer/operator/performance/test/MeasuredCriterionTest.java index 1770e33ad..2e504c869 100644 --- a/src/test/java/com/rapidminer/operator/performance/test/MeasuredCriterionTest.java +++ b/src/test/java/com/rapidminer/operator/performance/test/MeasuredCriterionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/operator/preprocessing/MaterializeDataInMemoryTest.java b/src/test/java/com/rapidminer/operator/preprocessing/MaterializeDataInMemoryTest.java index c2b70dfa3..8b86b8b12 100644 --- a/src/test/java/com/rapidminer/operator/preprocessing/MaterializeDataInMemoryTest.java +++ b/src/test/java/com/rapidminer/operator/preprocessing/MaterializeDataInMemoryTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/repository/resource/ConcurrentRepositoryTest.java b/src/test/java/com/rapidminer/repository/resource/ConcurrentRepositoryTest.java index 0aaf1d23b..196eefc03 100644 --- a/src/test/java/com/rapidminer/repository/resource/ConcurrentRepositoryTest.java +++ b/src/test/java/com/rapidminer/repository/resource/ConcurrentRepositoryTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/repository/resource/TestIOObject.java b/src/test/java/com/rapidminer/repository/resource/TestIOObject.java index f043ca70b..c8b5fcddb 100644 --- a/src/test/java/com/rapidminer/repository/resource/TestIOObject.java +++ b/src/test/java/com/rapidminer/repository/resource/TestIOObject.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/search/AbstractGlobalSearchManagerTest.java b/src/test/java/com/rapidminer/search/AbstractGlobalSearchManagerTest.java new file mode 100644 index 000000000..af7496d70 --- /dev/null +++ b/src/test/java/com/rapidminer/search/AbstractGlobalSearchManagerTest.java @@ -0,0 +1,137 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.util.List; +import java.util.Map; + +import org.apache.lucene.document.Document; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.mockito.Mockito; + +import com.rapidminer.gui.tools.ProgressThread; +import com.rapidminer.search.event.GlobalSearchManagerListener; + + +/** + * Test the existing impl from {@link AbstractGlobalSearchManager} + * + * @author Andreas Timm + * @since 8.1 + */ +public class AbstractGlobalSearchManagerTest { + + private static final String TEST = "test"; + + private static AbstractGlobalSearchManagerTestImpl searchManagerTest; + private static GlobalSearchManagerListener globalSearchManagerListenerTest; + + @BeforeClass + public static void setup() { + globalSearchManagerListenerTest = Mockito.mock(GlobalSearchManagerListener.class); + searchManagerTest = new AbstractGlobalSearchManagerTestImpl(); + searchManagerTest.getSearchManagerEventHandler().addEventListener(globalSearchManagerListenerTest); + searchManagerTest.initialize(); + } + + @Before + public void waitTillReady() throws InterruptedException { + while(!searchManagerTest.isInitialized()) { + Thread.sleep(100); + } + } + + @AfterClass + public static void teardown() { + searchManagerTest.getSearchManagerEventHandler().removeEventListener(globalSearchManagerListenerTest); + } + + @Test(expected = IllegalArgumentException.class) + public void addDocumentNullTest() { + searchManagerTest.addDoc(null); + } + + @Test + public void addAndRemoveDocumentTest() throws InterruptedException { + Document adoc = GlobalSearchUtilities.INSTANCE.createDocument("1", "title"); + Mockito.verify(globalSearchManagerListenerTest, Mockito.times(0)).documentsUpdated(Mockito.anyString(), Mockito.anyCollection()); + searchManagerTest.addDoc(adoc); + Mockito.verify(globalSearchManagerListenerTest, Mockito.times(1)).documentsUpdated(Mockito.anyString(), Mockito.anyCollection()); + Mockito.verify(globalSearchManagerListenerTest, Mockito.times(0)).documentsRemoved(Mockito.anyString(), Mockito.anyCollection()); + searchManagerTest.remDoc(adoc); + Mockito.verify(globalSearchManagerListenerTest, Mockito.times(1)).documentsUpdated(Mockito.anyString(), Mockito.anyCollection()); + Mockito.verify(globalSearchManagerListenerTest, Mockito.times(1)).documentsRemoved(Mockito.anyString(), Mockito.anyCollection()); + } + + @Test(expected = IllegalArgumentException.class) + public void addDocumentsNullTest() { + searchManagerTest.addDocs(null); + } + + @Test(expected = IllegalArgumentException.class) + public void remDocumentNullTest() { + searchManagerTest.remDoc(null); + } + + @Test(expected = IllegalArgumentException.class) + public void remDocumentsNullTest() { + searchManagerTest.remDocs(null); + } + + + private static class AbstractGlobalSearchManagerTestImpl extends AbstractGlobalSearchManager { + + protected AbstractGlobalSearchManagerTestImpl(String categoryId, Map additionalFieldDescriptions, GlobalSearchDefaultField... additionalDefaultSearchFields) { + super(categoryId, additionalFieldDescriptions, additionalDefaultSearchFields); + } + + public AbstractGlobalSearchManagerTestImpl() { + super(TEST, null); + } + + @Override + protected void init() { + + } + + @Override + protected List createInitialIndex(ProgressThread progressThread) { + return null; + } + + private void addDoc(Document doc) { + addDocumentToIndex(doc); + } + + private void addDocs(List docs) { + addDocumentsToIndex(docs); + } + + private void remDoc(Document document) { + removeDocumentFromIndex(document); + } + + private void remDocs(List docs) { + removeDocumentsFromIndex(docs); + } + } +} diff --git a/src/test/java/com/rapidminer/search/GlobalSearchCategoryTest.java b/src/test/java/com/rapidminer/search/GlobalSearchCategoryTest.java new file mode 100644 index 000000000..04b2eb460 --- /dev/null +++ b/src/test/java/com/rapidminer/search/GlobalSearchCategoryTest.java @@ -0,0 +1,73 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import org.junit.Assert; +import org.junit.Test; + + +/** + * Test methods from GlobalSearchCategory + * + * @author Andreas Timm + * @since 8.1 + */ +public class GlobalSearchCategoryTest { + + @Test + public void testEqualsHashcode() { + GlobalSearchCategory cat1 = new GlobalSearchCategory("cat1", null); + GlobalSearchCategory cat2 = new GlobalSearchCategory("cat2", null); + GlobalSearchCategory cat3 = new GlobalSearchCategory("cat3", null); + + Object o = null; + Object object = new Object(); + + Assert.assertTrue(cat1.equals(cat1)); + Assert.assertTrue(cat2.equals(cat2)); + Assert.assertTrue(cat3.equals(cat3)); + + Assert.assertEquals(cat1.hashCode(), cat1.hashCode()); + Assert.assertEquals(cat2.hashCode(), cat2.hashCode()); + Assert.assertEquals(cat3.hashCode(), cat3.hashCode()); + + Assert.assertFalse(cat1.equals(o)); + Assert.assertFalse(cat1.equals(object)); + Assert.assertFalse(cat2.equals(o)); + Assert.assertFalse(cat2.equals(object)); + Assert.assertFalse(cat3.equals(o)); + Assert.assertFalse(cat3.equals(object)); + + Assert.assertFalse(cat1.equals(cat2)); + Assert.assertFalse(cat1.equals(cat3)); + Assert.assertFalse(cat2.equals(cat1)); + Assert.assertFalse(cat2.equals(cat3)); + Assert.assertFalse(cat3.equals(cat1)); + Assert.assertFalse(cat3.equals(cat2)); + + Assert.assertNotEquals(cat1.hashCode(), cat2.hashCode()); + Assert.assertNotEquals(cat1.hashCode(), cat3.hashCode()); + Assert.assertNotEquals(cat2.hashCode(), cat3.hashCode()); + + Assert.assertNotEquals(cat1.hashCode(), object.hashCode()); + Assert.assertNotEquals(cat2.hashCode(), object.hashCode()); + Assert.assertNotEquals(cat3.hashCode(), object.hashCode()); + + } +} diff --git a/src/test/java/com/rapidminer/search/GlobalSearchHandlerTest.java b/src/test/java/com/rapidminer/search/GlobalSearchHandlerTest.java new file mode 100644 index 000000000..d192ee3ba --- /dev/null +++ b/src/test/java/com/rapidminer/search/GlobalSearchHandlerTest.java @@ -0,0 +1,198 @@ +/** + * + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.lucene.queryparser.classic.ParseException; +import org.apache.lucene.search.ScoreDoc; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.rapidminer.search.util.GlobalSearchableTextTest; + + +/** + * Tests for all methods from class {@link GlobalSearchHandler} + * + * @author Andreas Timm + * @since 8.1 + */ +public class GlobalSearchHandlerTest { + + private static GlobalSearchableTextTest searchable; + + @BeforeClass + public static void setup() { + GlobalSearchIndexer.INSTANCE.initialize(); + + searchable = new GlobalSearchableTextTest(); + GlobalSearchRegistry.INSTANCE.registerSearchCategory(searchable); + } + + @Before + public void waitTillReady() throws ParseException { + while (!searchable.isInitialized()) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + } + boolean foundResults = false; + while (!foundResults) { + foundResults = new GlobalSearchResultBuilder("life").runSearch().getNumberOfResults() > 0; + } + } + + @AfterClass + public static void teardown() { + GlobalSearchRegistry.INSTANCE.unregisterSearchCategory(searchable); + } + + @Test + public void searchNullQuery() throws ParseException { + List categories = null; + boolean simpleMode = true; + int maxNumberOfResults = 23; + boolean highlightResult = false; + ScoreDoc after = null; + GlobalSearchResult searchResult = GlobalSearchHandler.INSTANCE.search(null, categories, simpleMode, maxNumberOfResults, highlightResult, after); + Assert.assertEquals("The result has to be empty since nothing was added to the Global Search", 0, searchResult.getNumberOfResults()); + } + + @Test + public void searchEmptyQuery() throws ParseException { + String searchQueryString = ""; + List categories = null; + boolean simpleMode = true; + int maxNumberOfResults = 23; + boolean highlightResult = false; + ScoreDoc after = null; + GlobalSearchResult searchResult = GlobalSearchHandler.INSTANCE.search(searchQueryString, categories, simpleMode, maxNumberOfResults, highlightResult, after); + Assert.assertEquals("The result has to be empty since nothing was added to the Global Search", 0, searchResult.getNumberOfResults()); + + searchQueryString = " \t \n \t \r "; + searchResult = GlobalSearchHandler.INSTANCE.search(searchQueryString, categories, simpleMode, maxNumberOfResults, highlightResult, after); + Assert.assertEquals("The result has to be empty since nothing was added to the Global Search", 0, searchResult.getNumberOfResults()); + } + + @Test + public void testSearch() throws ParseException { + List categories = null; + boolean simpleMode = true; + int maxNumberOfResults = 23; + boolean highlightResult = false; + ScoreDoc after = null; + + String searchQueryString = "searchQueryString"; + int expected = 0; + GlobalSearchResult searchResult = checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, highlightResult, after, searchQueryString, expected); + Assert.assertEquals("The result has to be empty, '" + searchQueryString + "' was not added to the Global Search", 0, searchResult.getNumberOfResults()); + + searchQueryString = "life"; + expected = 3; + GlobalSearchResult life = checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, highlightResult, after, searchQueryString, expected); + Assert.assertEquals("The ROW info for the first document should be 32", "32", life.getResultDocuments().get(0).get(GlobalSearchableTextTest.ROW)); + Assert.assertEquals("The ROW info for the second document should be 36", "36", life.getResultDocuments().get(1).get(GlobalSearchableTextTest.ROW)); + Assert.assertEquals("The ROW info for the third document should be 57", "57", life.getResultDocuments().get(2).get(GlobalSearchableTextTest.ROW)); + checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, !highlightResult, after, searchQueryString, expected); + + expected = 7; + simpleMode = false; + searchQueryString = "*er"; + checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, highlightResult, after, searchQueryString, expected); + checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, !highlightResult, after, searchQueryString, expected); + } + + private GlobalSearchResult checkGlobalSearchResult(List categories, boolean simpleMode, int maxNumberOfResults, boolean highlightResult, ScoreDoc after, String searchQueryString, int expected) throws ParseException { + GlobalSearchResult life = GlobalSearchHandler.INSTANCE.search(searchQueryString, categories, simpleMode, maxNumberOfResults, highlightResult, after); + Assert.assertEquals("Should have found " + expected + " results for " + (simpleMode ? "simple" : "advanced") + " searchQuery '" + searchQueryString + "'" + (after != null ? " after given ScoreDoc" : ""), expected, life.getNumberOfResults()); + if (highlightResult) { + Assert.assertEquals("Should have found " + expected + " highlight results for " + (simpleMode ? "simple" : "advanced") + " searchQuery '" + searchQueryString + "'" + (after != null ? " after given ScoreDoc" : ""), expected, life.getBestFragments().size()); + } else { + Assert.assertNull("No highlights expected", life.getBestFragments()); + } + return life; + } + + @Test + public void searchInCategory() throws ParseException { + List categories = new ArrayList<>(1); + categories.add(GlobalSearchRegistry.INSTANCE.getSearchCategoryById(searchable.getSearchManager().getSearchCategoryId())); + boolean highlightResult = false; + int expected = 3; + + String searchQueryString = "life"; + checkGlobalSearchResult(categories, true, 23, highlightResult, null, searchQueryString, expected); + checkGlobalSearchResult(categories, true, 23, !highlightResult, null, searchQueryString, expected); + } + + @Test + public void searchAfter() throws ParseException { + int maxNumberOfResults = 2; + String searchQueryString = "*er"; + boolean simpleMode = false; + boolean highlightResult = false; + List categories = null; + ScoreDoc after = null; + checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, highlightResult, after, searchQueryString, maxNumberOfResults); + GlobalSearchResult anyer = checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, !highlightResult, after, searchQueryString, maxNumberOfResults); + Assert.assertEquals("Should have found " + maxNumberOfResults + " results for not simple searchQuery '" + searchQueryString + "' first search", maxNumberOfResults, anyer.getNumberOfResults()); + + after = anyer.getLastResult(); + checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, highlightResult, after, searchQueryString, maxNumberOfResults); + anyer = checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, !highlightResult, after, searchQueryString, maxNumberOfResults); + Assert.assertEquals("Should have found " + maxNumberOfResults + " results for not simple searchQuery '" + searchQueryString + "' after previous search last result", maxNumberOfResults, anyer.getNumberOfResults()); + + after = anyer.getLastResult(); + checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, highlightResult, after, searchQueryString, maxNumberOfResults); + anyer = checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, !highlightResult, after, searchQueryString, maxNumberOfResults); + Assert.assertEquals("Should have found " + maxNumberOfResults + " results for not simple searchQuery '" + searchQueryString + "' after previous search last result", maxNumberOfResults, anyer.getNumberOfResults()); + + after = anyer.getLastResult(); + int expected = 1; + checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, highlightResult, after, searchQueryString, expected); + anyer = checkGlobalSearchResult(categories, simpleMode, maxNumberOfResults, !highlightResult, after, searchQueryString, expected); + Assert.assertEquals("Should have found " + 0 + " results for not simple searchQuery '" + searchQueryString + "' after previous search last result", expected, anyer.getNumberOfResults()); + } + + @Test + public void useAdvancedSyntax() throws ParseException { + String searchQueryString = "let AND go"; + boolean simpleMode = true; + boolean highlightResult = false; + int expected = 8; + checkGlobalSearchResult(null, simpleMode, 35, highlightResult, null, searchQueryString, expected); + checkGlobalSearchResult(null, simpleMode, 35, !highlightResult, null, searchQueryString, expected); + } + + @Test + public void formatFindings() throws ParseException { + String searchQueryString = "magnifico"; + boolean simpleMode = true; + boolean highlightResult = true; + int expected = 1; + checkGlobalSearchResult(null, simpleMode, 35, highlightResult, null, searchQueryString, expected); + checkGlobalSearchResult(null, simpleMode, 35, !highlightResult, null, searchQueryString, expected); + } +} diff --git a/src/test/java/com/rapidminer/search/GlobalSearchRegistryTest.java b/src/test/java/com/rapidminer/search/GlobalSearchRegistryTest.java new file mode 100644 index 000000000..ee67e8014 --- /dev/null +++ b/src/test/java/com/rapidminer/search/GlobalSearchRegistryTest.java @@ -0,0 +1,174 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.util.List; + +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.mockito.Mockito; + +import com.rapidminer.search.event.GlobalSearchManagerEventHandler; +import com.rapidminer.search.event.GlobalSearchRegistryEventListener; + + +/** + * Testing methods provided in the class {@link GlobalSearchRegistry} + * + * @author Andreas Timm + * @since 8.1 + */ +public class GlobalSearchRegistryTest { + + private static final String NONEXISTENTCAT = "foo"; + private static final String ACATEGORY = "testcat"; + + private static GlobalSearchRegistryEventListener searchRegistryEventListener; + + @BeforeClass + public static void setup() { + GlobalSearchIndexer.INSTANCE.initialize(); + + searchRegistryEventListener = Mockito.mock(GlobalSearchRegistryEventListener.class); + GlobalSearchRegistry.INSTANCE.addEventListener(searchRegistryEventListener); + + GlobalSearchManager searchManagerMock = Mockito.mock(GlobalSearchManager.class); + Mockito.when(searchManagerMock.getSearchCategoryId()).thenReturn(ACATEGORY); + Mockito.when(searchManagerMock.getSearchManagerEventHandler()).thenReturn(Mockito.mock(GlobalSearchManagerEventHandler.class)); + GlobalSearchable globalSearchable = createGlobalSearchable(searchManagerMock); + GlobalSearchRegistry.INSTANCE.registerSearchCategory(globalSearchable); + + Mockito.verify(searchRegistryEventListener, Mockito.times(1)).searchCategoryRegistrationChanged(Mockito.any(), Mockito.any()); + } + + @Test(expected = NullPointerException.class) + public void getCategoryNull() { + GlobalSearchRegistry.INSTANCE.getSearchCategoryById(null); + } + + @Test + public void getNonexistentCategory() { + GlobalSearchCategory searchCategoryById = GlobalSearchRegistry.INSTANCE.getSearchCategoryById(NONEXISTENTCAT); + Assert.assertNull(NONEXISTENTCAT + " is not an existing category name but searching it resulted in " + searchCategoryById, searchCategoryById); + Assert.assertFalse(GlobalSearchRegistry.INSTANCE.isSearchCategoryRegistered(NONEXISTENTCAT)); + } + + @Test + public void registerNullAsSearchable() { + try { + GlobalSearchRegistry.INSTANCE.registerSearchCategory(null); + Assert.fail("Successfully registered null as GlobalSearchable"); + } catch (IllegalArgumentException iae) { + Assert.assertEquals("Exception message changed", "searchable must not be null!", iae.getMessage()); + } + } + + @Test + public void registerSearchableWithoutSearchManager() { + try { + GlobalSearchable searchable = createGlobalSearchable(null); + + GlobalSearchRegistry.INSTANCE.registerSearchCategory(searchable); + Assert.fail("Successfully registered a GlobalSearchable without a GlobalSearchManager"); + } catch (IllegalArgumentException iae) { + Assert.assertEquals("Exception message changed", "searchable must not return null for the GlobalSearchManager!", iae.getMessage()); + } + } + + @Test + public void registerSearchableWithSearchManagerWithoutDefaultSearchFields() { + try { + GlobalSearchManager searchManagerMock = Mockito.mock(GlobalSearchManager.class); + Mockito.when(searchManagerMock.getSearchCategoryId()).thenReturn(NONEXISTENTCAT); + Mockito.when(searchManagerMock.getAdditionalDefaultSearchFields()).thenReturn(null); + GlobalSearchable searchable = createGlobalSearchable(searchManagerMock); + + GlobalSearchRegistry.INSTANCE.registerSearchCategory(searchable); + Assert.fail("Successfully registered a GlobalSearchable with a GlobalSearchManager without defaultSearchFields"); + } catch (IllegalArgumentException iae) { + Assert.assertEquals("Exception message changed", "getAdditionalDefaultSearchFields() must not return null!", iae.getMessage()); + } + } + + + @Test + public void registerSearchableWithSearchManagerWithoutCategoryId() { + try { + GlobalSearchManager searchManagerMock = Mockito.mock(GlobalSearchManager.class); + Mockito.when(searchManagerMock.getSearchCategoryId()).thenReturn(null); + Mockito.when(searchManagerMock.getAdditionalDefaultSearchFields()).thenReturn(null); + GlobalSearchable searchable = createGlobalSearchable(searchManagerMock); + + GlobalSearchRegistry.INSTANCE.registerSearchCategory(searchable); + Assert.fail("Successfully registered a GlobalSearchable with a GlobalSearchManager without searchCategoryId"); + } catch (IllegalArgumentException iae) { + Assert.assertEquals("Exception message changed", "getAdditionalDefaultSearchFields() must not return null!", iae.getMessage()); + } + } + + @Test + public void checkExistingCategories() { + List allSearchCategories = GlobalSearchRegistry.INSTANCE.getAllSearchCategories(); + Assert.assertEquals("Only one search category was registered successfully and should therefore be available", 1, allSearchCategories.size()); + Assert.assertEquals("The only known category should be " + ACATEGORY, ACATEGORY, allSearchCategories.get(0).getCategoryId()); + Assert.assertTrue(ACATEGORY + " should be known", GlobalSearchRegistry.INSTANCE.isSearchCategoryRegistered(ACATEGORY)); + Assert.assertNotNull(GlobalSearchRegistry.INSTANCE.getSearchCategoryById(ACATEGORY)); + } + + @Test + public void checkEventlistenerObjects() { + Exception e = null; + try { + GlobalSearchRegistry.INSTANCE.addEventListener(null); + } catch (Exception caught) { + e = caught; + } + Assert.assertTrue(e instanceof IllegalArgumentException); + Assert.assertEquals("Resulting error message for null as added event listener differs", "listener must not be null!", e.getMessage()); + + e = null; + try { + GlobalSearchRegistry.INSTANCE.removeEventListener(null); + } catch (Exception caught) { + e = caught; + } + Assert.assertTrue(e instanceof IllegalArgumentException); + Assert.assertEquals("Resulting error message for null as removed event listener differs", "listener must not be null!", e.getMessage()); + } + + @AfterClass + public static void teardown() { + GlobalSearchManager searchManagerMock = Mockito.mock(GlobalSearchManager.class); + Mockito.when(searchManagerMock.getSearchCategoryId()).thenReturn(ACATEGORY); + GlobalSearchRegistry.INSTANCE.unregisterSearchCategory(createGlobalSearchable(searchManagerMock)); + Assert.assertFalse(GlobalSearchRegistry.INSTANCE.isSearchCategoryRegistered(ACATEGORY)); + Assert.assertNull(GlobalSearchRegistry.INSTANCE.getSearchCategoryById(ACATEGORY)); + + Mockito.verify(searchRegistryEventListener, Mockito.times(2)).searchCategoryRegistrationChanged(Mockito.any(), Mockito.any()); + GlobalSearchRegistry.INSTANCE.removeEventListener(searchRegistryEventListener); + + } + + private static GlobalSearchable createGlobalSearchable(GlobalSearchManager searchManager) { + return () -> searchManager; + } + +} diff --git a/src/test/java/com/rapidminer/search/GlobalSearchResultBuilderTest.java b/src/test/java/com/rapidminer/search/GlobalSearchResultBuilderTest.java new file mode 100644 index 000000000..81b5ebe6a --- /dev/null +++ b/src/test/java/com/rapidminer/search/GlobalSearchResultBuilderTest.java @@ -0,0 +1,153 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import org.apache.lucene.document.Document; +import org.apache.lucene.queryparser.classic.ParseException; +import org.apache.lucene.search.ScoreDoc; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.rapidminer.search.util.GlobalSearchableTextTest; + + +/** + * Tests for methods of class {@link GlobalSearchResultBuilder} + * + * @author Andreas Timm + * @since 8.1 + */ +public class GlobalSearchResultBuilderTest { + + + private static GlobalSearchableTextTest searchable; + + @BeforeClass + public static void setup() { + GlobalSearchIndexer.INSTANCE.initialize(); + + searchable = new GlobalSearchableTextTest(); + GlobalSearchRegistry.INSTANCE.registerSearchCategory(searchable); + } + + @Before + public void waitTillReady() { + while (!searchable.isInitialized()) { + try { + Thread.sleep(100l); + } catch (InterruptedException e) { + } + } + } + + @AfterClass + public static void teardown() { + GlobalSearchRegistry.INSTANCE.unregisterSearchCategory(searchable); + } + + @Test + public void testVariants() throws ParseException { + final String[] queries = {"carry", "bismillah", "me", "nothing else matters", "nothing AND matters"}; + final boolean[] bools = {Boolean.FALSE, Boolean.TRUE}; + final int maxMaxNumberOfResults = 10; + ScoreDoc after = null; + + GlobalSearchCategory[] categories = null; + for (String query : queries) { + for (boolean highlightResult : bools) { + for (int maxNumberOfResults = 1; maxNumberOfResults <= maxMaxNumberOfResults; maxNumberOfResults++) { + for (boolean simpleMode : bools) { + GlobalSearchResultBuilder gsr = new GlobalSearchResultBuilder(query).setHighlightResult(highlightResult).setMaxNumberOfResults(maxNumberOfResults).setSimpleMode(simpleMode).setSearchOffset(after).setSearchCategories(categories); + GlobalSearchResult searchResult = gsr.runSearch(); + Assert.assertNotNull(searchResult); + if (highlightResult) { + Assert.assertEquals(searchResult.getNumberOfResults(), searchResult.getBestFragments().size()); + } else { + Assert.assertNull(searchResult.getBestFragments()); + } + Assert.assertTrue("Should not find more results than expected", searchResult.getNumberOfResults() <= maxMaxNumberOfResults); + } + } + } + } + } + + @Test + public void justSearch() throws ParseException { + GlobalSearchResult life = new GlobalSearchResultBuilder("life").runSearch(); + int expected = 3; + Assert.assertEquals("Should have found 3 results for searchQuery 'life'", expected, life.getNumberOfResults()); + Assert.assertEquals("The ROW info for the first document should be 0", "0", life.getResultDocuments().get(0).get(GlobalSearchableTextTest.ROW)); + Assert.assertEquals("The ROW info for the second document should be 13", "13", life.getResultDocuments().get(1).get(GlobalSearchableTextTest.ROW)); + Assert.assertEquals("The ROW info for the third document should be 38", "38", life.getResultDocuments().get(2).get(GlobalSearchableTextTest.ROW)); + } + + @Test(expected = IllegalArgumentException.class) + public void badMaxNumberResultsMinusDroelf() { + new GlobalSearchResultBuilder("scara").setMaxNumberOfResults(Integer.MIN_VALUE); + } + + @Test(expected = IllegalArgumentException.class) + public void badMaxNumberResultsMinusOne() { + new GlobalSearchResultBuilder("scara").setMaxNumberOfResults(-1); + } + + @Test(expected = IllegalArgumentException.class) + public void badMaxNumberResultsZerro() { + new GlobalSearchResultBuilder("scara").setMaxNumberOfResults(0); + } + + @Test(expected = IllegalArgumentException.class) + public void badNullQuery() { + new GlobalSearchResultBuilder(null); + } + + @Test(expected = IllegalArgumentException.class) + public void badWhitespaceQuery() { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 256; i++) { + if (Character.isWhitespace(i)) { + sb.append((char) i); + } + } + new GlobalSearchResultBuilder(sb.toString()); + } + + @Test + public void badScoreDoc() throws ParseException { + int maxNumberOfResults = 2; + String searchQueryString = "*er"; + GlobalSearchResult anyer = new GlobalSearchResultBuilder(searchQueryString).setMaxNumberOfResults(maxNumberOfResults).setSearchCategories(GlobalSearchRegistry.INSTANCE.getSearchCategoryById(searchable.getCategoryId())).runSearch(); + Assert.assertEquals("Should have found " + maxNumberOfResults + " results for not simple searchQuery '" + searchQueryString + "' first search", maxNumberOfResults, anyer.getNumberOfResults()); + ScoreDoc after = anyer.getLastResult(); + + GlobalSearchResult life = new GlobalSearchResultBuilder("life").setSearchOffset(after).runSearch(); + for (Document doc : life.getResultDocuments()) { + System.out.println(doc); + } + } + + @Test(expected = IllegalArgumentException.class) + public void badCategory() { + new GlobalSearchResultBuilder("no").setSearchCategories(GlobalSearchRegistry.INSTANCE.getSearchCategoryById("thisAintNoRealCategory")); + } +} diff --git a/src/test/java/com/rapidminer/search/ParallelUsageTest.java b/src/test/java/com/rapidminer/search/ParallelUsageTest.java new file mode 100644 index 000000000..66aca1ab7 --- /dev/null +++ b/src/test/java/com/rapidminer/search/ParallelUsageTest.java @@ -0,0 +1,313 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see http://www.gnu.org/licenses/. + */ +package com.rapidminer.search; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import org.apache.lucene.document.Document; +import org.apache.lucene.queryparser.classic.ParseException; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.rapidminer.search.event.GlobalSearchManagerListener; +import com.rapidminer.search.util.GlobalSearchableTextTest; + + +/** + * Test the global search framework with parallel usage, running 3 threads which add and delete documents from 3 different categories. + * At the same time 3 clients will use the search and make sure the correct results are found. + * Also at the same time 3 more threads add and remove event listeners for the categories to make sure synchronization works properly. + * + * @author Andreas Timm + * @since 8.1 + */ +public class ParallelUsageTest { + + private static int DOCS_COUNT = 9; // has to be a multiple of the amount of elements in the texts list array + private static int MIN_AVAILABLE_DOCS = 5; // will make at least this and at most +1 elements available to be searched + + private static final int DURATION_IN_SECONDS = 10; + + private static List instances = new ArrayList<>(); + private static List texts = new ArrayList<>(); + + private static List exceptions; + private static List errors; + + static { + // make the entries the same length + texts.add(new String[]{"asdf", "hjkl", "life"}); + texts.add(new String[]{"qwer", "tzui", "life"}); + texts.add(new String[]{"yxcv", "bnmp", "life"}); + } + + @BeforeClass + public static void setup() { + GlobalSearchIndexer.INSTANCE.initialize(); + + for (int i = 0; i < texts.size(); i++) { + int finalI = i; + GlobalSearchableTextTest.DocumentProvider provider = new GlobalSearchableTextTest.DocumentProvider() { + private int first = 0; + private int next = 0; + + @Override + public List getDocuments() { + List docs = new ArrayList<>(); + for (int i = 0; i < MIN_AVAILABLE_DOCS; i++) { + // create it like + // 0 asdf + // 1 hjkl + // 2 life + // 3 asdf + // .. + docs.add(getDocument(i)); + } + next = docs.size(); + return docs; + } + + private Document getDocument(int i) { + return GlobalSearchUtilities.INSTANCE.createDocument("category" + finalI + "_" + i, texts.get(finalI)[i % texts.get(finalI).length]); + } + + @Override + public Document getNext() { + Document doc = getDocument(next); + next = (next + 1) % DOCS_COUNT; + return doc; + } + + @Override + public Document getFirst() { + Document doc = getDocument(first); + first = (first + 1) % DOCS_COUNT; + return doc; + } + }; + instances.add(new Instance("instance" + i, i, provider)); + } + + for (Instance inst : instances) { + GlobalSearchRegistry.INSTANCE.registerSearchCategory(inst.getSearchable()); + } + } + + @Before + public void waitTillReady() { + for (Instance inst : instances) { + while (!inst.getSearchable().getSearchManager().isInitialized()) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + } + } + while (!GlobalSearchIndexer.INSTANCE.isInitialized()) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + } + exceptions = Collections.synchronizedList(new ArrayList<>()); + errors = Collections.synchronizedList(new ArrayList<>()); + + // so lucene needs some time to get up and running, we can only start the tests if it is ready. + boolean onefails = true; + while (onefails) { + onefails = true; + for (String[] text : texts) { + for (String query : text) { + try { + onefails = onefails && new GlobalSearchResultBuilder(query).runSearch().getNumberOfResults() == 0; + } catch (ParseException e) { + e.printStackTrace(); + } + } + } + } + } + + @AfterClass + public static void teardown() { + for (Instance inst : instances) { + GlobalSearchRegistry.INSTANCE.unregisterSearchCategory(inst.getSearchable()); + } + } + + @Test + public void execute() throws InterruptedException { + ExecutorService executorService = Executors.newFixedThreadPool(instances.size() * 3); + for (Instance inst : instances) { + executorService.execute(inst); + executorService.execute(new Searcher(inst)); + executorService.execute(new ChaosListener()); + } + + executorService.awaitTermination(DURATION_IN_SECONDS, TimeUnit.SECONDS); + executorService.shutdown(); + + for (Exception e : exceptions) { + e.printStackTrace(); + } + Assert.assertEquals("parallel execution did not run properly, there should be no Exceptions", 0, exceptions.size()); + + synchronized (errors) { + for (Error e : errors) { + e.printStackTrace(); + } + } + Assert.assertEquals("parallel execution did not run properly, there should be no AssertionErrors", 0, errors.size()); + } + + private static class Instance implements Runnable { + private final int id; + private GlobalSearchableTextTest searchable; + + public Instance(String categoryId, int i, GlobalSearchableTextTest.DocumentProvider provider) { + searchable = new GlobalSearchableTextTest(categoryId, provider); + id = i; + } + + public GlobalSearchable getSearchable() { + return searchable; + } + + @Override + public void run() { + while (true) { + try { + GlobalSearchableTextTest.TextGlobalSearchManagerTest searchManager = (GlobalSearchableTextTest.TextGlobalSearchManagerTest) searchable.getSearchManager(); + + Document nextDoc = searchManager.getTestDocumentProvider().getNext(); + searchManager.addDocumentToIndex(nextDoc); + try { + Thread.sleep(200); + } catch (InterruptedException e) { + } + + Document firstDoc = searchManager.getTestDocumentProvider().getFirst(); + searchManager.removeDocumentFromIndex(firstDoc); + try { + Thread.sleep(200); + } catch (InterruptedException e) { + } + } catch (Error error) { + errors.add(error); + } catch (Exception e) { + exceptions.add(e); + } + } + } + } + + private class Searcher implements Runnable { + private Instance instance; + + public Searcher(Instance inst) { + instance = inst; + } + + @Override + public void run() { + while (true) { + try { + Thread.sleep(99); + int sum = 0; + for (String query : texts.get(instance.id)) { + GlobalSearchCategory category = GlobalSearchRegistry.INSTANCE.getSearchCategoryById(instance.getSearchable().getSearchManager().getSearchCategoryId()); + GlobalSearchResult searchResult = new GlobalSearchResultBuilder(query).setSearchCategories(category).runSearch(); + try { + Assert.assertTrue(searchResult.getNumberOfResults() > 0); + Assert.assertTrue("expecting 1 or 2 results for " + query + ", but got: " + searchResult.getNumberOfResults(), searchResult.getNumberOfResults() < 3); + } catch (Error error) { + errors.add(error); + } + sum += searchResult.getNumberOfResults(); + } + Assert.assertTrue("every run should result in exactly 5 or 6 results, but this one has " + sum + " results", sum == MIN_AVAILABLE_DOCS || sum == MIN_AVAILABLE_DOCS + 1); + } catch (InterruptedException e) { + } catch (Error error) { + errors.add(error); + } catch (Exception e) { + exceptions.add(e); + } + } + } + } + + private class ChaosListener implements Runnable, GlobalSearchManagerListener { + private final Random rnd = new Random(); + + @Override + public void run() { + while (true) { + for (Instance in : instances) { + if (rnd.nextBoolean()) { + in.getSearchable().getSearchManager().getSearchManagerEventHandler().addEventListener(this); + } + } + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + for (Instance in : instances) { + if (rnd.nextBoolean()) { + try { + in.getSearchable().getSearchManager().getSearchManagerEventHandler().removeEventListener(this); + } catch (IllegalArgumentException e) { + + } + } + } + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + @Override + public void documentsAdded(String categoryId, Collection addedDocuments) { + + } + + @Override + public void documentsUpdated(String categoryId, Collection updatedDocuments) { + + } + + @Override + public void documentsRemoved(String categoryId, Collection removedDocuments) { + + } + } +} diff --git a/src/test/java/com/rapidminer/search/util/GlobalSearchableTextTest.java b/src/test/java/com/rapidminer/search/util/GlobalSearchableTextTest.java new file mode 100644 index 000000000..eaa10e060 --- /dev/null +++ b/src/test/java/com/rapidminer/search/util/GlobalSearchableTextTest.java @@ -0,0 +1,184 @@ +/** + * Copyright (C) 2001-2018 by RapidMiner and the contributors + * + * Complete list of developers available at our web site: + * + * http://rapidminer.com + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General + * Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more + * details. + * + * You should have received a copy of the GNU Affero General Public License along with this program. If not, see + * http://www.gnu.org/licenses/. + */ +package com.rapidminer.search.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; + +import com.rapidminer.gui.tools.ProgressThread; +import com.rapidminer.search.AbstractGlobalSearchManager; +import com.rapidminer.search.GlobalSearchDefaultField; +import com.rapidminer.search.GlobalSearchHandlerTest; +import com.rapidminer.search.GlobalSearchManager; +import com.rapidminer.search.GlobalSearchRegistry; +import com.rapidminer.search.GlobalSearchUtilities; +import com.rapidminer.search.GlobalSearchable; + + +/** + * The test setup for a GlobalSearchable with contained GlobalSearchManager + * + * @author Andreas Timm + * @since 8.1 + */ +public class GlobalSearchableTextTest implements GlobalSearchable { + + public static final String ROW = "ROW"; + public static final String DATA = "DATA"; + + private GlobalSearchManager manager; + + private boolean initialized = false; + private String CATEGORY_NAME = "texttest"; + + public GlobalSearchableTextTest() { + + } + + @Override + public GlobalSearchManager getSearchManager() { + if (manager == null) { + createManager(null); + } + return manager; + } + + private void createManager(DocumentProvider docprovider) { + Map additionalFieldsDesc = new HashMap<>(); + additionalFieldsDesc.put(ROW, "the row that contains this data"); + additionalFieldsDesc.put(DATA, "the data contained in a row"); + manager = new TextGlobalSearchManagerTest(CATEGORY_NAME, additionalFieldsDesc, docprovider, new GlobalSearchDefaultField(DATA, 0.5f)); + } + + public GlobalSearchableTextTest(String categoryId, DocumentProvider provider) { + this(categoryId); + createManager(provider); + } + + public GlobalSearchableTextTest(String categoryId) { + super(); + CATEGORY_NAME = categoryId; + } + + public String getCategoryId() { + return CATEGORY_NAME; + } + + + private void ready() { + initialized = true; + } + + public boolean isInitialized() { + return initialized; + } + + public class TextGlobalSearchManagerTest extends AbstractGlobalSearchManager { + + private DocumentProvider testDocumentProvider; + + /** + * Creates the text test global search manager + * + * @param categoryId + * the search category Id which was used to register to the {@link GlobalSearchRegistry} + * @param additionalFieldDescriptions + * see {@link GlobalSearchManager#getAdditionalFieldDescriptions()}. Can be {@code null} if no additional + * fields are created. + * @param additionalDefaultSearchFields + * see {@link GlobalSearchManager#getAdditionalDefaultSearchFields()}. Can be {@code null} for no additional + * default search fields. + */ + protected TextGlobalSearchManagerTest(String categoryId, Map additionalFieldDescriptions, DocumentProvider documentProvider, GlobalSearchDefaultField... additionalDefaultSearchFields) { + super(categoryId, additionalFieldDescriptions, additionalDefaultSearchFields); + testDocumentProvider = documentProvider; + } + + @Override + protected void init() { + try { + addDocumentsToIndex(createTestDocuments()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + protected List createInitialIndex(ProgressThread progressThread) { + progressThread.addProgressThreadListener((finishedprogressThread) -> ready()); + try { + if (testDocumentProvider != null) { + return testDocumentProvider.getDocuments(); + } + return createTestDocuments(); + } catch (IOException e) { + e.printStackTrace(); + return Collections.emptyList(); + } + } + + public List createTestDocuments() throws IOException { + if (testDocumentProvider != null) { + return testDocumentProvider.getDocuments(); + } + InputStream inputStream = GlobalSearchHandlerTest.class.getResourceAsStream("/com/rapidminer/search/br.txt"); + List result = new ArrayList<>(); + BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); + String line = null; + int row = 0; + while ((line = br.readLine()) != null) { + if (line.trim().isEmpty()) { + row++; + continue; + } + + Field[] fields = new Field[2]; + fields[0] = GlobalSearchUtilities.INSTANCE.createFieldForIdentifiers(ROW, String.valueOf(row)); + fields[1] = GlobalSearchUtilities.INSTANCE.createFieldForTexts(DATA, line); + Document document = GlobalSearchUtilities.INSTANCE.createDocument(String.valueOf(row), line.replaceAll(" ", "").substring(0, Math.min(4, line.replaceAll(" ", "").length())), fields); + + result.add(document); + row++; + } + return result; + } + + public DocumentProvider getTestDocumentProvider() { + return testDocumentProvider; + } + } + + public interface DocumentProvider { + List getDocuments(); + + Document getNext(); + + Document getFirst(); + } +} diff --git a/src/test/java/com/rapidminer/studio/concurrency/internal/ExampleSetAppenderTest.java b/src/test/java/com/rapidminer/studio/concurrency/internal/ExampleSetAppenderTest.java index 2aeaef43b..0ef84c31e 100644 --- a/src/test/java/com/rapidminer/studio/concurrency/internal/ExampleSetAppenderTest.java +++ b/src/test/java/com/rapidminer/studio/concurrency/internal/ExampleSetAppenderTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/studio/io/data/DataSetReaderTest.java b/src/test/java/com/rapidminer/studio/io/data/DataSetReaderTest.java index 75b91935c..4daadb4c0 100644 --- a/src/test/java/com/rapidminer/studio/io/data/DataSetReaderTest.java +++ b/src/test/java/com/rapidminer/studio/io/data/DataSetReaderTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/studio/io/data/internal/file/FileDataSourceTestUtils.java b/src/test/java/com/rapidminer/studio/io/data/internal/file/FileDataSourceTestUtils.java index 155d22183..365d2a999 100644 --- a/src/test/java/com/rapidminer/studio/io/data/internal/file/FileDataSourceTestUtils.java +++ b/src/test/java/com/rapidminer/studio/io/data/internal/file/FileDataSourceTestUtils.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSourceDataTest.java b/src/test/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSourceDataTest.java index c1a41262c..db00d9a89 100644 --- a/src/test/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSourceDataTest.java +++ b/src/test/java/com/rapidminer/studio/io/data/internal/file/csv/CSVDataSourceDataTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/studio/io/data/internal/file/csv/CSVResultSetAdapterTest.java b/src/test/java/com/rapidminer/studio/io/data/internal/file/csv/CSVResultSetAdapterTest.java index 0f59d5b6f..6ddce66b2 100644 --- a/src/test/java/com/rapidminer/studio/io/data/internal/file/csv/CSVResultSetAdapterTest.java +++ b/src/test/java/com/rapidminer/studio/io/data/internal/file/csv/CSVResultSetAdapterTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/AbstractExcelDataSourceDataTest.java b/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/AbstractExcelDataSourceDataTest.java index dfa74e955..674e42491 100644 --- a/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/AbstractExcelDataSourceDataTest.java +++ b/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/AbstractExcelDataSourceDataTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -33,6 +33,7 @@ import com.rapidminer.core.io.data.DataSetException; import com.rapidminer.core.io.data.DataSetRow; import com.rapidminer.core.io.data.ParseException; +import com.rapidminer.operator.nio.model.ExcelResultSetConfiguration; import com.rapidminer.studio.io.data.HeaderRowBehindStartRowException; import com.rapidminer.studio.io.data.HeaderRowNotFoundException; import com.rapidminer.studio.io.data.StartRowNotFoundException; @@ -329,7 +330,8 @@ public void missingInHeaderRow() throws DataSetException, ParseException { try (ExcelDataSource dataSource = new ExcelDataSource()) { dataSource.setLocation(testFile.toPath()); - dataSource.getResultSetConfiguration().setSheet(3); + dataSource.getResultSetConfiguration().setSheetByName("Tabelle3"); + dataSource.getResultSetConfiguration().setSheetSelectionMode(ExcelResultSetConfiguration.SheetSelectionMode.BY_NAME); dataSource.getResultSetConfiguration().setRowOffset(0); dataSource.setHeaderRowIndex(0); configureDataSource(dataSource); diff --git a/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceConfigurationTest.java b/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceConfigurationTest.java index dc191ccb8..0ff067a45 100644 --- a/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceConfigurationTest.java +++ b/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelDataSourceConfigurationTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelResultSetAdapterTest.java b/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelResultSetAdapterTest.java index 11c700fef..621c3d5c6 100644 --- a/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelResultSetAdapterTest.java +++ b/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/ExcelResultSetAdapterTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -38,7 +38,6 @@ import com.rapidminer.operator.nio.model.ExcelResultSetConfiguration; import com.rapidminer.studio.io.data.internal.ResultSetAdapter; import com.rapidminer.studio.io.data.internal.file.FileDataSourceTestUtils; -import com.rapidminer.studio.io.data.internal.file.excel.ExcelResultSetAdapter; /** @@ -172,7 +171,8 @@ public void testDateImport() // configure data import configuration.setWorkbookFile(testFile); - configuration.setSheet(2); + configuration.setSheetByName("Tabelle2"); + configuration.setSheetSelectionMode(ExcelResultSetConfiguration.SheetSelectionMode.BY_NAME); configuration.setDatePattern(datePattern); SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern); diff --git a/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/XlsDataSourceDataTest.java b/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/XlsDataSourceDataTest.java index af9fdb111..cab814786 100644 --- a/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/XlsDataSourceDataTest.java +++ b/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/XlsDataSourceDataTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/XlsxDataSourceDataTest.java b/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/XlsxDataSourceDataTest.java index 25a4490c5..84ecb9a61 100644 --- a/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/XlsxDataSourceDataTest.java +++ b/src/test/java/com/rapidminer/studio/io/data/internal/file/excel/XlsxDataSourceDataTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableModelTest.java b/src/test/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableModelTest.java index 424cc8da0..ca22da34b 100644 --- a/src/test/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableModelTest.java +++ b/src/test/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataTableModelTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataValidatorTest.java b/src/test/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataValidatorTest.java index 4d9ccbfc0..e97eb0694 100644 --- a/src/test/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataValidatorTest.java +++ b/src/test/java/com/rapidminer/studio/io/gui/internal/steps/configuration/ConfigureDataValidatorTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/test/EscapeTest.java b/src/test/java/com/rapidminer/test/EscapeTest.java index bd8ac9e70..20ec082c1 100644 --- a/src/test/java/com/rapidminer/test/EscapeTest.java +++ b/src/test/java/com/rapidminer/test/EscapeTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/test/IterationArrayListTest.java b/src/test/java/com/rapidminer/test/IterationArrayListTest.java index 48e6fc561..73e7beca9 100644 --- a/src/test/java/com/rapidminer/test/IterationArrayListTest.java +++ b/src/test/java/com/rapidminer/test/IterationArrayListTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/test/MathUtilsTest.java b/src/test/java/com/rapidminer/test/MathUtilsTest.java index 2ca5f0a39..39c0d7b1b 100644 --- a/src/test/java/com/rapidminer/test/MathUtilsTest.java +++ b/src/test/java/com/rapidminer/test/MathUtilsTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/test/OperatorVersionTest.java b/src/test/java/com/rapidminer/test/OperatorVersionTest.java index 2f4a81cc4..6b98f77c0 100644 --- a/src/test/java/com/rapidminer/test/OperatorVersionTest.java +++ b/src/test/java/com/rapidminer/test/OperatorVersionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/test/SECDTest.java b/src/test/java/com/rapidminer/test/SECDTest.java index e41941b95..0c78c3a99 100644 --- a/src/test/java/com/rapidminer/test/SECDTest.java +++ b/src/test/java/com/rapidminer/test/SECDTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/StrictDecimalFormatTest.java b/src/test/java/com/rapidminer/tools/StrictDecimalFormatTest.java index c1dd5bb13..919381878 100644 --- a/src/test/java/com/rapidminer/tools/StrictDecimalFormatTest.java +++ b/src/test/java/com/rapidminer/tools/StrictDecimalFormatTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * @@ -92,4 +92,33 @@ public void parseCommaDecimalSeparator() { assertNotNull(e.getMessage()); } } + + @Test + public void parseEmptyStrings() { + StrictDecimalFormat strictDecimalFormatComma = new StrictDecimalFormat(); + try { + strictDecimalFormatComma.parse(""); + fail(); + } catch (ParseException e){ + assertNotNull(e.getMessage()); + } + try { + strictDecimalFormatComma.parse(" "); + fail(); + } catch (ParseException e){ + assertNotNull(e.getMessage()); + } + try { + strictDecimalFormatComma.parse("\n"); + fail(); + } catch (ParseException e){ + assertNotNull(e.getMessage()); + } + try { + strictDecimalFormatComma.parse("\t"); + fail(); + } catch (ParseException e){ + assertNotNull(e.getMessage()); + } + } } diff --git a/src/test/java/com/rapidminer/tools/ToolsTest.java b/src/test/java/com/rapidminer/tools/ToolsTest.java index 9e81c6b72..c4c79d067 100644 --- a/src/test/java/com/rapidminer/tools/ToolsTest.java +++ b/src/test/java/com/rapidminer/tools/ToolsTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/documentation/OperatorDescriptionTest.java b/src/test/java/com/rapidminer/tools/documentation/OperatorDescriptionTest.java index b3c1c505c..c5c724d9c 100644 --- a/src/test/java/com/rapidminer/tools/documentation/OperatorDescriptionTest.java +++ b/src/test/java/com/rapidminer/tools/documentation/OperatorDescriptionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/antlr/ExpressionParserTest.java b/src/test/java/com/rapidminer/tools/expression/internal/antlr/ExpressionParserTest.java index 886072e2c..57a315052 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/antlr/ExpressionParserTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/antlr/ExpressionParserTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/antlr/ParserConstantsTest.java b/src/test/java/com/rapidminer/tools/expression/internal/antlr/ParserConstantsTest.java index 5b071be54..f499a878b 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/antlr/ParserConstantsTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/antlr/ParserConstantsTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/antlr/ParserExamplesAndMacrosTest.java b/src/test/java/com/rapidminer/tools/expression/internal/antlr/ParserExamplesAndMacrosTest.java index de90272e2..c1eb81502 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/antlr/ParserExamplesAndMacrosTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/antlr/ParserExamplesAndMacrosTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AnltrParserIfTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AnltrParserIfTest.java index 35fb45195..cc78b5b35 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AnltrParserIfTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AnltrParserIfTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserBasicTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserBasicTest.java index 44230ebab..057314f22 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserBasicTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserBasicTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserBitwiseTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserBitwiseTest.java index 53117aee1..1744edf67 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserBitwiseTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserBitwiseTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserComparisonTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserComparisonTest.java index daa67636d..12c068fa3 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserComparisonTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserComparisonTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserConversionTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserConversionTest.java index 2bb4b5ad9..5c763469c 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserConversionTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserConversionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserDateTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserDateTest.java index 973b90151..1c6645151 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserDateTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserDateTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserEqualsTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserEqualsTest.java index c9619da90..a08032703 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserEqualsTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserEqualsTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserEvalTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserEvalTest.java index c54bbef48..0ef5f614f 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserEvalTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserEvalTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserLogicalTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserLogicalTest.java index ffd702104..65851cdc5 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserLogicalTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserLogicalTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserMathematicalTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserMathematicalTest.java index 10306f5a8..f8891797b 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserMathematicalTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserMathematicalTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserProcessFunctionTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserProcessFunctionTest.java index 6cb26cfdb..f1f45539f 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserProcessFunctionTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserProcessFunctionTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserRoundingTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserRoundingTest.java index 6ab7350ac..97a128445 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserRoundingTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserRoundingTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStatisticalTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStatisticalTest.java index b1be9aa78..2de5eafcc 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStatisticalTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStatisticalTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStringInformationTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStringInformationTest.java index 221fcedc5..c82904c1a 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStringInformationTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStringInformationTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStringTransformationTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStringTransformationTest.java index 50d204cfe..70c48c8c3 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStringTransformationTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserStringTransformationTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserTest.java index 77311c730..f7ce778e8 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserTrigonometricTest.java b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserTrigonometricTest.java index a1f7c742f..4702382e0 100644 --- a/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserTrigonometricTest.java +++ b/src/test/java/com/rapidminer/tools/expression/internal/function/AntlrParserTrigonometricTest.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2001-2017 by RapidMiner and the contributors + * Copyright (C) 2001-2018 by RapidMiner and the contributors * * Complete list of developers available at our web site: * diff --git a/src/test/resources/com/rapidminer/gui/security/secrets.xml b/src/test/resources/com/rapidminer/gui/security/secrets.xml new file mode 100644 index 000000000..c55ac875c --- /dev/null +++ b/src/test/resources/com/rapidminer/gui/security/secrets.xml @@ -0,0 +1,30 @@ + + + ServerVersion8 + http://localhost:8080/ + foo + YmFyYmFyYmFy + + + ServerVersion8 + http://localhost:8081/ + admin + Y2hhbmdlaXQ= + + + http://localhost:8081/api/soap/RAInfoService + admin + Y2hhbmdlaXQ= + + + local server + http://localhost:8080/ + foo + YmFyYmFyYmFy + + + http://localhost:8081/api/soap/RepositoryService?wsdl + admin + Y2hhbmdlaXQ= + + \ No newline at end of file diff --git a/src/test/resources/com/rapidminer/io/process/XXE_corrupted.xml b/src/test/resources/com/rapidminer/io/process/XXE_corrupted.xml new file mode 100644 index 000000000..233425bdb --- /dev/null +++ b/src/test/resources/com/rapidminer/io/process/XXE_corrupted.xml @@ -0,0 +1,79 @@ + +]> + + + + + + + + + &xxe; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Type your comment + + + + + + + Prevent Repository folder already exists + + + diff --git a/src/test/resources/com/rapidminer/io/process/some_process.xml b/src/test/resources/com/rapidminer/io/process/some_process.xml new file mode 100644 index 000000000..97d3358e1 --- /dev/null +++ b/src/test/resources/com/rapidminer/io/process/some_process.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Type your comment + + + + + + + Prevent Repository folder already exists + + + diff --git a/src/test/resources/com/rapidminer/search/br.txt b/src/test/resources/com/rapidminer/search/br.txt new file mode 100644 index 000000000..dea0932bb --- /dev/null +++ b/src/test/resources/com/rapidminer/search/br.txt @@ -0,0 +1,61 @@ +a high, little little low +anyone can matters nothing really see +anyway blows the wind + +anyway blows the wind +because come, easy easy go I'm +a aside beelzebub devil for has me put +bismillah, go go, him let let no not we will you +bismillah, go go, him let let not we will you + +bismillah, go go, let let me not we will you +aching all body's the time +a and boy but I'm just loves me nobody poor +all and away but gone I've it now thrown +as carry carry if matters nothing on on, really + +a caught escape from in landslide no reality +cry didn't make mean to you +doesn't matter me me, really to to +come easy easy go go let me will you + +for for me me, +figaro gallileo magnifico +gallileo, gallileo, gallileo, gallileo, +everybody, go goodbye got I've to +all and behind face gotta leave the truth you +a a boy family from he's just poor poor + +a a I little man of see silhouette +all at been born I I'd never sometimes wish +a boy, I I'm just need no poor sympathy +again back I'm if not this time tomorrow +fantasy? is is just life, real the this this + +get get gotta gotta here just just out, outta right +a just killed mama, man +begun had just life mama, +(anyway blows) die don't I mama, ooh the to want wind + +mama, ooh ooh, +go, let me never ooh +go go, let let me never you +no no, no, no, no, no, no, +matters me nothing really to + +baby baby, can't do me oh this to +go let mama mama mama me mia mia, mia, oh +matters nothing ooh ooh really yeah yeah, +and eyes look open see skies the to up your + +dead he's my now pulled trigger, +a against gun head his put +do fandango scaramouch scaramouch, the will you +down my sends shivers spine +and can die leave love me me so think to you you + +and can eye in me my so spit stone think you you +from him his life monstrosity spare this +and frightening lightning, me thunderbolt very very, +come has late, my time too +(never) go go, let let me not will you \ No newline at end of file